From e57b0ec12947f3d200f209584b31a9420fca0022 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Tue, 13 Aug 2024 12:57:39 +0100 Subject: [PATCH] feat: add match chain 699 deploy (#311) --- .../deployments/match_testnet_699/.chainId | 1 + .../AssetMatcherCollection.json | 101 + .../match_testnet_699/DefaultProxyAdmin.json | 259 +++ .../ERC1155LazyMintTransferProxy.json | 267 +++ .../ERC1155RaribleBeaconMeta.json | 199 ++ .../ERC1155RaribleFactoryC2.json | 376 ++++ .../match_testnet_699/ERC1155RaribleMeta.json | 1517 ++++++++++++++ .../ERC1155RaribleMeta_Implementation.json | 1748 +++++++++++++++++ .../ERC1155RaribleMeta_Proxy.json | 287 +++ .../match_testnet_699/ERC20TransferProxy.json | 255 +++ .../ERC721LazyMintTransferProxy.json | 267 +++ .../ERC721RaribleFactoryC2.json | 376 ++++ .../match_testnet_699/ERC721RaribleMeta.json | 1375 +++++++++++++ .../ERC721RaribleMeta_Implementation.json | 1624 +++++++++++++++ .../ERC721RaribleMeta_Proxy.json | 287 +++ .../ERC721RaribleMinimalBeaconMeta.json | 199 ++ .../match_testnet_699/ExchangeMetaV2.json | 1239 ++++++++++++ .../ExchangeMetaV2_Implementation.json | 1329 +++++++++++++ .../ExchangeMetaV2_Proxy.json | 249 +++ .../RaribleExchangeWrapper.json | 692 +++++++ .../match_testnet_699/RoyaltiesRegistry.json | 591 ++++++ .../RoyaltiesRegistry_Implementation.json | 626 ++++++ .../RoyaltiesRegistry_Proxy.json | 249 +++ .../match_testnet_699/TransferProxy.json | 293 +++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 ++ .../7ce9693ea617d70a93374d648505751f.json | 578 ++++++ .../networks/match_testnet_699.md | 17 + .../utils/config/match_testnet_699.json | 4 + 28 files changed, 15148 insertions(+) create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/.chainId create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/AssetMatcherCollection.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/DefaultProxyAdmin.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC20TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMinimalBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/RaribleExchangeWrapper.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/7ce9693ea617d70a93374d648505751f.json create mode 100644 projects/hardhat-deploy/networks/match_testnet_699.md create mode 100644 projects/hardhat-deploy/utils/config/match_testnet_699.json diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/.chainId b/projects/hardhat-deploy/deployments/match_testnet_699/.chainId new file mode 100644 index 000000000..b775c5e15 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/.chainId @@ -0,0 +1 @@ +699 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/match_testnet_699/AssetMatcherCollection.json new file mode 100644 index 000000000..304df45ae --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/AssetMatcherCollection.json @@ -0,0 +1,101 @@ +{ + "address": "0x25bb5A7E5FaCf4de3f65E926c9a14e1ADA2c770a", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "leftAssetType", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "rightAssetType", + "type": "tuple" + } + ], + "name": "matchAssets", + "outputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xfe05e19b28dc6c82201cc8ab5cba69d8a0d2f5cefa765f67c38f6a2b149e3546", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x25bb5A7E5FaCf4de3f65E926c9a14e1ADA2c770a", + "transactionIndex": 1, + "gasUsed": "275219", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb45afbded5da08831acc0a0ffd8cf9b183e32baa12cc53a2811e8a2021073f55", + "transactionHash": "0xfe05e19b28dc6c82201cc8ab5cba69d8a0d2f5cefa765f67c38f6a2b149e3546", + "logs": [], + "blockNumber": 446418, + "cumulativeGasUsed": "327434", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/match_testnet_699/DefaultProxyAdmin.json new file mode 100644 index 000000000..7e86a9b8c --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x939a020fb5af7cde4cffad701d3786c162937999fe094bab9b64a26d788debed", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "transactionIndex": 1, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000021000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000200000000000000000000000000000000000000000000000000002000000000000000000000020000000000000000000002000000000000000000000000000000000000000000000", + "blockHash": "0xa459117a088c46efee20169f666efb96e4510c442be56a77aee43d253b68ecbd", + "transactionHash": "0x939a020fb5af7cde4cffad701d3786c162937999fe094bab9b64a26d788debed", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446332, + "transactionHash": "0x939a020fb5af7cde4cffad701d3786c162937999fe094bab9b64a26d788debed", + "address": "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa459117a088c46efee20169f666efb96e4510c442be56a77aee43d253b68ecbd" + } + ], + "blockNumber": 446332, + "cumulativeGasUsed": "687978", + "status": 1, + "byzantium": true + }, + "args": [ + "0x285772284a33161095aa54897e13e322Ae28024d" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155LazyMintTransferProxy.json new file mode 100644 index 000000000..6f2e1ce0f --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155LazyMintTransferProxy.json @@ -0,0 +1,267 @@ +{ + "address": "0xBc8453F510474B8542120AE312f878BC44693Ddc", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x8e4d585c8ccd6f6ca451e3c1a063fe3c439ccfe48fc5cfed21ba7d30d67c5ced", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xBc8453F510474B8542120AE312f878BC44693Ddc", + "transactionIndex": 1, + "gasUsed": "837334", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x08a64ffc13e2bce775b698faf60a7dc82a41f657bee9732f33e5e1d3eddd6dc5", + "transactionHash": "0x8e4d585c8ccd6f6ca451e3c1a063fe3c439ccfe48fc5cfed21ba7d30d67c5ced", + "logs": [], + "blockNumber": 446371, + "cumulativeGasUsed": "881161", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x246520e6a1b1b2a82d45b69e7f62b9a13a989b4cf274554b380f05eeca530edc\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610e2e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16207, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleBeaconMeta.json new file mode 100644 index 000000000..9982957f6 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleBeaconMeta.json @@ -0,0 +1,199 @@ +{ + "address": "0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x4cbd23a2b339acfb721c80b986147920c707992442dc18a476f0b10a85a4eac1", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78", + "transactionIndex": 1, + "gasUsed": "356400", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010003000000000000000000000000000000000000021000800000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7e02dfa4a78c23442b275f99fb75a952d10b7c36272a64ec5be03d1b595669ce", + "transactionHash": "0x4cbd23a2b339acfb721c80b986147920c707992442dc18a476f0b10a85a4eac1", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446450, + "transactionHash": "0x4cbd23a2b339acfb721c80b986147920c707992442dc18a476f0b10a85a4eac1", + "address": "0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7e02dfa4a78c23442b275f99fb75a952d10b7c36272a64ec5be03d1b595669ce" + } + ], + "blockNumber": 446450, + "cumulativeGasUsed": "400227", + "status": 1, + "byzantium": true + }, + "args": [ + "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e" + ], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":\"ERC1155RaribleBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x57542843e45d104f4bba423476cdc9e39f7ef6ebd3dda73e760e6961e6e66c33\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220b8a4d47218d4878de05172b369b07dfc1e4154b02bf44bfe334636245d8dcff364736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220b8a4d47218d4878de05172b369b07dfc1e4154b02bf44bfe334636245d8dcff364736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5276, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6331, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleFactoryC2.json new file mode 100644 index 000000000..7f1a0c4e1 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleFactoryC2.json @@ -0,0 +1,376 @@ +{ + "address": "0x6938Bcd84F5d4388125aA80423db48a74a0584b1", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x20628667a98e40dbc145ef27c123285dec3651c6117a7cfdf237167cf22f9455", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x6938Bcd84F5d4388125aA80423db48a74a0584b1", + "transactionIndex": 1, + "gasUsed": "1322013", + "logsBloom": "0x00000000000000000000000000000000000000000000000000804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000021000000000000000000800000000000000000000000000000000400000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000800000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x502b3eac0953e9ed25855f96ad7829615c9cd9d533515ce6d3b98d6dd455ae6c", + "transactionHash": "0x20628667a98e40dbc145ef27c123285dec3651c6117a7cfdf237167cf22f9455", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446454, + "transactionHash": "0x20628667a98e40dbc145ef27c123285dec3651c6117a7cfdf237167cf22f9455", + "address": "0x6938Bcd84F5d4388125aA80423db48a74a0584b1", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x502b3eac0953e9ed25855f96ad7829615c9cd9d533515ce6d3b98d6dd455ae6c" + } + ], + "blockNumber": 446454, + "cumulativeGasUsed": "1374216", + "status": 1, + "byzantium": true + }, + "args": [ + "0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78", + "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "0xBc8453F510474B8542120AE312f878BC44693Ddc" + ], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xf2c0efef181a15847820a0eafa6c85af2502d48586283d1404fb10ab06388949\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5276, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 19230, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 19232, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 19234, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta.json new file mode 100644 index 000000000..fc07f9107 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta.json @@ -0,0 +1,1517 @@ +{ + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "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": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "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": "values", + "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": "value", + "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" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "transactionIndex": 1, + "gasUsed": "1082260", + "logsBloom": "0x00000000000000000000000010000000400000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000002010001000200000800000000000000000000104000021000000000001000000800000000800000000000000000000001400000000000000000004000000000000000000000000000000000000000800000000020000000000000100000000000000000000000000000200000000000000000000020000000000000000010000000000000000400000000000000000020000000000000000010000100000000000000000000200000001000000001000000", + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c", + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000027782f629b1a64140c2c1fc7ef9e9ea112b59a6e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000bc8453f510474b8542120ae312f878bc44693ddc" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 4, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 5, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + } + ], + "blockNumber": 446446, + "cumulativeGasUsed": "1126087", + "status": 1, + "byzantium": true + }, + "args": [ + "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x173c43d200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20000000000000000000000000bc8453f510474b8542120ae312f878bc44693ddc000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC1155Rarible_init", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "0xBc8453F510474B8542120AE312f878BC44693Ddc" + ] + }, + "implementation": "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Implementation.json new file mode 100644 index 000000000..0e989d27b --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Implementation.json @@ -0,0 +1,1748 @@ +{ + "address": "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "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": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "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": "values", + "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": "value", + "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" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x464e4ca9acf2965adc139d14382cddf9d0e0c8026bdf080e9cc473beec9e1d02", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e", + "transactionIndex": 1, + "gasUsed": "5337736", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5ffb7dcefc5c44dffe70ac63fcf2b92c09f9030ef36b5dbea80e912aacf313ce", + "transactionHash": "0x464e4ca9acf2965adc139d14382cddf9d0e0c8026bdf080e9cc473beec9e1d02", + "logs": [], + "blockNumber": 446442, + "cumulativeGasUsed": "5389939", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"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\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"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\":\"values\",\"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\":\"value\",\"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\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":\"ERC1155RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC1155Base.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleUserMeta\\\", \\\"1\\\");\\n \\n isPrivate = true;\\n\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf8646e536fc91fcba95693f7ba6c39a19d3c6256811b13db54004302dcf1f912\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615f8c80620000216000396000f3fe6080604052600436106101e25760003560e01c8063715018a611610102578063cad96cca11610095578063f242432a11610064578063f242432a1461057f578063f2fde38b1461059f578063f5298aca146105bf578063ffc4e0a7146105df576101e2565b8063cad96cca1461050a578063e07f23191461052a578063e8a3d4851461054a578063e985e9c51461055f576101e2565b806395d89b41116100d157806395d89b4114610495578063983b2d56146104aa578063a22cb465146104ca578063aa271e1a146104ea576101e2565b8063715018a61461041157806371e2a65714610426578063891be974146104465780638da5cb5b14610473576101e2565b80632d0335ab1161017a57806355f804b31161014957806355f804b31461039c57806361e05459146103bc5780636b20c454146103dc5780636c0360eb146103fc576101e2565b80632d0335ab1461030f5780632eb2c2d61461032f5780633092afd51461034f5780634e1273f41461036f576101e2565b80630e89341c116101b65780630e89341c1461027f5780630eaead671461029f578063173c43d2146102c15780632a55205a146102e1576101e2565b8062fdd58e146101e757806301ffc9a71461021d57806306fdde031461024a5780630c53c51c1461026c575b600080fd5b3480156101f357600080fd5b50610207610202366004615268565b6105ff565b6040516102149190615ad4565b60405180910390f35b34801561022957600080fd5b5061023d610238366004615361565b610671565b6040516102149190615825565b34801561025657600080fd5b5061025f610684565b6040516102149190615830565b61025f61027a3660046151ee565b610713565b34801561028b57600080fd5b5061025f61029a36600461562c565b610a8c565b3480156102ab57600080fd5b506102bf6102ba3660046155d5565b610a97565b005b3480156102cd57600080fd5b506102bf6102dc3660046153bb565b610b3b565b3480156102ed57600080fd5b506103016102fc366004615685565b610beb565b6040516102149291906157c1565b34801561031b57600080fd5b5061020761032a366004614fe8565b610cf9565b34801561033b57600080fd5b506102bf61034a36600461503c565b610d15565b34801561035b57600080fd5b506102bf61036a366004614fe8565b611013565b34801561037b57600080fd5b5061038f61038a366004615301565b6110c3565b60405161021491906157ed565b3480156103a857600080fd5b506102bf6103b7366004615389565b6111ae565b3480156103c857600080fd5b506102bf6103d7366004615482565b611253565b3480156103e857600080fd5b506102bf6103f736600461514b565b61130b565b34801561040857600080fd5b5061025f611491565b34801561041d57600080fd5b506102bf611529565b34801561043257600080fd5b506102bf6104413660046152c7565b6115d5565b34801561045257600080fd5b5061046661046136600461562c565b6116be565b60405161021491906157da565b34801561047f57600080fd5b5061048861174e565b6040516102149190615777565b3480156104a157600080fd5b5061025f61175d565b3480156104b657600080fd5b506102bf6104c5366004614fe8565b6117b9565b3480156104d657600080fd5b506102bf6104e53660046151bd565b61186e565b3480156104f657600080fd5b5061023d610505366004614fe8565b61195d565b34801561051657600080fd5b5061046661052536600461562c565b61197c565b34801561053657600080fd5b506102bf610545366004615644565b6119f7565b34801561055657600080fd5b5061025f611a3a565b34801561056b57600080fd5b5061023d61057a366004615004565b611a96565b34801561058b57600080fd5b506102bf61059a3660046150e5565b611aa9565b3480156105ab57600080fd5b506102bf6105ba366004614fe8565b611c62565b3480156105cb57600080fd5b506102bf6105da366004615293565b611d65565b3480156105eb57600080fd5b506102bf6105fa36600461556e565b611de1565b60006001600160a01b0383166106465760405162461bcd60e51b815260040180806020018281038252602b815260200180615c80602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b600061067c82611e89565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b505050505081565b6060600061072086611f28565b90506000356001600160e01b03199081169082161415610787576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107c58882888888611f44565b6108005760405162461bcd60e51b8152600401808060200182810382526021815260200180615e976021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb602052604090205461082590600161202e565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108905780518252601f199092019160209182019101610871565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109065780518252601f1990920191602091820191016108e7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b5091509150816109c4576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a43578181015183820152602001610a2b565b50505050905090810190601f168015610a705780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b606061067c82612088565b6102965460ff1615610b2b578260600151600081518110610ab457fe5b6020026020010151600001516001600160a01b0316610ad161174e565b6001600160a01b03161480610b065750610b068360600151600081518110610af557fe5b60200260200101516000015161195d565b610b2b5760405162461bcd60e51b8152600401610b229061586e565b60405180910390fd5b610b3683838361221e565b505050565b610b4986868686868661251a565b610b96604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061264c565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bca6126dc565b8787604051610bdb9392919061578b565b60405180910390a1505050505050565b60008281526101fa60205260408120548190610c0c57506000905080610cf2565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610c8857600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610c39565b50505050905080600081518110610c9b57fe5b60209081029190910101515192506000805b8251811015610ce657828181518110610cc257fe5b6020026020010151602001516001600160601b031682019150806001019050610cad565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610d555760405162461bcd60e51b8152600401808060200182810382526028815260200180615f2f6028913960400191505060405180910390fd5b6001600160a01b038416610d9a5760405162461bcd60e51b8152600401808060200182810382526025815260200180615d836025913960400191505060405180910390fd5b610da26126dc565b6001600160a01b0316856001600160a01b03161480610dc85750610dc88561057a6126dc565b610e035760405162461bcd60e51b8152600401808060200182810382526032815260200180615da86032913960400191505060405180910390fd5b6000610e0d6126dc565b9050610e1d81878787878761100b565b60005b8451811015610f23576000858281518110610e3757fe5b602002602001015190506000858381518110610e4f57fe5b60200260200101519050610ebc816040518060600160405280602a8152602001615e4d602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546126eb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610ef3908261202e565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610e20565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610fa9578181015183820152602001610f91565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610fe8578181015183820152602001610fd0565b5050505090500194505050505060405180910390a461100b818787878787612782565b505050505050565b61101b6126dc565b6001600160a01b031661102c61174e565b6001600160a01b031614611075576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111055760405162461bcd60e51b8152600401808060200182810382526029815260200180615f066029913960400191505060405180910390fd5b600083516001600160401b038111801561111e57600080fd5b50604051908082528060200260200182016040528015611148578160200160208202803683370190505b50905060005b84518110156111a65761118785828151811061116657fe5b602002602001015185838151811061117a57fe5b60200260200101516105ff565b82828151811061119357fe5b602090810291909101015260010161114e565b509392505050565b6111b66126dc565b6001600160a01b03166111c761174e565b6001600160a01b031614611210576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b611219816129f8565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516112489190615830565b60405180910390a150565b61126187878787868661251a565b6112b2604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061264c565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc6112e96126dc565b88886040516112fa9392919061578b565b60405180910390a150505050505050565b805182511461132c5760405162461bcd60e51b8152600401610b2290615a1d565b600082516001600160401b038111801561134557600080fd5b5060405190808252806020026020018201604052801561136f578160200160208202803683370190505b509050600083516001600160401b038111801561138b57600080fd5b506040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50905060005b845181101561142a576113f48582815181106113d357fe5b60200260200101518583815181106113e757fe5b6020026020010151612a0c565b84838151811061140057fe5b6020026020010184848151811061141357fe5b6020908102919091010191909152526001016113bb565b50611436858584612a81565b846001600160a01b03166114486126dc565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611482929190615800565b60405180910390a35050505050565b61012f8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561151e5780601f106114f35761010080835404028352916020019161151e565b820191906000526020600020905b81548152906001019060200180831161150157829003601f168201915b505050505090505b90565b6115316126dc565b6001600160a01b031661154261174e565b6001600160a01b03161461158b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6115dd6126dc565b6001600160a01b03166115ee61174e565b6001600160a01b031614611637576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b60005b81518110156116ba57600082828151811061165157fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a35060010161163a565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561174357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016116f4565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b6117c16126dc565b6001600160a01b03166117d261174e565b6001600160a01b03161461181b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b03166118806126dc565b6001600160a01b031614156118c65760405162461bcd60e51b8152600401808060200182810382526029815260200180615edd6029913960400191505060405180910390fd5b80609860006118d36126dc565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119176126dc565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561174357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016116f4565b816001600160a01b0316611a096126dc565b6001600160a01b031614611a2f5760405162461bcd60e51b8152600401610b2290615925565b610b36838383612af5565b610230805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b6000611aa28383612ba1565b9392505050565b6001600160a01b038416611aee5760405162461bcd60e51b8152600401808060200182810382526025815260200180615d836025913960400191505060405180910390fd5b611af66126dc565b6001600160a01b0316856001600160a01b03161480611b1c5750611b1c8561057a6126dc565b611b575760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b6000611b616126dc565b9050611b81818787611b7288612bcd565b611b7b88612bcd565b8761100b565b611bc8836040518060600160405280602a8152602001615e4d602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906126eb565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611bff908461202e565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615c6083398151915292908290030190a461100b818787878787612c12565b611c6a6126dc565b6001600160a01b0316611c7b61174e565b6001600160a01b031614611cc4576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b038116611d095760405162461bcd60e51b8152600401808060200182810382526026815260200180615cee6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611d728484612a0c565b90925090508115611d8857611d88858584612d83565b8015611dda57846001600160a01b0316611da06126dc565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611482929190615af6565b5050505050565b6000611df18486600001516105ff565b9050818115611e2b578280831015611e065750815b611e26868689600001518460405180602001604052806000815250611aa9565b830390505b801561100b578560600151600081518110611e4257fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611e7e5760405162461bcd60e51b8152600401610b2290615843565b61100b868583610a97565b60006001600160e01b03198216636db15a0f60e01b1480611eba57506001600160e01b0319821663656cb66560e11b145b80611ed557506001600160e01b0319821663152a902d60e11b145b80611ef057506001600160e01b031982166301ffc9a760e01b145b80611f0b57506001600160e01b03198216636cdb3d1360e11b145b8061067c5750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611f3c5750600061067f565b506020015190565b6000806001611f5a611f5588612df7565b612e7a565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611fb1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661200d576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611aa2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060949383018282801561211d5780601f106120f25761010080835404028352916020019161211d565b820191906000526020600020905b81548152906001019060200180831161210057829003601f168201915b50505050509050600061212e611491565b90508051600014156121425750905061067f565b81511561215c576121538183612ec6565b9250505061067f565b80612166856130ab565b6040516020018083805190602001908083835b602083106121985780518252601f199092019160209182019101612179565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106121e05780518252601f1990920191602091820191016121c1565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c600061222d6126dc565b9050806001600160a01b0316826001600160a01b0316148061225457506122548282611a96565b6122705760405162461bcd60e51b8152600401610b2290615974565b600083116122905760405162461bcd60e51b8152600401610b229061594a565b845160009081526101fc60205260409020546123f95784606001516000815181106122b757fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146122f35760405162461bcd60e51b8152600401610b22906158fa565b60008560400151116123175760405162461bcd60e51b8152600401610b229061589b565b8460a00151518560600151511461232d57600080fd5b600061233886613185565b905060005b8660600151518110156123ae5760008760600151828151811061235c57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146123a5576123a581848a60a00151858151811061239857fe5b60200260200101516133d8565b5060010161233d565b506123c1866000015187604001516133e3565b6123d38660000151876080015161344d565b6123e58660000151876060015161363c565b6123f7866000015187602001516137eb565b505b61241884866000015185604051806020016040528060008152506138af565b836001600160a01b0316826001600160a01b0316146124c957816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615c60833981519152886000015187604051612473929190615af6565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615c608339815191528860000151876040516124bc929190615af6565b60405180910390a4611dda565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615c6083398151915288600001518760405161250b929190615af6565b60405180910390a45050505050565b600054610100900460ff168061253357506125336138c1565b80612541575060005460ff16155b61257c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff161580156125a7576000805460ff1961ff0019909116610100171660011790555b6125af6138d2565b6125b76139cc565b6125bf6139ce565b6125c7613a7f565b6125cf613b1f565b6125e760405180602001604052806000815250613bef565b6125f084613cba565b6125f86139cc565b612600613d6c565b61260a8787613e09565b612612613a7f565b61261b856129f8565b612626836001613e32565b612631826001613e32565b8015612643576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612686613e92565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006126e6613e9c565b905090565b6000818484111561277a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561273f578181015183820152602001612727565b50505050905090810190601f16801561276c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612794846001600160a01b0316613ef8565b1561100b57836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561282257818101518382015260200161280a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612861578181015183820152602001612849565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561289d578181015183820152602001612885565b50505050905090810190601f1680156128ca5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156128ef57600080fd5b505af192505050801561291457506040513d602081101561290f57600080fd5b505160015b6129a957612920615b4a565b8061292b5750612972565b60405162461bcd60e51b815260206004820181815283516024840152835184939192839260440191908501908083836000831561273f578181015183820152602001612727565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c046034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126435760405162461bcd60e51b8152600401808060200182810382526028815260200180615c386028913960400191505060405180910390fd5b80516116ba9061012f906020840190614c2c565b806000606084901c612a1c6126dc565b6001600160a01b0316816001600160a01b03161415612a79578391506000612a4386613efe565b90508015612a68576000612a5687613f11565b8203905080861115612a66578093505b505b612a728684613f24565b8285039350505b509250929050565b612a896126dc565b6001600160a01b0316836001600160a01b03161480612aaf5750612aaf8361057a6126dc565b612aea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b610b36838383613f3d565b60008381526101fa6020526040812054905b81811015611dda5760008581526101fa6020526040902080546001600160a01b038616919083908110612b3657fe5b6000918252602090912001546001600160a01b03161415612b995760008581526101fa60205260409020805484919083908110612b6f57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612b07565b6001600160a01b038116600090815260c9602052604081205460ff1680611aa25750611aa283836141ab565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c0157fe5b602090810291909101015292915050565b612c24846001600160a01b0316613ef8565b1561100b57836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cb3578181015183820152602001612c9b565b50505050905090810190601f168015612ce05780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612d0357600080fd5b505af1925050508015612d2857506040513d6020811015612d2357600080fd5b505160015b612d3457612920615b4a565b6001600160e01b0319811663f23a6e6160e01b146126435760405162461bcd60e51b8152600401808060200182810382526028815260200180615c386028913960400191505060405180910390fd5b612d8b6126dc565b6001600160a01b0316836001600160a01b03161480612db15750612db18361057a6126dc565b612dec5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b610b368383836141d9565b6000604051806080016040528060438152602001615cab60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612e846142fa565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b80518251606091849184911015612f915784846040516020018083805190602001908083835b60208310612f0b5780518252601f199092019160209182019101612eec565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612f535780518252601f199092019160209182019101612f34565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061066b565b60005b82518110156130a157828181518110612fa957fe5b602001015160f81c60f81b6001600160f81b031916828281518110612fca57fe5b01602001516001600160f81b031916146130995785856040516020018083805190602001908083835b602083106130125780518252601f199092019160209182019101612ff3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061305a5780518252601f19909201916020918201910161303b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061066b565b600101612f94565b5092949350505050565b6060816130d057506040805180820190915260018152600360fc1b602082015261067f565b8160005b81156130e857600101600a820491506130d4565b6000816001600160401b038111801561310057600080fd5b506040519080825280601f01601f19166020018201604052801561312b576020820181803683370190505b50859350905060001982015b831561317c57600a840660300160f81b8282806001900393508151811061315a57fe5b60200101906001600160f81b031916908160001a905350600a84049350613137565b50949350505050565b6000808260800151516001600160401b03811180156131a357600080fd5b506040519080825280602002602001820160405280156131cd578160200160208202803683370190505b50905060005b83608001515181101561321f57613200846080015182815181106131f357fe5b6020026020010151614301565b82828151811061320c57fe5b60209081029190910101526001016131d3565b5060008360600151516001600160401b038111801561323d57600080fd5b50604051908082528060200260200182016040528015613267578160200160208202803683370190505b50905060005b8460600151518110156132ac5761328d856060015182815181106131f357fe5b82828151811061329957fe5b602090810291909101015260010161326d565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133155781810151838201526020016132fd565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b8381101561336657818101518382015260200161334e565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b3683838361436e565b60008281526101fc6020526040902054156133fd57600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906134419084908490615af6565b60405180910390a15050565b6000805b82518110156135f15760006001600160a01b031683828151811061347157fe5b6020026020010151600001516001600160a01b031614156134d9576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106134e557fe5b6020026020010151602001516001600160601b03166000141561354f576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061355b57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061359457fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613451565b5061271081106136325760405162461bcd60e51b8152600401808060200182810382526025815260200180615eb86025913960400191505060405180910390fd5b610b3683836145b0565b60008281526101fb6020526040812090805b835181101561378a5760006001600160a01b031684828151811061366e57fe5b6020026020010151600001516001600160a01b031614156136a15760405162461bcd60e51b8152600401610b22906159e6565b8381815181106136ad57fe5b6020026020010151602001516001600160601b0316600014156136e25760405162461bcd60e51b8152600401610b22906158c5565b828482815181106136ef57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516137809085908390811061375c57fe5b6020026020010151602001516001600160601b03168361202e90919063ffffffff16565b915060010161364e565b5080612710146137ac5760405162461bcd60e51b8152600401610b2290615a86565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516137dd929190615add565b60405180910390a150505050565b600082815261012e60209081526040909120825161380b92840190614c2c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b61383784612088565b6040805160208082528351818301528351919283929083019185019080838360005b83811015613871578181015183820152602001613859565b50505050905090810190601f16801561389e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6138bb848484846145e1565b50505050565b60006138cc30613ef8565b15905090565b600054610100900460ff16806138eb57506138eb6138c1565b806138f9575060005460ff16155b6139345760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff1615801561395f576000805460ff1961ff0019909116610100171660011790555b60006139696126dc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156139c9576000805461ff00191690555b50565b565b600054610100900460ff16806139e757506139e76138c1565b806139f5575060005460ff16155b613a305760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613a5b576000805460ff1961ff0019909116610100171660011790555b613a6b6301ffc9a760e01b6146f3565b80156139c9576000805461ff001916905550565b600054610100900460ff1680613a985750613a986138c1565b80613aa6575060005460ff16155b613ae15760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613a6b576000805460ff1961ff00199091166101001716600117905580156139c9576000805461ff001916905550565b600054610100900460ff1680613b385750613b386138c1565b80613b46575060005460ff16155b613b815760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613bac576000805460ff1961ff0019909116610100171660011790555b613a6b604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614777565b600054610100900460ff1680613c085750613c086138c1565b80613c16575060005460ff16155b613c515760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613c7c576000805460ff1961ff0019909116610100171660011790555b613c8582614839565b613c95636cdb3d1360e11b6146f3565b613ca56303a24d0760e21b6146f3565b80156116ba576000805461ff00191690555050565b600054610100900460ff1680613cd35750613cd36138c1565b80613ce1575060005460ff16155b613d1c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613d47576000805460ff1961ff0019909116610100171660011790555b8151613d5b90610230906020850190614c2c565b50613ca563e8a3d48560e01b6146f3565b600054610100900460ff1680613d855750613d856138c1565b80613d93575060005460ff16155b613dce5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613df9576000805460ff1961ff0019909116610100171660011790555b613a6b63656cb66560e11b6146f3565b8151613e1d90610262906020850190614c2c565b508051610b3690610263906020840190614c2c565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006126e661484c565b600033301415613ef357600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115269050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f825760405162461bcd60e51b8152600401808060200182810382526023815260200180615e2a6023913960400191505060405180910390fd5b8051825114613fc25760405162461bcd60e51b8152600401808060200182810382526028815260200180615f2f6028913960400191505060405180910390fd5b6000613fcc6126dc565b9050613fec8185600086866040518060200160405280600081525061100b565b60005b83518110156140ca5761408183828151811061400757fe5b6020026020010151604051806060016040528060248152602001615d14602491396097600088868151811061403857fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546126eb9092919063ffffffff16565b6097600086848151811061409157fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613fef565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614151578181015183820152602001614139565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614190578181015183820152602001614178565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b03831661421e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e2a6023913960400191505060405180910390fd5b60006142286126dc565b90506142588185600061423a87612bcd565b61424387612bcd565b6040518060200160405280600081525061100b565b61429f82604051806060016040528060248152602001615d146024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906126eb565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615c6083398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061437983614850565b9050600082516041141561439457614391828461485a565b90505b846001600160a01b0316816001600160a01b031614611dda576143bf856001600160a01b0316613ef8565b156145385760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b8381101561442e578181015183820152602001614416565b50505050905090810190601f16801561445b5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561447957600080fd5b505afa15801561448d573d6000803e3d6000fd5b505050506040513d60208110156144a357600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146145325760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561273f578181015183820152602001612727565b50611dda565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561273f578181015183820152602001612727565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613441929190615add565b60008381526101fd60205260408120546145fc90849061202e565b60008581526101fc602052604090205490915081111561462e5760405162461bcd60e51b8152600401610b22906159bc565b60008481526101fd602052604090208190556001600160a01b0385166146665760405162461bcd60e51b8152600401610b2290615a45565b60006146706126dc565b90506146918160008861468289612bcd565b61468b89612bcd565b8861100b565b60008581526097602090815260408083206001600160a01b038a1684529091529020546146be908561202e565b60008681526097602090815260408083206001600160a01b038b16845290915281209190915561100b90829088888888612c12565b6001600160e01b03198082161415614752576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061479057506147906138c1565b8061479e575060005460ff16155b6147d95760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015614804576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b36576000805461ff0019169055505050565b80516116ba906099906020840190614c2c565b4690565b6000612e846148da565b600081516041146148b2576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6148d086828585614915565b9695505050505050565b60006126e67f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614908614b6b565b614910614b72565b614b79565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149765760405162461bcd60e51b8152600401808060200182810382526022815260200180615d616022913960400191505060405180910390fd5b6000601e8560ff161115614a50576004850360ff16601b148061499f57506004850360ff16601c145b6149da5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e086022913960400191505060405180910390fd5b60016149e587614bdb565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a3f573d6000803e3d6000fd5b505050602060405103519050614b07565b8460ff16601b1480614a6557508460ff16601c145b614aa05760405162461bcd60e51b8152600401808060200182810382526022815260200180615e086022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614afa573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b62576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b8661484c565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c625760008555614ca8565b82601f10614c7b57805160ff1916838001178555614ca8565b82800160010185558215614ca8579182015b82811115614ca8578251825591602001919060010190614c8d565b50614cb4929150614cb8565b5090565b5b80821115614cb45760008155600101614cb9565b803561067f81615bee565b600082601f830112614ce8578081fd5b81356020614cfd614cf883615b27565b615b04565b8281528181019085830183850287018401881015614d19578586fd5b855b85811015614d40578135614d2e81615bee565b84529284019290840190600101614d1b565b5090979650505050505050565b600082601f830112614d5d578081fd5b81356020614d6d614cf883615b27565b82815281810190858301855b85811015614d4057614d90898684358b0101614eb7565b84529284019290840190600101614d79565b600082601f830112614db2578081fd5b81356020614dc2614cf883615b27565b82815281810190858301604080860288018501891015614de0578687fd5b865b86811015614e4f5781838b031215614df8578788fd5b81518281018181106001600160401b0382111715614e1257fe5b83528335614e1f81615bee565b8152838701356001600160601b0381168114614e3957898afd5b8188015285529385019391810191600101614de2565b509198975050505050505050565b600082601f830112614e6d578081fd5b81356020614e7d614cf883615b27565b8281528181019085830183850287018401881015614e99578586fd5b855b85811015614d4057813584529284019290840190600101614e9b565b600082601f830112614ec7578081fd5b81356001600160401b03811115614eda57fe5b614eed601f8201601f1916602001615b04565b818152846020838601011115614f01578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614f2c578081fd5b614f3660c0615b04565b90508135815260208201356001600160401b0380821115614f5657600080fd5b614f6285838601614eb7565b6020840152604084013560408401526060840135915080821115614f8557600080fd5b614f9185838601614da2565b60608401526080840135915080821115614faa57600080fd5b614fb685838601614da2565b608084015260a0840135915080821115614fcf57600080fd5b50614fdc84828501614d4d565b60a08301525092915050565b600060208284031215614ff9578081fd5b8135611aa281615bee565b60008060408385031215615016578081fd5b823561502181615bee565b9150602083013561503181615bee565b809150509250929050565b600080600080600060a08688031215615053578081fd5b853561505e81615bee565b9450602086013561506e81615bee565b935060408601356001600160401b0380821115615089578283fd5b61509589838a01614e5d565b945060608801359150808211156150aa578283fd5b6150b689838a01614e5d565b935060808801359150808211156150cb578283fd5b506150d888828901614eb7565b9150509295509295909350565b600080600080600060a086880312156150fc578283fd5b853561510781615bee565b9450602086013561511781615bee565b9350604086013592506060860135915060808601356001600160401b0381111561513f578182fd5b6150d888828901614eb7565b60008060006060848603121561515f578081fd5b833561516a81615bee565b925060208401356001600160401b0380821115615185578283fd5b61519187838801614e5d565b935060408601359150808211156151a6578283fd5b506151b386828701614e5d565b9150509250925092565b600080604083850312156151cf578182fd5b82356151da81615bee565b915060208301358015158114615031578182fd5b600080600080600060a08688031215615205578283fd5b853561521081615bee565b945060208601356001600160401b0381111561522a578384fd5b61523688828901614eb7565b9450506040860135925060608601359150608086013560ff8116811461525a578182fd5b809150509295509295909350565b6000806040838503121561527a578182fd5b823561528581615bee565b946020939093013593505050565b6000806000606084860312156152a7578081fd5b83356152b281615bee565b95602085013595506040909401359392505050565b6000602082840312156152d8578081fd5b81356001600160401b038111156152ed578182fd5b6152f984828501614cd8565b949350505050565b60008060408385031215615313578182fd5b82356001600160401b0380821115615329578384fd5b61533586838701614cd8565b9350602085013591508082111561534a578283fd5b5061535785828601614e5d565b9150509250929050565b600060208284031215615372578081fd5b81356001600160e01b031981168114611aa2578182fd5b60006020828403121561539a578081fd5b81356001600160401b038111156153af578182fd5b6152f984828501614eb7565b60008060008060008060c087890312156153d3578384fd5b86356001600160401b03808211156153e9578586fd5b6153f58a838b01614eb7565b9750602089013591508082111561540a578586fd5b6154168a838b01614eb7565b9650604089013591508082111561542b578586fd5b6154378a838b01614eb7565b9550606089013591508082111561544c578283fd5b5061545989828a01614eb7565b93505061546860808801614ccd565b915061547660a08801614ccd565b90509295509295509295565b600080600080600080600060e0888a03121561549c578485fd5b87356001600160401b03808211156154b2578687fd5b6154be8b838c01614eb7565b985060208a01359150808211156154d3578687fd5b6154df8b838c01614eb7565b975060408a01359150808211156154f4578687fd5b6155008b838c01614eb7565b965060608a0135915080821115615515578283fd5b6155218b838c01614eb7565b955060808a0135915080821115615536578283fd5b506155438a828b01614cd8565b93505061555260a08901614ccd565b915061556060c08901614ccd565b905092959891949750929550565b60008060008060808587031215615583578182fd5b84356001600160401b03811115615598578283fd5b6155a487828801614f1b565b94505060208501356155b581615bee565b925060408501356155c581615bee565b9396929550929360600135925050565b6000806000606084860312156155e9578081fd5b83356001600160401b038111156155fe578182fd5b61560a86828701614f1b565b935050602084013561561b81615bee565b929592945050506040919091013590565b60006020828403121561563d578081fd5b5035919050565b600080600060608486031215615658578081fd5b83359250602084013561566a81615bee565b9150604084013561567a81615bee565b809150509250925092565b60008060408385031215615697578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156156f257815180516001600160a01b031688528301516001600160601b031683880152604090960195908201906001016156b9565b509495945050505050565b6000815180845260208085019450808401835b838110156156f257815187529582019590820190600101615710565b60008151808452815b8181101561575157602081850181015186830182015201615735565b818111156157625782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03841681526060602082018190526000906157af9083018561572c565b82810360408401526148d0818561572c565b6001600160a01b03929092168252602082015260400190565b600060208252611aa260208301846156a6565b600060208252611aa260208301846156fd565b60006040825261581360408301856156fd565b8281036020840152614b6281856156fd565b901515815260200190565b600060208252611aa2602083018461572c565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152f960408301846156a6565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b1f57fe5b604052919050565b60006001600160401b03821115615b3a57fe5b5060209081020190565b60e01c90565b600060443d1015615b5a57611526565b600481823e6308c379a0615b6e8251615b44565b14615b7857611526565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615ba75750505050611526565b82840192508251915080821115615bc15750505050611526565b503d83016020828401011115615bd957505050611526565b601f01601f1916810160200160405291505090565b6001600160a01b03811681146139c957600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220ce4d4dc3b1fad263d8a31f95005350f34678e0a530aabeb658eb6667bb8dcdd964736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101e25760003560e01c8063715018a611610102578063cad96cca11610095578063f242432a11610064578063f242432a1461057f578063f2fde38b1461059f578063f5298aca146105bf578063ffc4e0a7146105df576101e2565b8063cad96cca1461050a578063e07f23191461052a578063e8a3d4851461054a578063e985e9c51461055f576101e2565b806395d89b41116100d157806395d89b4114610495578063983b2d56146104aa578063a22cb465146104ca578063aa271e1a146104ea576101e2565b8063715018a61461041157806371e2a65714610426578063891be974146104465780638da5cb5b14610473576101e2565b80632d0335ab1161017a57806355f804b31161014957806355f804b31461039c57806361e05459146103bc5780636b20c454146103dc5780636c0360eb146103fc576101e2565b80632d0335ab1461030f5780632eb2c2d61461032f5780633092afd51461034f5780634e1273f41461036f576101e2565b80630e89341c116101b65780630e89341c1461027f5780630eaead671461029f578063173c43d2146102c15780632a55205a146102e1576101e2565b8062fdd58e146101e757806301ffc9a71461021d57806306fdde031461024a5780630c53c51c1461026c575b600080fd5b3480156101f357600080fd5b50610207610202366004615268565b6105ff565b6040516102149190615ad4565b60405180910390f35b34801561022957600080fd5b5061023d610238366004615361565b610671565b6040516102149190615825565b34801561025657600080fd5b5061025f610684565b6040516102149190615830565b61025f61027a3660046151ee565b610713565b34801561028b57600080fd5b5061025f61029a36600461562c565b610a8c565b3480156102ab57600080fd5b506102bf6102ba3660046155d5565b610a97565b005b3480156102cd57600080fd5b506102bf6102dc3660046153bb565b610b3b565b3480156102ed57600080fd5b506103016102fc366004615685565b610beb565b6040516102149291906157c1565b34801561031b57600080fd5b5061020761032a366004614fe8565b610cf9565b34801561033b57600080fd5b506102bf61034a36600461503c565b610d15565b34801561035b57600080fd5b506102bf61036a366004614fe8565b611013565b34801561037b57600080fd5b5061038f61038a366004615301565b6110c3565b60405161021491906157ed565b3480156103a857600080fd5b506102bf6103b7366004615389565b6111ae565b3480156103c857600080fd5b506102bf6103d7366004615482565b611253565b3480156103e857600080fd5b506102bf6103f736600461514b565b61130b565b34801561040857600080fd5b5061025f611491565b34801561041d57600080fd5b506102bf611529565b34801561043257600080fd5b506102bf6104413660046152c7565b6115d5565b34801561045257600080fd5b5061046661046136600461562c565b6116be565b60405161021491906157da565b34801561047f57600080fd5b5061048861174e565b6040516102149190615777565b3480156104a157600080fd5b5061025f61175d565b3480156104b657600080fd5b506102bf6104c5366004614fe8565b6117b9565b3480156104d657600080fd5b506102bf6104e53660046151bd565b61186e565b3480156104f657600080fd5b5061023d610505366004614fe8565b61195d565b34801561051657600080fd5b5061046661052536600461562c565b61197c565b34801561053657600080fd5b506102bf610545366004615644565b6119f7565b34801561055657600080fd5b5061025f611a3a565b34801561056b57600080fd5b5061023d61057a366004615004565b611a96565b34801561058b57600080fd5b506102bf61059a3660046150e5565b611aa9565b3480156105ab57600080fd5b506102bf6105ba366004614fe8565b611c62565b3480156105cb57600080fd5b506102bf6105da366004615293565b611d65565b3480156105eb57600080fd5b506102bf6105fa36600461556e565b611de1565b60006001600160a01b0383166106465760405162461bcd60e51b815260040180806020018281038252602b815260200180615c80602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b600061067c82611e89565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b505050505081565b6060600061072086611f28565b90506000356001600160e01b03199081169082161415610787576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107c58882888888611f44565b6108005760405162461bcd60e51b8152600401808060200182810382526021815260200180615e976021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb602052604090205461082590600161202e565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108905780518252601f199092019160209182019101610871565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109065780518252601f1990920191602091820191016108e7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b5091509150816109c4576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a43578181015183820152602001610a2b565b50505050905090810190601f168015610a705780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b606061067c82612088565b6102965460ff1615610b2b578260600151600081518110610ab457fe5b6020026020010151600001516001600160a01b0316610ad161174e565b6001600160a01b03161480610b065750610b068360600151600081518110610af557fe5b60200260200101516000015161195d565b610b2b5760405162461bcd60e51b8152600401610b229061586e565b60405180910390fd5b610b3683838361221e565b505050565b610b4986868686868661251a565b610b96604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061264c565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bca6126dc565b8787604051610bdb9392919061578b565b60405180910390a1505050505050565b60008281526101fa60205260408120548190610c0c57506000905080610cf2565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610c8857600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610c39565b50505050905080600081518110610c9b57fe5b60209081029190910101515192506000805b8251811015610ce657828181518110610cc257fe5b6020026020010151602001516001600160601b031682019150806001019050610cad565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610d555760405162461bcd60e51b8152600401808060200182810382526028815260200180615f2f6028913960400191505060405180910390fd5b6001600160a01b038416610d9a5760405162461bcd60e51b8152600401808060200182810382526025815260200180615d836025913960400191505060405180910390fd5b610da26126dc565b6001600160a01b0316856001600160a01b03161480610dc85750610dc88561057a6126dc565b610e035760405162461bcd60e51b8152600401808060200182810382526032815260200180615da86032913960400191505060405180910390fd5b6000610e0d6126dc565b9050610e1d81878787878761100b565b60005b8451811015610f23576000858281518110610e3757fe5b602002602001015190506000858381518110610e4f57fe5b60200260200101519050610ebc816040518060600160405280602a8152602001615e4d602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546126eb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610ef3908261202e565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610e20565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610fa9578181015183820152602001610f91565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610fe8578181015183820152602001610fd0565b5050505090500194505050505060405180910390a461100b818787878787612782565b505050505050565b61101b6126dc565b6001600160a01b031661102c61174e565b6001600160a01b031614611075576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111055760405162461bcd60e51b8152600401808060200182810382526029815260200180615f066029913960400191505060405180910390fd5b600083516001600160401b038111801561111e57600080fd5b50604051908082528060200260200182016040528015611148578160200160208202803683370190505b50905060005b84518110156111a65761118785828151811061116657fe5b602002602001015185838151811061117a57fe5b60200260200101516105ff565b82828151811061119357fe5b602090810291909101015260010161114e565b509392505050565b6111b66126dc565b6001600160a01b03166111c761174e565b6001600160a01b031614611210576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b611219816129f8565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516112489190615830565b60405180910390a150565b61126187878787868661251a565b6112b2604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061264c565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc6112e96126dc565b88886040516112fa9392919061578b565b60405180910390a150505050505050565b805182511461132c5760405162461bcd60e51b8152600401610b2290615a1d565b600082516001600160401b038111801561134557600080fd5b5060405190808252806020026020018201604052801561136f578160200160208202803683370190505b509050600083516001600160401b038111801561138b57600080fd5b506040519080825280602002602001820160405280156113b5578160200160208202803683370190505b50905060005b845181101561142a576113f48582815181106113d357fe5b60200260200101518583815181106113e757fe5b6020026020010151612a0c565b84838151811061140057fe5b6020026020010184848151811061141357fe5b6020908102919091010191909152526001016113bb565b50611436858584612a81565b846001600160a01b03166114486126dc565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611482929190615800565b60405180910390a35050505050565b61012f8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561151e5780601f106114f35761010080835404028352916020019161151e565b820191906000526020600020905b81548152906001019060200180831161150157829003601f168201915b505050505090505b90565b6115316126dc565b6001600160a01b031661154261174e565b6001600160a01b03161461158b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6115dd6126dc565b6001600160a01b03166115ee61174e565b6001600160a01b031614611637576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b60005b81518110156116ba57600082828151811061165157fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a35060010161163a565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561174357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016116f4565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b6117c16126dc565b6001600160a01b03166117d261174e565b6001600160a01b03161461181b576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b03166118806126dc565b6001600160a01b031614156118c65760405162461bcd60e51b8152600401808060200182810382526029815260200180615edd6029913960400191505060405180910390fd5b80609860006118d36126dc565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119176126dc565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561174357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016116f4565b816001600160a01b0316611a096126dc565b6001600160a01b031614611a2f5760405162461bcd60e51b8152600401610b2290615925565b610b36838383612af5565b610230805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561070b5780601f106106e05761010080835404028352916020019161070b565b6000611aa28383612ba1565b9392505050565b6001600160a01b038416611aee5760405162461bcd60e51b8152600401808060200182810382526025815260200180615d836025913960400191505060405180910390fd5b611af66126dc565b6001600160a01b0316856001600160a01b03161480611b1c5750611b1c8561057a6126dc565b611b575760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b6000611b616126dc565b9050611b81818787611b7288612bcd565b611b7b88612bcd565b8761100b565b611bc8836040518060600160405280602a8152602001615e4d602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906126eb565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611bff908461202e565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615c6083398151915292908290030190a461100b818787878787612c12565b611c6a6126dc565b6001600160a01b0316611c7b61174e565b6001600160a01b031614611cc4576040805162461bcd60e51b81526020600482018190526024820152600080516020615e77833981519152604482015290519081900360640190fd5b6001600160a01b038116611d095760405162461bcd60e51b8152600401808060200182810382526026815260200180615cee6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611d728484612a0c565b90925090508115611d8857611d88858584612d83565b8015611dda57846001600160a01b0316611da06126dc565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611482929190615af6565b5050505050565b6000611df18486600001516105ff565b9050818115611e2b578280831015611e065750815b611e26868689600001518460405180602001604052806000815250611aa9565b830390505b801561100b578560600151600081518110611e4257fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611e7e5760405162461bcd60e51b8152600401610b2290615843565b61100b868583610a97565b60006001600160e01b03198216636db15a0f60e01b1480611eba57506001600160e01b0319821663656cb66560e11b145b80611ed557506001600160e01b0319821663152a902d60e11b145b80611ef057506001600160e01b031982166301ffc9a760e01b145b80611f0b57506001600160e01b03198216636cdb3d1360e11b145b8061067c5750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611f3c5750600061067f565b506020015190565b6000806001611f5a611f5588612df7565b612e7a565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611fb1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661200d576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611aa2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f600260001961010060018616150201909316929092049182018590048502810185019093528083526060949383018282801561211d5780601f106120f25761010080835404028352916020019161211d565b820191906000526020600020905b81548152906001019060200180831161210057829003601f168201915b50505050509050600061212e611491565b90508051600014156121425750905061067f565b81511561215c576121538183612ec6565b9250505061067f565b80612166856130ab565b6040516020018083805190602001908083835b602083106121985780518252601f199092019160209182019101612179565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106121e05780518252601f1990920191602091820191016121c1565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c600061222d6126dc565b9050806001600160a01b0316826001600160a01b0316148061225457506122548282611a96565b6122705760405162461bcd60e51b8152600401610b2290615974565b600083116122905760405162461bcd60e51b8152600401610b229061594a565b845160009081526101fc60205260409020546123f95784606001516000815181106122b757fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146122f35760405162461bcd60e51b8152600401610b22906158fa565b60008560400151116123175760405162461bcd60e51b8152600401610b229061589b565b8460a00151518560600151511461232d57600080fd5b600061233886613185565b905060005b8660600151518110156123ae5760008760600151828151811061235c57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146123a5576123a581848a60a00151858151811061239857fe5b60200260200101516133d8565b5060010161233d565b506123c1866000015187604001516133e3565b6123d38660000151876080015161344d565b6123e58660000151876060015161363c565b6123f7866000015187602001516137eb565b505b61241884866000015185604051806020016040528060008152506138af565b836001600160a01b0316826001600160a01b0316146124c957816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615c60833981519152886000015187604051612473929190615af6565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615c608339815191528860000151876040516124bc929190615af6565b60405180910390a4611dda565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615c6083398151915288600001518760405161250b929190615af6565b60405180910390a45050505050565b600054610100900460ff168061253357506125336138c1565b80612541575060005460ff16155b61257c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff161580156125a7576000805460ff1961ff0019909116610100171660011790555b6125af6138d2565b6125b76139cc565b6125bf6139ce565b6125c7613a7f565b6125cf613b1f565b6125e760405180602001604052806000815250613bef565b6125f084613cba565b6125f86139cc565b612600613d6c565b61260a8787613e09565b612612613a7f565b61261b856129f8565b612626836001613e32565b612631826001613e32565b8015612643576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612686613e92565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006126e6613e9c565b905090565b6000818484111561277a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561273f578181015183820152602001612727565b50505050905090810190601f16801561276c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612794846001600160a01b0316613ef8565b1561100b57836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561282257818101518382015260200161280a565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612861578181015183820152602001612849565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561289d578181015183820152602001612885565b50505050905090810190601f1680156128ca5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156128ef57600080fd5b505af192505050801561291457506040513d602081101561290f57600080fd5b505160015b6129a957612920615b4a565b8061292b5750612972565b60405162461bcd60e51b815260206004820181815283516024840152835184939192839260440191908501908083836000831561273f578181015183820152602001612727565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c046034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146126435760405162461bcd60e51b8152600401808060200182810382526028815260200180615c386028913960400191505060405180910390fd5b80516116ba9061012f906020840190614c2c565b806000606084901c612a1c6126dc565b6001600160a01b0316816001600160a01b03161415612a79578391506000612a4386613efe565b90508015612a68576000612a5687613f11565b8203905080861115612a66578093505b505b612a728684613f24565b8285039350505b509250929050565b612a896126dc565b6001600160a01b0316836001600160a01b03161480612aaf5750612aaf8361057a6126dc565b612aea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b610b36838383613f3d565b60008381526101fa6020526040812054905b81811015611dda5760008581526101fa6020526040902080546001600160a01b038616919083908110612b3657fe5b6000918252602090912001546001600160a01b03161415612b995760008581526101fa60205260409020805484919083908110612b6f57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612b07565b6001600160a01b038116600090815260c9602052604081205460ff1680611aa25750611aa283836141ab565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612c0157fe5b602090810291909101015292915050565b612c24846001600160a01b0316613ef8565b1561100b57836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612cb3578181015183820152602001612c9b565b50505050905090810190601f168015612ce05780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612d0357600080fd5b505af1925050508015612d2857506040513d6020811015612d2357600080fd5b505160015b612d3457612920615b4a565b6001600160e01b0319811663f23a6e6160e01b146126435760405162461bcd60e51b8152600401808060200182810382526028815260200180615c386028913960400191505060405180910390fd5b612d8b6126dc565b6001600160a01b0316836001600160a01b03161480612db15750612db18361057a6126dc565b612dec5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d386029913960400191505060405180910390fd5b610b368383836141d9565b6000604051806080016040528060438152602001615cab60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612e846142fa565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b80518251606091849184911015612f915784846040516020018083805190602001908083835b60208310612f0b5780518252601f199092019160209182019101612eec565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612f535780518252601f199092019160209182019101612f34565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061066b565b60005b82518110156130a157828181518110612fa957fe5b602001015160f81c60f81b6001600160f81b031916828281518110612fca57fe5b01602001516001600160f81b031916146130995785856040516020018083805190602001908083835b602083106130125780518252601f199092019160209182019101612ff3565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061305a5780518252601f19909201916020918201910161303b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061066b565b600101612f94565b5092949350505050565b6060816130d057506040805180820190915260018152600360fc1b602082015261067f565b8160005b81156130e857600101600a820491506130d4565b6000816001600160401b038111801561310057600080fd5b506040519080825280601f01601f19166020018201604052801561312b576020820181803683370190505b50859350905060001982015b831561317c57600a840660300160f81b8282806001900393508151811061315a57fe5b60200101906001600160f81b031916908160001a905350600a84049350613137565b50949350505050565b6000808260800151516001600160401b03811180156131a357600080fd5b506040519080825280602002602001820160405280156131cd578160200160208202803683370190505b50905060005b83608001515181101561321f57613200846080015182815181106131f357fe5b6020026020010151614301565b82828151811061320c57fe5b60209081029190910101526001016131d3565b5060008360600151516001600160401b038111801561323d57600080fd5b50604051908082528060200260200182016040528015613267578160200160208202803683370190505b50905060005b8460600151518110156132ac5761328d856060015182815181106131f357fe5b82828151811061329957fe5b602090810291909101015260010161326d565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133155781810151838201526020016132fd565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b8381101561336657818101518382015260200161334e565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b3683838361436e565b60008281526101fc6020526040902054156133fd57600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906134419084908490615af6565b60405180910390a15050565b6000805b82518110156135f15760006001600160a01b031683828151811061347157fe5b6020026020010151600001516001600160a01b031614156134d9576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106134e557fe5b6020026020010151602001516001600160601b03166000141561354f576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061355b57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061359457fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613451565b5061271081106136325760405162461bcd60e51b8152600401808060200182810382526025815260200180615eb86025913960400191505060405180910390fd5b610b3683836145b0565b60008281526101fb6020526040812090805b835181101561378a5760006001600160a01b031684828151811061366e57fe5b6020026020010151600001516001600160a01b031614156136a15760405162461bcd60e51b8152600401610b22906159e6565b8381815181106136ad57fe5b6020026020010151602001516001600160601b0316600014156136e25760405162461bcd60e51b8152600401610b22906158c5565b828482815181106136ef57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516137809085908390811061375c57fe5b6020026020010151602001516001600160601b03168361202e90919063ffffffff16565b915060010161364e565b5080612710146137ac5760405162461bcd60e51b8152600401610b2290615a86565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516137dd929190615add565b60405180910390a150505050565b600082815261012e60209081526040909120825161380b92840190614c2c565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b61383784612088565b6040805160208082528351818301528351919283929083019185019080838360005b83811015613871578181015183820152602001613859565b50505050905090810190601f16801561389e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6138bb848484846145e1565b50505050565b60006138cc30613ef8565b15905090565b600054610100900460ff16806138eb57506138eb6138c1565b806138f9575060005460ff16155b6139345760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff1615801561395f576000805460ff1961ff0019909116610100171660011790555b60006139696126dc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156139c9576000805461ff00191690555b50565b565b600054610100900460ff16806139e757506139e76138c1565b806139f5575060005460ff16155b613a305760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613a5b576000805460ff1961ff0019909116610100171660011790555b613a6b6301ffc9a760e01b6146f3565b80156139c9576000805461ff001916905550565b600054610100900460ff1680613a985750613a986138c1565b80613aa6575060005460ff16155b613ae15760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613a6b576000805460ff1961ff00199091166101001716600117905580156139c9576000805461ff001916905550565b600054610100900460ff1680613b385750613b386138c1565b80613b46575060005460ff16155b613b815760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613bac576000805460ff1961ff0019909116610100171660011790555b613a6b604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614777565b600054610100900460ff1680613c085750613c086138c1565b80613c16575060005460ff16155b613c515760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613c7c576000805460ff1961ff0019909116610100171660011790555b613c8582614839565b613c95636cdb3d1360e11b6146f3565b613ca56303a24d0760e21b6146f3565b80156116ba576000805461ff00191690555050565b600054610100900460ff1680613cd35750613cd36138c1565b80613ce1575060005460ff16155b613d1c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613d47576000805460ff1961ff0019909116610100171660011790555b8151613d5b90610230906020850190614c2c565b50613ca563e8a3d48560e01b6146f3565b600054610100900460ff1680613d855750613d856138c1565b80613d93575060005460ff16155b613dce5760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015613df9576000805460ff1961ff0019909116610100171660011790555b613a6b63656cb66560e11b6146f3565b8151613e1d90610262906020850190614c2c565b508051610b3690610263906020840190614c2c565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006126e661484c565b600033301415613ef357600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115269050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f825760405162461bcd60e51b8152600401808060200182810382526023815260200180615e2a6023913960400191505060405180910390fd5b8051825114613fc25760405162461bcd60e51b8152600401808060200182810382526028815260200180615f2f6028913960400191505060405180910390fd5b6000613fcc6126dc565b9050613fec8185600086866040518060200160405280600081525061100b565b60005b83518110156140ca5761408183828151811061400757fe5b6020026020010151604051806060016040528060248152602001615d14602491396097600088868151811061403857fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546126eb9092919063ffffffff16565b6097600086848151811061409157fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613fef565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614151578181015183820152602001614139565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614190578181015183820152602001614178565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b03831661421e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e2a6023913960400191505060405180910390fd5b60006142286126dc565b90506142588185600061423a87612bcd565b61424387612bcd565b6040518060200160405280600081525061100b565b61429f82604051806060016040528060248152602001615d146024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906126eb565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615c6083398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061437983614850565b9050600082516041141561439457614391828461485a565b90505b846001600160a01b0316816001600160a01b031614611dda576143bf856001600160a01b0316613ef8565b156145385760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b8381101561442e578181015183820152602001614416565b50505050905090810190601f16801561445b5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561447957600080fd5b505afa15801561448d573d6000803e3d6000fd5b505050506040513d60208110156144a357600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146145325760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561273f578181015183820152602001612727565b50611dda565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561273f578181015183820152602001612727565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613441929190615add565b60008381526101fd60205260408120546145fc90849061202e565b60008581526101fc602052604090205490915081111561462e5760405162461bcd60e51b8152600401610b22906159bc565b60008481526101fd602052604090208190556001600160a01b0385166146665760405162461bcd60e51b8152600401610b2290615a45565b60006146706126dc565b90506146918160008861468289612bcd565b61468b89612bcd565b8861100b565b60008581526097602090815260408083206001600160a01b038a1684529091529020546146be908561202e565b60008681526097602090815260408083206001600160a01b038b16845290915281209190915561100b90829088888888612c12565b6001600160e01b03198082161415614752576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061479057506147906138c1565b8061479e575060005460ff16155b6147d95760405162461bcd60e51b815260040180806020018281038252602e815260200180615dda602e913960400191505060405180910390fd5b600054610100900460ff16158015614804576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b36576000805461ff0019169055505050565b80516116ba906099906020840190614c2c565b4690565b6000612e846148da565b600081516041146148b2576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6148d086828585614915565b9695505050505050565b60006126e67f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614908614b6b565b614910614b72565b614b79565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156149765760405162461bcd60e51b8152600401808060200182810382526022815260200180615d616022913960400191505060405180910390fd5b6000601e8560ff161115614a50576004850360ff16601b148061499f57506004850360ff16601c145b6149da5760405162461bcd60e51b8152600401808060200182810382526022815260200180615e086022913960400191505060405180910390fd5b60016149e587614bdb565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614a3f573d6000803e3d6000fd5b505050602060405103519050614b07565b8460ff16601b1480614a6557508460ff16601c145b614aa05760405162461bcd60e51b8152600401808060200182810382526022815260200180615e086022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614afa573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b62576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b8661484c565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c625760008555614ca8565b82601f10614c7b57805160ff1916838001178555614ca8565b82800160010185558215614ca8579182015b82811115614ca8578251825591602001919060010190614c8d565b50614cb4929150614cb8565b5090565b5b80821115614cb45760008155600101614cb9565b803561067f81615bee565b600082601f830112614ce8578081fd5b81356020614cfd614cf883615b27565b615b04565b8281528181019085830183850287018401881015614d19578586fd5b855b85811015614d40578135614d2e81615bee565b84529284019290840190600101614d1b565b5090979650505050505050565b600082601f830112614d5d578081fd5b81356020614d6d614cf883615b27565b82815281810190858301855b85811015614d4057614d90898684358b0101614eb7565b84529284019290840190600101614d79565b600082601f830112614db2578081fd5b81356020614dc2614cf883615b27565b82815281810190858301604080860288018501891015614de0578687fd5b865b86811015614e4f5781838b031215614df8578788fd5b81518281018181106001600160401b0382111715614e1257fe5b83528335614e1f81615bee565b8152838701356001600160601b0381168114614e3957898afd5b8188015285529385019391810191600101614de2565b509198975050505050505050565b600082601f830112614e6d578081fd5b81356020614e7d614cf883615b27565b8281528181019085830183850287018401881015614e99578586fd5b855b85811015614d4057813584529284019290840190600101614e9b565b600082601f830112614ec7578081fd5b81356001600160401b03811115614eda57fe5b614eed601f8201601f1916602001615b04565b818152846020838601011115614f01578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614f2c578081fd5b614f3660c0615b04565b90508135815260208201356001600160401b0380821115614f5657600080fd5b614f6285838601614eb7565b6020840152604084013560408401526060840135915080821115614f8557600080fd5b614f9185838601614da2565b60608401526080840135915080821115614faa57600080fd5b614fb685838601614da2565b608084015260a0840135915080821115614fcf57600080fd5b50614fdc84828501614d4d565b60a08301525092915050565b600060208284031215614ff9578081fd5b8135611aa281615bee565b60008060408385031215615016578081fd5b823561502181615bee565b9150602083013561503181615bee565b809150509250929050565b600080600080600060a08688031215615053578081fd5b853561505e81615bee565b9450602086013561506e81615bee565b935060408601356001600160401b0380821115615089578283fd5b61509589838a01614e5d565b945060608801359150808211156150aa578283fd5b6150b689838a01614e5d565b935060808801359150808211156150cb578283fd5b506150d888828901614eb7565b9150509295509295909350565b600080600080600060a086880312156150fc578283fd5b853561510781615bee565b9450602086013561511781615bee565b9350604086013592506060860135915060808601356001600160401b0381111561513f578182fd5b6150d888828901614eb7565b60008060006060848603121561515f578081fd5b833561516a81615bee565b925060208401356001600160401b0380821115615185578283fd5b61519187838801614e5d565b935060408601359150808211156151a6578283fd5b506151b386828701614e5d565b9150509250925092565b600080604083850312156151cf578182fd5b82356151da81615bee565b915060208301358015158114615031578182fd5b600080600080600060a08688031215615205578283fd5b853561521081615bee565b945060208601356001600160401b0381111561522a578384fd5b61523688828901614eb7565b9450506040860135925060608601359150608086013560ff8116811461525a578182fd5b809150509295509295909350565b6000806040838503121561527a578182fd5b823561528581615bee565b946020939093013593505050565b6000806000606084860312156152a7578081fd5b83356152b281615bee565b95602085013595506040909401359392505050565b6000602082840312156152d8578081fd5b81356001600160401b038111156152ed578182fd5b6152f984828501614cd8565b949350505050565b60008060408385031215615313578182fd5b82356001600160401b0380821115615329578384fd5b61533586838701614cd8565b9350602085013591508082111561534a578283fd5b5061535785828601614e5d565b9150509250929050565b600060208284031215615372578081fd5b81356001600160e01b031981168114611aa2578182fd5b60006020828403121561539a578081fd5b81356001600160401b038111156153af578182fd5b6152f984828501614eb7565b60008060008060008060c087890312156153d3578384fd5b86356001600160401b03808211156153e9578586fd5b6153f58a838b01614eb7565b9750602089013591508082111561540a578586fd5b6154168a838b01614eb7565b9650604089013591508082111561542b578586fd5b6154378a838b01614eb7565b9550606089013591508082111561544c578283fd5b5061545989828a01614eb7565b93505061546860808801614ccd565b915061547660a08801614ccd565b90509295509295509295565b600080600080600080600060e0888a03121561549c578485fd5b87356001600160401b03808211156154b2578687fd5b6154be8b838c01614eb7565b985060208a01359150808211156154d3578687fd5b6154df8b838c01614eb7565b975060408a01359150808211156154f4578687fd5b6155008b838c01614eb7565b965060608a0135915080821115615515578283fd5b6155218b838c01614eb7565b955060808a0135915080821115615536578283fd5b506155438a828b01614cd8565b93505061555260a08901614ccd565b915061556060c08901614ccd565b905092959891949750929550565b60008060008060808587031215615583578182fd5b84356001600160401b03811115615598578283fd5b6155a487828801614f1b565b94505060208501356155b581615bee565b925060408501356155c581615bee565b9396929550929360600135925050565b6000806000606084860312156155e9578081fd5b83356001600160401b038111156155fe578182fd5b61560a86828701614f1b565b935050602084013561561b81615bee565b929592945050506040919091013590565b60006020828403121561563d578081fd5b5035919050565b600080600060608486031215615658578081fd5b83359250602084013561566a81615bee565b9150604084013561567a81615bee565b809150509250925092565b60008060408385031215615697578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156156f257815180516001600160a01b031688528301516001600160601b031683880152604090960195908201906001016156b9565b509495945050505050565b6000815180845260208085019450808401835b838110156156f257815187529582019590820190600101615710565b60008151808452815b8181101561575157602081850181015186830182015201615735565b818111156157625782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03841681526060602082018190526000906157af9083018561572c565b82810360408401526148d0818561572c565b6001600160a01b03929092168252602082015260400190565b600060208252611aa260208301846156a6565b600060208252611aa260208301846156fd565b60006040825261581360408301856156fd565b8281036020840152614b6281856156fd565b901515815260200190565b600060208252611aa2602083018461572c565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152f960408301846156a6565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b1f57fe5b604052919050565b60006001600160401b03821115615b3a57fe5b5060209081020190565b60e01c90565b600060443d1015615b5a57611526565b600481823e6308c379a0615b6e8251615b44565b14615b7857611526565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615ba75750505050611526565b82840192508251915080821115615bc15750505050611526565b503d83016020828401011115615bd957505050611526565b601f01601f1916810160200160405291505090565b6001600160a01b03811681146139c957600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220ce4d4dc3b1fad263d8a31f95005350f34678e0a530aabeb658eb6667bb8dcdd964736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "balanceOf(address,uint256)": { + "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address." + }, + "balanceOfBatch(address[],uint256[])": { + "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": { + "details": "See {IERC1155-safeBatchTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,uint256,bytes)": { + "details": "See {IERC1155-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC1155-setApprovalForAll}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 21513, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 21519, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 21521, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage" + }, + { + "astId": 22514, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 20556, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 20606, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 20546, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 20336, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 20338, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 20453, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "354", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "355", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "356", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22877, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "406", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22552, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "456", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 17786, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "506", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)" + }, + { + "astId": 20643, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)" + }, + { + "astId": 20647, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "supply", + "offset": 0, + "slot": "508", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 20651, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "minted", + "offset": 0, + "slot": "509", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 21264, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "510", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 18853, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "560", + "type": "t_string_storage" + }, + { + "astId": 18887, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "561", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19960, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "name", + "offset": 0, + "slot": "610", + "type": "t_string_storage" + }, + { + "astId": 19962, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "symbol", + "offset": 0, + "slot": "611", + "type": "t_string_storage" + }, + { + "astId": 20321, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "612", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 18893, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "662", + "type": "t_bool" + }, + { + "astId": 18897, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "663", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19022, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "712", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 19143, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "713", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 15838, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "763", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15840, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "764", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)15592_storage)dyn_storage": { + "base": "t_struct(Part)15592_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)15592_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)15592_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 15589, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 15591, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Proxy.json new file mode 100644 index 000000000..0278a70a9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC1155RaribleMeta_Proxy.json @@ -0,0 +1,287 @@ +{ + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "transactionIndex": 1, + "gasUsed": "1082260", + "logsBloom": "0x00000000000000000000000010000000400000010000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000002010001000200000800000000000000000000104000021000000000001000000800000000800000000000000000000001400000000000000000004000000000000000000000000000000000000000800000000020000000000000100000000000000000000000000000200000000000000000000020000000000000000010000000000000000400000000000000000020000000000000000010000100000000000000000000200000001000000001000000", + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c", + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000027782f629b1a64140c2c1fc7ef9e9ea112b59a6e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000bc8453f510474b8542120ae312f878bc44693ddc" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 4, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + }, + { + "transactionIndex": 1, + "blockNumber": 446446, + "transactionHash": "0x78c45276debf1048aa760cd2f1c2aa86d64ec5979949487639472a90da0baa1a", + "address": "0xe0c84cc0E421a022f00E97C5130ca58C07694F13", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 5, + "blockHash": "0xa215a3ee2af3d66318022d3df3cecc1edc97251cfacb5c063d5c55c7473a1e4c" + } + ], + "blockNumber": 446446, + "cumulativeGasUsed": "1126087", + "status": 1, + "byzantium": true + }, + "args": [ + "0x27782f629B1A64140c2C1FC7eF9e9eA112b59A6e", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x173c43d200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20000000000000000000000000bc8453f510474b8542120ae312f878bc44693ddc000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC20TransferProxy.json new file mode 100644 index 000000000..6422daeb2 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC20TransferProxy.json @@ -0,0 +1,255 @@ +{ + "address": "0xbcD37B7548c35d5bb9703F5e40a59D082876809E", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__ERC20TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "erc20safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xadea1d14ccc09165fd428b9e65078a8c96548e9dc0f9fa012da62f0bf4d2c768", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xbcD37B7548c35d5bb9703F5e40a59D082876809E", + "transactionIndex": 1, + "gasUsed": "570547", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x51880d2761e4022e652091bf08d308cb6b6f8a6031520610d9ec98a368abb0ce", + "transactionHash": "0xadea1d14ccc09165fd428b9e65078a8c96548e9dc0f9fa012da62f0bf4d2c768", + "logs": [], + "blockNumber": 446351, + "cumulativeGasUsed": "614374", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061095c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16207, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721LazyMintTransferProxy.json new file mode 100644 index 000000000..e58648b16 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721LazyMintTransferProxy.json @@ -0,0 +1,267 @@ +{ + "address": "0x15ceF16B61D8d87E08e129B6D4Af299a29027694", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x54a9dc6d94a2e5bf2a2d869ff2eaad6624be6b275ef85a099805eaf7d8f72e4b", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x15ceF16B61D8d87E08e129B6D4Af299a29027694", + "transactionIndex": 1, + "gasUsed": "849243", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x629144351267165e0b4ab8d77a41924776641ba37db36772d7aafe6f744590cb", + "transactionHash": "0x54a9dc6d94a2e5bf2a2d869ff2eaad6624be6b275ef85a099805eaf7d8f72e4b", + "logs": [], + "blockNumber": 446361, + "cumulativeGasUsed": "901458", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x39f9db52acb6155394c2e91f3ef71c9027fcd4b7ec0f48bb4307cc115aa715f5\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610e65806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16207, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleFactoryC2.json new file mode 100644 index 000000000..7c45adbf1 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleFactoryC2.json @@ -0,0 +1,376 @@ +{ + "address": "0x5Fe44e61d9917CD6e36283d12ce4FdC5949a2823", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe12cfce891d2d357811d7736a534528ee806c505f1bcc8e130894ac13fa2d02b", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x5Fe44e61d9917CD6e36283d12ce4FdC5949a2823", + "transactionIndex": 1, + "gasUsed": "1322013", + "logsBloom": "0x00000000000000000000000000000000000004000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000021000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000400000000000000000000000000000000000000000000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0x9e7782b368efb6c494e3e1c6298231834ac93f09369ea82963809ffdbcee01e1", + "transactionHash": "0xe12cfce891d2d357811d7736a534528ee806c505f1bcc8e130894ac13fa2d02b", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446438, + "transactionHash": "0xe12cfce891d2d357811d7736a534528ee806c505f1bcc8e130894ac13fa2d02b", + "address": "0x5Fe44e61d9917CD6e36283d12ce4FdC5949a2823", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x9e7782b368efb6c494e3e1c6298231834ac93f09369ea82963809ffdbcee01e1" + } + ], + "blockNumber": 446438, + "cumulativeGasUsed": "1365840", + "status": 1, + "byzantium": true + }, + "args": [ + "0x039Ad594223C53e665Ac80b00C63973c770baCBA", + "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "0x15ceF16B61D8d87E08e129B6D4Af299a29027694" + ], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x4f3333862394062fca2a044f5dda27e9520739988f72127f95a6ad911248cc25\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5276, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 19589, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 19591, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 19593, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta.json new file mode 100644 index 000000000..b2f4cf63a --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta.json @@ -0,0 +1,1375 @@ +{ + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "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": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "transactionIndex": 1, + "gasUsed": "1080349", + "logsBloom": "0x00000000000000000000000000000000400000000000000050800000000000000000000000000020000000000040000000000000000400000000000000000000000000000000000000002000000002010001000000000000000000000000000000000000021000000000001000000800000000800000000000000000000001400000000000000000004000010002000000000000000000000000000000800000000000000000000000000000000000000000200000000000200000040000000000000020000000000040000010000000000000000400000000000010000020000000000000000020000000000000000000000000000000000000000001000000", + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3", + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000025a46c1eac0ff9be6b27fedaf602ce306874335e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000015cef16b61d8d87e08e129b6d4af299a29027694" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 4, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 5, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + } + ], + "blockNumber": 446430, + "cumulativeGasUsed": "1132552", + "status": 1, + "byzantium": true + }, + "args": [ + "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x3db397c600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf2000000000000000000000000015cef16b61d8d87e08e129b6d4af299a29027694000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC721Rarible_init", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "0x15ceF16B61D8d87E08e129B6D4Af299a29027694" + ] + }, + "implementation": "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Implementation.json new file mode 100644 index 000000000..6dba400f7 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Implementation.json @@ -0,0 +1,1624 @@ +{ + "address": "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "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": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x75438a6b261812207ce588aa938884c48353dda463eb564e927c8fb15731d8bf", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e", + "transactionIndex": 1, + "gasUsed": "4646304", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7eeb4d0dbd539869be2a73c311a54b54085fe252a6f7bd0e734627109b2937d7", + "transactionHash": "0x75438a6b261812207ce588aa938884c48353dda463eb564e927c8fb15731d8bf", + "logs": [], + "blockNumber": 446425, + "cumulativeGasUsed": "4690131", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"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\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":\"ERC721RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC721BaseMinimal.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleUserMeta\\\", \\\"1\\\");\\n\\n isPrivate = true;\\n\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x8aa6296a91d31820dd67f5868d7c5d49c96fe69ff3b583dc53594d15d5e75b55\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061530d806100206000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063cad96cca1161006f578063cad96cca146105b4578063e07f2319146105d4578063e8a3d485146105f4578063e985e9c514610609578063f2fde38b14610629576101f9565b8063a22cb46514610534578063aa271e1a14610554578063b88d4fde14610574578063c87b56dd14610594576101f9565b8063891be974116100dc578063891be974146104bd5780638da5cb5b146104ea57806395d89b41146104ff578063983b2d5614610514576101f9565b806370a0823114610448578063715018a61461046857806371e2a6571461047d578063832fbb291461049d576101f9565b80632d0335ab1161019057806342966c681161015f57806342966c68146103b35780634648eb9d146103d357806355f804b3146103f35780636352211e146104135780636c0360eb14610433576101f9565b80632d0335ab146103265780633092afd5146103535780633db397c61461037357806342842e0e14610393576101f9565b80630c53c51c116101cc5780630c53c51c146102a557806322a775b6146102b857806323b872dd146102d85780632a55205a146102f8576101f9565b806301ffc9a7146101fe57806306fdde0314610234578063081812fc14610256578063095ea7b314610283575b600080fd5b34801561020a57600080fd5b5061021e610219366004614899565b610649565b60405161022b9190614cc2565b60405180910390f35b34801561024057600080fd5b5061024961065c565b60405161022b9190614ccd565b34801561026257600080fd5b50610276610271366004614b4b565b6106f3565b60405161022b9190614c4c565b34801561028f57600080fd5b506102a361029e36600461483c565b610756565b005b6102496102b33660046147c2565b61082c565b3480156102c457600080fd5b506102a36102d3366004614aa6565b610ba5565b3480156102e457600080fd5b506102a36102f33660046146e8565b610c47565b34801561030457600080fd5b50610318610313366004614b89565b610c9e565b60405161022b929190614c96565b34801561033257600080fd5b50610346610341366004614694565b610dac565b60405161022b9190614e93565b34801561035f57600080fd5b506102a361036e366004614694565b610dc8565b34801561037f57600080fd5b506102a361038e3660046148f3565b610e78565b34801561039f57600080fd5b506102a36103ae3660046146e8565b610f27565b3480156103bf57600080fd5b506102a36103ce366004614b4b565b610f42565b3480156103df57600080fd5b506102a36103ee3660046149ba565b61100c565b3480156103ff57600080fd5b506102a361040e3660046148c1565b6110c3565b34801561041f57600080fd5b5061027661042e366004614b4b565b611168565b34801561043f57600080fd5b506102496111bc565b34801561045457600080fd5b50610346610463366004614694565b61121e565b34801561047457600080fd5b506102a3611282565b34801561048957600080fd5b506102a3610498366004614867565b61132e565b3480156104a957600080fd5b506102a36104b8366004614aea565b611413565b3480156104c957600080fd5b506104dd6104d8366004614b4b565b61148e565b60405161022b9190614caf565b3480156104f657600080fd5b5061027661151e565b34801561050b57600080fd5b5061024961152d565b34801561052057600080fd5b506102a361052f366004614694565b61158e565b34801561054057600080fd5b506102a361054f366004614791565b611643565b34801561056057600080fd5b5061021e61056f366004614694565b611749565b34801561058057600080fd5b506102a361058f366004614728565b611768565b3480156105a057600080fd5b506102496105af366004614b4b565b6117c6565b3480156105c057600080fd5b506104dd6105cf366004614b4b565b6117d1565b3480156105e057600080fd5b506102a36105ef366004614b63565b61184c565b34801561060057600080fd5b5061024961188f565b34801561061557600080fd5b5061021e6106243660046146b0565b61191e565b34801561063557600080fd5b506102a3610644366004614694565b611933565b600061065482611a36565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b505050505090505b90565b60006106fe82611af0565b6107395760405162461bcd60e51b815260040180806020018281038252602c815260200180615120602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061076182611168565b9050806001600160a01b0316836001600160a01b031614156107b45760405162461bcd60e51b81526004018080602001828103825260218152602001806152316021913960400191505060405180910390fd5b806001600160a01b03166107c6611b0d565b6001600160a01b031614806107e257506107e281610624611b0d565b61081d5760405162461bcd60e51b81526004018080602001828103825260388152602001806150186038913960400191505060405180910390fd5b6108278383611b1c565b505050565b6060600061083986611b8b565b90506000356001600160e01b031990811690821614156108a0576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526108de8882888888611ba7565b6109195760405162461bcd60e51b81526004018080602001828103825260218152602001806151c16021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f7602052604090205461093e906001611c91565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109a95780518252601f19909201916020918201910161098a565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a1f5780518252601f199092019160209182019101610a00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610a81576040519150601f19603f3d011682016040523d82523d6000602084013e610a86565b606091505b509150915081610add576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b5c578181015183820152602001610b44565b50505050905090810190601f168015610b895780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c39578160400151600081518110610bc257fe5b6020026020010151600001516001600160a01b0316610bdf61151e565b6001600160a01b03161480610c145750610c148260400151600081518110610c0357fe5b602002602001015160000151611749565b610c395760405162461bcd60e51b8152600401610c3090614d0b565b60405180910390fd5b610c438282611ceb565b5050565b610c58610c52611b0d565b82611e6d565b610c935760405162461bcd60e51b81526004018080602001828103825260318152602001806152526031913960400191505060405180910390fd5b610827838383611e79565b60008281526101c660205260408120548190610cbf57506000905080610da5565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d3b57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610cec565b50505050905080600081518110610d4e57fe5b60209081029190910101515192506000805b8251811015610d9957828181518110610d7557fe5b6020026020010151602001516001600160601b031682019150806001019050610d60565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dd0611b0d565b6001600160a01b0316610de161151e565b6001600160a01b031614610e2a576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610e86868686868686611f98565b610ed26040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b8152506120b2565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f06611b0d565b8787604051610f1793929190614c60565b60405180910390a1505050505050565b61082783838360405180602001604052806000815250611768565b610f4b81611af0565b610fba57606081901c610f5c611b0d565b6001600160a01b0316816001600160a01b031614610fab5760405162461bcd60e51b815260040180806020018281038252602d8152602001806150f3602d913960400191505060405180910390fd5b610fb482612142565b50611009565b610fc5610c52611b0d565b6110005760405162461bcd60e51b81526004018080602001828103825260308152602001806152a86030913960400191505060405180910390fd5b6110098161215e565b50565b61101a878787878686611f98565b61106a6040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b8152506120b2565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110a1611b0d565b88886040516110b293929190614c60565b60405180910390a150505050505050565b6110cb611b0d565b6001600160a01b03166110dc61151e565b6001600160a01b031614611125576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b61112e816121fa565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161115d9190614ccd565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806106545760405162461bcd60e51b815260040180806020018281038252602981526020018061507a6029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b60006001600160a01b0382166112655760405162461bcd60e51b815260040180806020018281038252602a815260200180615050602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b61128a611b0d565b6001600160a01b031661129b61151e565b6001600160a01b0316146112e4576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611336611b0d565b6001600160a01b031661134761151e565b6001600160a01b031614611390576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b60005b8151811015610c435760008282815181106113aa57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611393565b825161141e90611af0565b156114375761143282828560000151610f27565b610827565b826040015160008151811061144857fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114845760405162461bcd60e51b8152600401610c3090614ce0565b6108278382610ba5565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561151357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114c4565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b611596611b0d565b6001600160a01b03166115a761151e565b6001600160a01b0316146115f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61164b611b0d565b6001600160a01b0316826001600160a01b031614156116b1576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116bf611b0d565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611703611b0d565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b611779611773611b0d565b83611e6d565b6117b45760405162461bcd60e51b81526004018080602001828103825260318152602001806152526031913960400191505060405180910390fd5b6117c08484848461220e565b50505050565b606061065482612260565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561151357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114c4565b816001600160a01b031661185e611b0d565b6001600160a01b0316146118845760405162461bcd60e51b8152600401610c3090614d98565b61082783838361226b565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119165780601f106118eb57610100808354040283529160200191611916565b820191906000526020600020905b8154815290600101906020018083116118f957829003601f168201915b505050505081565b600061192a8383612317565b90505b92915050565b61193b611b0d565b6001600160a01b031661194c61151e565b6001600160a01b031614611995576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b0381166119da5760405162461bcd60e51b8152600401808060200182810382526026815260200180614f806026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b1480611a6757506001600160e01b0319821663656cb66560e11b145b80611a8257506001600160e01b0319821663152a902d60e11b145b80611a9d57506001600160e01b031982166301ffc9a760e01b145b80611ab857506001600160e01b031982166380ac58cd60e01b145b80611ad357506001600160e01b03198216635b5e139f60e01b145b806106545750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611b17612344565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b5282611168565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611b9f57506000610657565b506020015190565b6000806001611bbd611bb8886123a0565b612423565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c14573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561192a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611cfa611b0d565b90508360400151600081518110611d0d57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611d495760405162461bcd60e51b8152600401610c3090614d6d565b83608001515184604001515114611d5f57600080fd5b806001600160a01b0316826001600160a01b03161480611d845750611d84828261191e565b611da05760405162461bcd60e51b8152600401610c3090614df4565b6000611dab8561246f565b905060005b856040015151811015611e2157600086604001518281518110611dcf57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611e1857611e18818489608001518581518110611e0b57fe5b60200260200101516126b6565b50600101611db0565b50611e308486600001516126c1565b611e42856000015186606001516126db565b611e54856000015186604001516128ca565b611e6685600001518660200151612a79565b5050505050565b600061192a8383612add565b826001600160a01b0316611e8c82611168565b6001600160a01b031614611ed15760405162461bcd60e51b81526004018080602001828103825260298152602001806151986029913960400191505060405180910390fd5b6001600160a01b038216611f165760405162461bcd60e51b8152600401808060200182810382526024815260200180614fa66024913960400191505060405180910390fd5b611f21838383610827565b611f2c600082611b1c565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061521183398151915291a4505050565b600054610100900460ff1680611fb15750611fb1612b0a565b80611fbf575060005460ff16155b611ffa5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612025576000805460ff1961ff0019909116610100171660011790555b61202e856121fa565b612036612b1b565b61203e612bbc565b612046612b1b565b61204e612c59565b612056612cf6565b61205e612b1b565b612066612def565b61206e612b1b565b61207784612ebe565b6120818787612f85565b61208c836001613070565b612097826001613070565b80156120a9576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306120ec6130d1565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061216982611168565b905061217781600084610827565b612182600083611b1c565b61218b826130db565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556121d082612142565b60405182906000906001600160a01b03841690600080516020615211833981519152908390a45050565b8051610c43906101c89060208401906142fc565b612219848484611e79565b612225848484846130e4565b6117c05760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b60606106548261329a565b60008381526101c66020526040812054905b81811015611e665760008581526101c66020526040902080546001600160a01b0386169190839081106122ac57fe5b6000918252602090912001546001600160a01b0316141561230f5760008581526101c6602052604090208054849190839081106122e557fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b60010161227d565b6001600160a01b038116600090815261012f602052604081205460ff168061192a575061192a8383613475565b60003330141561239b57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506106f09050565b503390565b6000604051806080016040528060438152602001614f3d60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b600061242d6134a4565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561248d57600080fd5b506040519080825280602002602001820160405280156124b7578160200160208202803683370190505b50905060005b836060015151811015612509576124ea846060015182815181106124dd57fe5b60200260200101516134ab565b8282815181106124f657fe5b60209081029190910101526001016124bd565b5060008360400151516001600160401b038111801561252757600080fd5b50604051908082528060200260200182016040528015612551578160200160208202803683370190505b50905060005b84604001515181101561259657612577856040015182815181106124dd57fe5b82828151811061258357fe5b6020908102919091010152600101612557565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156125fa5781810151838201526020016125e2565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b8381101561264b578181015183820152602001612633565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610827838383613518565b610c43828260405180602001604052806000815250613797565b6000805b825181101561287f5760006001600160a01b03168382815181106126ff57fe5b6020026020010151600001516001600160a01b03161415612767576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061277357fe5b6020026020010151602001516001600160601b0316600014156127dd576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106127e957fe5b6020026020010151602001516001600160601b0316820191506101c6600085815260200190815260200160002083828151811061282257fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016126df565b5061271081106128c05760405162461bcd60e51b81526004018080602001828103825260258152602001806152836025913960400191505060405180910390fd5b61082783836137e9565b60008281526101fb6020526040812090805b8351811015612a185760006001600160a01b03168482815181106128fc57fe5b6020026020010151600001516001600160a01b0316141561292f5760405162461bcd60e51b8152600401610c3090614dbd565b83818151811061293b57fe5b6020026020010151602001516001600160601b0316600014156129705760405162461bcd60e51b8152600401610c3090614d38565b8284828151811061297d57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612a0e908590839081106129ea57fe5b6020026020010151602001516001600160601b031683611c9190919063ffffffff16565b91506001016128dc565b508061271014612a3a5760405162461bcd60e51b8152600401610c3090614e45565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612a6b929190614e9c565b60405180910390a150505050565b612a8282611af0565b612abd5760405162461bcd60e51b815260040180806020018281038252602c81526020018061514c602c913960400191505060405180910390fd5b60008281526101c7602090815260409091208251610827928401906142fc565b6001600160a01b038216600090815261012f602052604081205460ff168061192a575061192a8383613826565b6000612b15306138c2565b15905090565b600054610100900460ff1680612b345750612b34612b0a565b80612b42575060005460ff16155b612b7d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612ba8576000805460ff1961ff0019909116610100171660011790555b8015611009576000805461ff001916905550565b600054610100900460ff1680612bd55750612bd5612b0a565b80612be3575060005460ff16155b612c1e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612c49576000805460ff1961ff0019909116610100171660011790555b612ba863656cb66560e11b6138c8565b600054610100900460ff1680612c725750612c72612b0a565b80612c80575060005460ff16155b612cbb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612ce6576000805460ff1961ff0019909116610100171660011790555b612ba86301ffc9a760e01b6138c8565b600054610100900460ff1680612d0f5750612d0f612b0a565b80612d1d575060005460ff16155b612d585760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612d83576000805460ff1961ff0019909116610100171660011790555b6000612d8d611b0d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611009576000805461ff001916905550565b600054610100900460ff1680612e085750612e08612b0a565b80612e16575060005460ff16155b612e515760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612e7c576000805460ff1961ff0019909116610100171660011790555b612ba8604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b81525061394c565b600054610100900460ff1680612ed75750612ed7612b0a565b80612ee5575060005460ff16155b612f205760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612f4b576000805460ff1961ff0019909116610100171660011790555b8151612f5f9061022e9060208501906142fc565b50612f7063e8a3d48560e01b6138c8565b8015610c43576000805461ff00191690555050565b600054610100900460ff1680612f9e5750612f9e612b0a565b80612fac575060005460ff16155b612fe75760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015613012576000805460ff1961ff0019909116610100171660011790555b82516130259060fd9060208601906142fc565b5081516130399060fe9060208501906142fc565b5061304a6380ac58cd60e01b6138c8565b61305a635b5e139f60e01b6138c8565b8015610827576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611b17613a0c565b61100981613a10565b60006130f8846001600160a01b03166138c2565b1561328e57836001600160a01b031663150b7a02613114611b0d565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561318757818101518382015260200161316f565b50505050905090810190601f1680156131b45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156131d657600080fd5b505af19250505080156131fb57506040513d60208110156131f657600080fd5b505160015b613274573d808015613229576040519150601f19603f3d011682016040523d82523d6000602084013e61322e565b606091505b50805161326c5760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613292565b5060015b949350505050565b60606132a582611af0565b6132e05760405162461bcd60e51b815260040180806020018281038252602f8152602001806151e2602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133745780601f1061334957610100808354040283529160200191613374565b820191906000526020600020905b81548152906001019060200180831161335757829003601f168201915b5050505050905060006133856111bc565b905080516000141561339957509050610657565b8151156133b3576133aa8183613a19565b92505050610657565b806133bd85613bfe565b6040516020018083805190602001908083835b602083106133ef5780518252601f1990920191602091820191016133d0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134375780518252601f199092019160209182019101613418565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061352383613cd8565b9050600082516041141561353e5761353b8284613ce2565b90505b846001600160a01b0316816001600160a01b031614611e6657613569856001600160a01b03166138c2565b1561371f5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156135d85781810151838201526020016135c0565b50505050905090810190601f1680156136055780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561362357600080fd5b505afa158015613637573d6000803e3d6000fd5b505050506040513d602081101561364d57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136de5781810151838201526020016136c6565b50505050905090810190601f16801561370b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611e66565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156136de5781810151838201526020016136c6565b6137a18383613d62565b6137ae60008484846130e4565b6108275760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df828260405161381a929190614e9c565b60405180910390a15050565b600061383182611af0565b61386c5760405162461bcd60e51b815260040180806020018281038252602c815260200180614fec602c913960400191505060405180910390fd5b600061387783611168565b9050806001600160a01b0316846001600160a01b031614806138b25750836001600160a01b03166138a7846106f3565b6001600160a01b0316145b806132925750613292818561191e565b3b151590565b6001600160e01b03198082161415613927576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139655750613965612b0a565b80613973575060005460ff16155b6139ae5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff161580156139d9576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610827576000805461ff0019169055505050565b4690565b61100981613ec8565b80518251606091849184911015613ae45784846040516020018083805190602001908083835b60208310613a5e5780518252601f199092019160209182019101613a3f565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613aa65780518252601f199092019160209182019101613a87565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061192d565b60005b8251811015613bf457828181518110613afc57fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b1d57fe5b01602001516001600160f81b03191614613bec5785856040516020018083805190602001908083835b60208310613b655780518252601f199092019160209182019101613b46565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bad5780518252601f199092019160209182019101613b8e565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061192d565b600101613ae7565b5092949350505050565b606081613c2357506040805180820190915260018152600360fc1b6020820152610657565b8160005b8115613c3b57600101600a82049150613c27565b6000816001600160401b0381118015613c5357600080fd5b506040519080825280601f01601f191660200182016040528015613c7e576020820181803683370190505b50859350905060001982015b8315613ccf57600a840660300160f81b82828060019003935081518110613cad57fe5b60200101906001600160f81b031916908160001a905350600a84049350613c8a565b50949350505050565b600061242d613f08565b60008151604114613d3a576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d5886828585613f43565b9695505050505050565b6001600160a01b038216613dbd576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e19576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e2281611af0565b15613e74576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613e8060008383610827565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c438282614199565b60008181526101c7602052604090205460026000196101006001841615020190911604156110095760008181526101c76020526040812061100991614388565b6000611b177f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f366141a3565b613f3e6141a9565b6141af565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fa45760405162461bcd60e51b8152600401808060200182810382526022815260200180614fca6022913960400191505060405180910390fd5b6000601e8560ff16111561407e576004850360ff16601b1480613fcd57506004850360ff16601c145b6140085760405162461bcd60e51b81526004018080602001828103825260228152602001806150d16022913960400191505060405180910390fd5b600161401387614211565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561406d573d6000803e3d6000fd5b505050602060405103519050614135565b8460ff16601b148061409357508460ff16601c145b6140ce5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d16022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614128573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614190576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c438282614262565b60975490565b60985490565b60008383836141bc613a0c565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142d15760405182906001600160a01b03831690600090600080516020615211833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061521183398151915260405160405180910390a4610827565b60405182906001600160a01b03851690600090600080516020615211833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143325760008555614378565b82601f1061434b57805160ff1916838001178555614378565b82800160010185558215614378579182015b8281111561437857825182559160200191906001019061435d565b506143849291506143c8565b5090565b50805460018160011615610100020316600290046000825580601f106143ae5750611009565b601f01602090049060005260206000209081019061100991905b5b8082111561438457600081556001016143c9565b803561065781614ef5565b600082601f8301126143f8578081fd5b8135602061440d61440883614ed8565b614eb5565b8281528181019085830183850287018401881015614429578586fd5b855b8581101561445057813561443e81614ef5565b8452928401929084019060010161442b565b5090979650505050505050565b600082601f83011261446d578081fd5b8135602061447d61440883614ed8565b82815281810190858301855b85811015614450576144a0898684358b010161456d565b84529284019290840190600101614489565b600082601f8301126144c2578081fd5b813560206144d261440883614ed8565b828152818101908583016040808602880185018910156144f0578687fd5b865b8681101561455f5781838b031215614508578788fd5b81518281018181106001600160401b038211171561452257fe5b8352833561452f81614ef5565b8152838701356001600160601b038116811461454957898afd5b81880152855293850193918101916001016144f2565b509198975050505050505050565b600082601f83011261457d578081fd5b81356001600160401b0381111561459057fe5b6145a3601f8201601f1916602001614eb5565b8181528460208386010111156145b7578283fd5b816020850160208301379081016020019190915292915050565b600060a082840312156145e2578081fd5b6145ec60a0614eb5565b90508135815260208201356001600160401b038082111561460c57600080fd5b6146188583860161456d565b6020840152604084013591508082111561463157600080fd5b61463d858386016144b2565b6040840152606084013591508082111561465657600080fd5b614662858386016144b2565b6060840152608084013591508082111561467b57600080fd5b506146888482850161445d565b60808301525092915050565b6000602082840312156146a5578081fd5b813561192a81614ef5565b600080604083850312156146c2578081fd5b82356146cd81614ef5565b915060208301356146dd81614ef5565b809150509250929050565b6000806000606084860312156146fc578081fd5b833561470781614ef5565b9250602084013561471781614ef5565b929592945050506040919091013590565b6000806000806080858703121561473d578182fd5b843561474881614ef5565b9350602085013561475881614ef5565b92506040850135915060608501356001600160401b03811115614779578182fd5b6147858782880161456d565b91505092959194509250565b600080604083850312156147a3578182fd5b82356147ae81614ef5565b9150602083013580151581146146dd578182fd5b600080600080600060a086880312156147d9578283fd5b85356147e481614ef5565b945060208601356001600160401b038111156147fe578384fd5b61480a8882890161456d565b9450506040860135925060608601359150608086013560ff8116811461482e578182fd5b809150509295509295909350565b6000806040838503121561484e578182fd5b823561485981614ef5565b946020939093013593505050565b600060208284031215614878578081fd5b81356001600160401b0381111561488d578182fd5b613292848285016143e8565b6000602082840312156148aa578081fd5b81356001600160e01b03198116811461192a578182fd5b6000602082840312156148d2578081fd5b81356001600160401b038111156148e7578182fd5b6132928482850161456d565b60008060008060008060c0878903121561490b578384fd5b86356001600160401b0380821115614921578586fd5b61492d8a838b0161456d565b97506020890135915080821115614942578586fd5b61494e8a838b0161456d565b96506040890135915080821115614963578586fd5b61496f8a838b0161456d565b95506060890135915080821115614984578283fd5b5061499189828a0161456d565b9350506149a0608088016143dd565b91506149ae60a088016143dd565b90509295509295509295565b600080600080600080600060e0888a0312156149d4578485fd5b87356001600160401b03808211156149ea578687fd5b6149f68b838c0161456d565b985060208a0135915080821115614a0b578687fd5b614a178b838c0161456d565b975060408a0135915080821115614a2c578687fd5b614a388b838c0161456d565b965060608a0135915080821115614a4d578283fd5b614a598b838c0161456d565b955060808a0135915080821115614a6e578283fd5b50614a7b8a828b016143e8565b935050614a8a60a089016143dd565b9150614a9860c089016143dd565b905092959891949750929550565b60008060408385031215614ab8578182fd5b82356001600160401b03811115614acd578283fd5b614ad9858286016145d1565b92505060208301356146dd81614ef5565b600080600060608486031215614afe578081fd5b83356001600160401b03811115614b13578182fd5b614b1f868287016145d1565b9350506020840135614b3081614ef5565b91506040840135614b4081614ef5565b809150509250925092565b600060208284031215614b5c578081fd5b5035919050565b600080600060608486031215614b77578081fd5b833592506020840135614b3081614ef5565b60008060408385031215614b9b578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614bf657815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614bbd565b509495945050505050565b60008151808452815b81811015614c2657602081850181015186830182015201614c0a565b81811115614c375782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614c8490830185614c01565b8281036040840152613d588185614c01565b6001600160a01b03929092168252602082015260400190565b60006020825261192a6020830184614baa565b901515815260200190565b60006020825261192a6020830184614c01565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132926040830184614baa565b6040518181016001600160401b0381118282101715614ed057fe5b604052919050565b60006001600160401b03821115614eeb57fe5b5060209081020190565b6001600160a01b038116811461100957600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220a4af80d98c1ea06b28253abe062a76cad67681536d192b48c743dfd2de8061ed64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063cad96cca1161006f578063cad96cca146105b4578063e07f2319146105d4578063e8a3d485146105f4578063e985e9c514610609578063f2fde38b14610629576101f9565b8063a22cb46514610534578063aa271e1a14610554578063b88d4fde14610574578063c87b56dd14610594576101f9565b8063891be974116100dc578063891be974146104bd5780638da5cb5b146104ea57806395d89b41146104ff578063983b2d5614610514576101f9565b806370a0823114610448578063715018a61461046857806371e2a6571461047d578063832fbb291461049d576101f9565b80632d0335ab1161019057806342966c681161015f57806342966c68146103b35780634648eb9d146103d357806355f804b3146103f35780636352211e146104135780636c0360eb14610433576101f9565b80632d0335ab146103265780633092afd5146103535780633db397c61461037357806342842e0e14610393576101f9565b80630c53c51c116101cc5780630c53c51c146102a557806322a775b6146102b857806323b872dd146102d85780632a55205a146102f8576101f9565b806301ffc9a7146101fe57806306fdde0314610234578063081812fc14610256578063095ea7b314610283575b600080fd5b34801561020a57600080fd5b5061021e610219366004614899565b610649565b60405161022b9190614cc2565b60405180910390f35b34801561024057600080fd5b5061024961065c565b60405161022b9190614ccd565b34801561026257600080fd5b50610276610271366004614b4b565b6106f3565b60405161022b9190614c4c565b34801561028f57600080fd5b506102a361029e36600461483c565b610756565b005b6102496102b33660046147c2565b61082c565b3480156102c457600080fd5b506102a36102d3366004614aa6565b610ba5565b3480156102e457600080fd5b506102a36102f33660046146e8565b610c47565b34801561030457600080fd5b50610318610313366004614b89565b610c9e565b60405161022b929190614c96565b34801561033257600080fd5b50610346610341366004614694565b610dac565b60405161022b9190614e93565b34801561035f57600080fd5b506102a361036e366004614694565b610dc8565b34801561037f57600080fd5b506102a361038e3660046148f3565b610e78565b34801561039f57600080fd5b506102a36103ae3660046146e8565b610f27565b3480156103bf57600080fd5b506102a36103ce366004614b4b565b610f42565b3480156103df57600080fd5b506102a36103ee3660046149ba565b61100c565b3480156103ff57600080fd5b506102a361040e3660046148c1565b6110c3565b34801561041f57600080fd5b5061027661042e366004614b4b565b611168565b34801561043f57600080fd5b506102496111bc565b34801561045457600080fd5b50610346610463366004614694565b61121e565b34801561047457600080fd5b506102a3611282565b34801561048957600080fd5b506102a3610498366004614867565b61132e565b3480156104a957600080fd5b506102a36104b8366004614aea565b611413565b3480156104c957600080fd5b506104dd6104d8366004614b4b565b61148e565b60405161022b9190614caf565b3480156104f657600080fd5b5061027661151e565b34801561050b57600080fd5b5061024961152d565b34801561052057600080fd5b506102a361052f366004614694565b61158e565b34801561054057600080fd5b506102a361054f366004614791565b611643565b34801561056057600080fd5b5061021e61056f366004614694565b611749565b34801561058057600080fd5b506102a361058f366004614728565b611768565b3480156105a057600080fd5b506102496105af366004614b4b565b6117c6565b3480156105c057600080fd5b506104dd6105cf366004614b4b565b6117d1565b3480156105e057600080fd5b506102a36105ef366004614b63565b61184c565b34801561060057600080fd5b5061024961188f565b34801561061557600080fd5b5061021e6106243660046146b0565b61191e565b34801561063557600080fd5b506102a3610644366004614694565b611933565b600061065482611a36565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b505050505090505b90565b60006106fe82611af0565b6107395760405162461bcd60e51b815260040180806020018281038252602c815260200180615120602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061076182611168565b9050806001600160a01b0316836001600160a01b031614156107b45760405162461bcd60e51b81526004018080602001828103825260218152602001806152316021913960400191505060405180910390fd5b806001600160a01b03166107c6611b0d565b6001600160a01b031614806107e257506107e281610624611b0d565b61081d5760405162461bcd60e51b81526004018080602001828103825260388152602001806150186038913960400191505060405180910390fd5b6108278383611b1c565b505050565b6060600061083986611b8b565b90506000356001600160e01b031990811690821614156108a0576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526108de8882888888611ba7565b6109195760405162461bcd60e51b81526004018080602001828103825260218152602001806151c16021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f7602052604090205461093e906001611c91565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109a95780518252601f19909201916020918201910161098a565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a1f5780518252601f199092019160209182019101610a00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610a81576040519150601f19603f3d011682016040523d82523d6000602084013e610a86565b606091505b509150915081610add576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b5c578181015183820152602001610b44565b50505050905090810190601f168015610b895780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c39578160400151600081518110610bc257fe5b6020026020010151600001516001600160a01b0316610bdf61151e565b6001600160a01b03161480610c145750610c148260400151600081518110610c0357fe5b602002602001015160000151611749565b610c395760405162461bcd60e51b8152600401610c3090614d0b565b60405180910390fd5b610c438282611ceb565b5050565b610c58610c52611b0d565b82611e6d565b610c935760405162461bcd60e51b81526004018080602001828103825260318152602001806152526031913960400191505060405180910390fd5b610827838383611e79565b60008281526101c660205260408120548190610cbf57506000905080610da5565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d3b57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610cec565b50505050905080600081518110610d4e57fe5b60209081029190910101515192506000805b8251811015610d9957828181518110610d7557fe5b6020026020010151602001516001600160601b031682019150806001019050610d60565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dd0611b0d565b6001600160a01b0316610de161151e565b6001600160a01b031614610e2a576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610e86868686868686611f98565b610ed26040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b8152506120b2565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f06611b0d565b8787604051610f1793929190614c60565b60405180910390a1505050505050565b61082783838360405180602001604052806000815250611768565b610f4b81611af0565b610fba57606081901c610f5c611b0d565b6001600160a01b0316816001600160a01b031614610fab5760405162461bcd60e51b815260040180806020018281038252602d8152602001806150f3602d913960400191505060405180910390fd5b610fb482612142565b50611009565b610fc5610c52611b0d565b6110005760405162461bcd60e51b81526004018080602001828103825260308152602001806152a86030913960400191505060405180910390fd5b6110098161215e565b50565b61101a878787878686611f98565b61106a6040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b8152506120b2565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110a1611b0d565b88886040516110b293929190614c60565b60405180910390a150505050505050565b6110cb611b0d565b6001600160a01b03166110dc61151e565b6001600160a01b031614611125576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b61112e816121fa565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161115d9190614ccd565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806106545760405162461bcd60e51b815260040180806020018281038252602981526020018061507a6029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b60006001600160a01b0382166112655760405162461bcd60e51b815260040180806020018281038252602a815260200180615050602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b61128a611b0d565b6001600160a01b031661129b61151e565b6001600160a01b0316146112e4576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611336611b0d565b6001600160a01b031661134761151e565b6001600160a01b031614611390576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b60005b8151811015610c435760008282815181106113aa57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611393565b825161141e90611af0565b156114375761143282828560000151610f27565b610827565b826040015160008151811061144857fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114845760405162461bcd60e51b8152600401610c3090614ce0565b6108278382610ba5565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561151357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114c4565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e85780601f106106bd576101008083540402835291602001916106e8565b611596611b0d565b6001600160a01b03166115a761151e565b6001600160a01b0316146115f0576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61164b611b0d565b6001600160a01b0316826001600160a01b031614156116b1576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116bf611b0d565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611703611b0d565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b611779611773611b0d565b83611e6d565b6117b45760405162461bcd60e51b81526004018080602001828103825260318152602001806152526031913960400191505060405180910390fd5b6117c08484848461220e565b50505050565b606061065482612260565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561151357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114c4565b816001600160a01b031661185e611b0d565b6001600160a01b0316146118845760405162461bcd60e51b8152600401610c3090614d98565b61082783838361226b565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119165780601f106118eb57610100808354040283529160200191611916565b820191906000526020600020905b8154815290600101906020018083116118f957829003601f168201915b505050505081565b600061192a8383612317565b90505b92915050565b61193b611b0d565b6001600160a01b031661194c61151e565b6001600160a01b031614611995576040805162461bcd60e51b81526020600482018190526024820152600080516020615178833981519152604482015290519081900360640190fd5b6001600160a01b0381166119da5760405162461bcd60e51b8152600401808060200182810382526026815260200180614f806026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b1480611a6757506001600160e01b0319821663656cb66560e11b145b80611a8257506001600160e01b0319821663152a902d60e11b145b80611a9d57506001600160e01b031982166301ffc9a760e01b145b80611ab857506001600160e01b031982166380ac58cd60e01b145b80611ad357506001600160e01b03198216635b5e139f60e01b145b806106545750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611b17612344565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611b5282611168565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611b9f57506000610657565b506020015190565b6000806001611bbd611bb8886123a0565b612423565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611c14573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c70576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561192a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611cfa611b0d565b90508360400151600081518110611d0d57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611d495760405162461bcd60e51b8152600401610c3090614d6d565b83608001515184604001515114611d5f57600080fd5b806001600160a01b0316826001600160a01b03161480611d845750611d84828261191e565b611da05760405162461bcd60e51b8152600401610c3090614df4565b6000611dab8561246f565b905060005b856040015151811015611e2157600086604001518281518110611dcf57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611e1857611e18818489608001518581518110611e0b57fe5b60200260200101516126b6565b50600101611db0565b50611e308486600001516126c1565b611e42856000015186606001516126db565b611e54856000015186604001516128ca565b611e6685600001518660200151612a79565b5050505050565b600061192a8383612add565b826001600160a01b0316611e8c82611168565b6001600160a01b031614611ed15760405162461bcd60e51b81526004018080602001828103825260298152602001806151986029913960400191505060405180910390fd5b6001600160a01b038216611f165760405162461bcd60e51b8152600401808060200182810382526024815260200180614fa66024913960400191505060405180910390fd5b611f21838383610827565b611f2c600082611b1c565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061521183398151915291a4505050565b600054610100900460ff1680611fb15750611fb1612b0a565b80611fbf575060005460ff16155b611ffa5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612025576000805460ff1961ff0019909116610100171660011790555b61202e856121fa565b612036612b1b565b61203e612bbc565b612046612b1b565b61204e612c59565b612056612cf6565b61205e612b1b565b612066612def565b61206e612b1b565b61207784612ebe565b6120818787612f85565b61208c836001613070565b612097826001613070565b80156120a9576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306120ec6130d1565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061216982611168565b905061217781600084610827565b612182600083611b1c565b61218b826130db565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556121d082612142565b60405182906000906001600160a01b03841690600080516020615211833981519152908390a45050565b8051610c43906101c89060208401906142fc565b612219848484611e79565b612225848484846130e4565b6117c05760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b60606106548261329a565b60008381526101c66020526040812054905b81811015611e665760008581526101c66020526040902080546001600160a01b0386169190839081106122ac57fe5b6000918252602090912001546001600160a01b0316141561230f5760008581526101c6602052604090208054849190839081106122e557fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b60010161227d565b6001600160a01b038116600090815261012f602052604081205460ff168061192a575061192a8383613475565b60003330141561239b57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506106f09050565b503390565b6000604051806080016040528060438152602001614f3d60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b600061242d6134a4565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561248d57600080fd5b506040519080825280602002602001820160405280156124b7578160200160208202803683370190505b50905060005b836060015151811015612509576124ea846060015182815181106124dd57fe5b60200260200101516134ab565b8282815181106124f657fe5b60209081029190910101526001016124bd565b5060008360400151516001600160401b038111801561252757600080fd5b50604051908082528060200260200182016040528015612551578160200160208202803683370190505b50905060005b84604001515181101561259657612577856040015182815181106124dd57fe5b82828151811061258357fe5b6020908102919091010152600101612557565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156125fa5781810151838201526020016125e2565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b8381101561264b578181015183820152602001612633565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610827838383613518565b610c43828260405180602001604052806000815250613797565b6000805b825181101561287f5760006001600160a01b03168382815181106126ff57fe5b6020026020010151600001516001600160a01b03161415612767576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061277357fe5b6020026020010151602001516001600160601b0316600014156127dd576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106127e957fe5b6020026020010151602001516001600160601b0316820191506101c6600085815260200190815260200160002083828151811061282257fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016126df565b5061271081106128c05760405162461bcd60e51b81526004018080602001828103825260258152602001806152836025913960400191505060405180910390fd5b61082783836137e9565b60008281526101fb6020526040812090805b8351811015612a185760006001600160a01b03168482815181106128fc57fe5b6020026020010151600001516001600160a01b0316141561292f5760405162461bcd60e51b8152600401610c3090614dbd565b83818151811061293b57fe5b6020026020010151602001516001600160601b0316600014156129705760405162461bcd60e51b8152600401610c3090614d38565b8284828151811061297d57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612a0e908590839081106129ea57fe5b6020026020010151602001516001600160601b031683611c9190919063ffffffff16565b91506001016128dc565b508061271014612a3a5760405162461bcd60e51b8152600401610c3090614e45565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612a6b929190614e9c565b60405180910390a150505050565b612a8282611af0565b612abd5760405162461bcd60e51b815260040180806020018281038252602c81526020018061514c602c913960400191505060405180910390fd5b60008281526101c7602090815260409091208251610827928401906142fc565b6001600160a01b038216600090815261012f602052604081205460ff168061192a575061192a8383613826565b6000612b15306138c2565b15905090565b600054610100900460ff1680612b345750612b34612b0a565b80612b42575060005460ff16155b612b7d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612ba8576000805460ff1961ff0019909116610100171660011790555b8015611009576000805461ff001916905550565b600054610100900460ff1680612bd55750612bd5612b0a565b80612be3575060005460ff16155b612c1e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612c49576000805460ff1961ff0019909116610100171660011790555b612ba863656cb66560e11b6138c8565b600054610100900460ff1680612c725750612c72612b0a565b80612c80575060005460ff16155b612cbb5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612ce6576000805460ff1961ff0019909116610100171660011790555b612ba86301ffc9a760e01b6138c8565b600054610100900460ff1680612d0f5750612d0f612b0a565b80612d1d575060005460ff16155b612d585760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612d83576000805460ff1961ff0019909116610100171660011790555b6000612d8d611b0d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611009576000805461ff001916905550565b600054610100900460ff1680612e085750612e08612b0a565b80612e16575060005460ff16155b612e515760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612e7c576000805460ff1961ff0019909116610100171660011790555b612ba8604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b81525061394c565b600054610100900460ff1680612ed75750612ed7612b0a565b80612ee5575060005460ff16155b612f205760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015612f4b576000805460ff1961ff0019909116610100171660011790555b8151612f5f9061022e9060208501906142fc565b50612f7063e8a3d48560e01b6138c8565b8015610c43576000805461ff00191690555050565b600054610100900460ff1680612f9e5750612f9e612b0a565b80612fac575060005460ff16155b612fe75760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff16158015613012576000805460ff1961ff0019909116610100171660011790555b82516130259060fd9060208601906142fc565b5081516130399060fe9060208501906142fc565b5061304a6380ac58cd60e01b6138c8565b61305a635b5e139f60e01b6138c8565b8015610827576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611b17613a0c565b61100981613a10565b60006130f8846001600160a01b03166138c2565b1561328e57836001600160a01b031663150b7a02613114611b0d565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561318757818101518382015260200161316f565b50505050905090810190601f1680156131b45780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156131d657600080fd5b505af19250505080156131fb57506040513d60208110156131f657600080fd5b505160015b613274573d808015613229576040519150601f19603f3d011682016040523d82523d6000602084013e61322e565b606091505b50805161326c5760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613292565b5060015b949350505050565b60606132a582611af0565b6132e05760405162461bcd60e51b815260040180806020018281038252602f8152602001806151e2602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133745780601f1061334957610100808354040283529160200191613374565b820191906000526020600020905b81548152906001019060200180831161335757829003601f168201915b5050505050905060006133856111bc565b905080516000141561339957509050610657565b8151156133b3576133aa8183613a19565b92505050610657565b806133bd85613bfe565b6040516020018083805190602001908083835b602083106133ef5780518252601f1990920191602091820191016133d0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134375780518252601f199092019160209182019101613418565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061352383613cd8565b9050600082516041141561353e5761353b8284613ce2565b90505b846001600160a01b0316816001600160a01b031614611e6657613569856001600160a01b03166138c2565b1561371f5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156135d85781810151838201526020016135c0565b50505050905090810190601f1680156136055780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561362357600080fd5b505afa158015613637573d6000803e3d6000fd5b505050506040513d602081101561364d57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136de5781810151838201526020016136c6565b50505050905090810190601f16801561370b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611e66565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156136de5781810151838201526020016136c6565b6137a18383613d62565b6137ae60008484846130e4565b6108275760405162461bcd60e51b8152600401808060200182810382526032815260200180614f0b6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df828260405161381a929190614e9c565b60405180910390a15050565b600061383182611af0565b61386c5760405162461bcd60e51b815260040180806020018281038252602c815260200180614fec602c913960400191505060405180910390fd5b600061387783611168565b9050806001600160a01b0316846001600160a01b031614806138b25750836001600160a01b03166138a7846106f3565b6001600160a01b0316145b806132925750613292818561191e565b3b151590565b6001600160e01b03198082161415613927576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139655750613965612b0a565b80613973575060005460ff16155b6139ae5760405162461bcd60e51b815260040180806020018281038252602e8152602001806150a3602e913960400191505060405180910390fd5b600054610100900460ff161580156139d9576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610827576000805461ff0019169055505050565b4690565b61100981613ec8565b80518251606091849184911015613ae45784846040516020018083805190602001908083835b60208310613a5e5780518252601f199092019160209182019101613a3f565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613aa65780518252601f199092019160209182019101613a87565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061192d565b60005b8251811015613bf457828181518110613afc57fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b1d57fe5b01602001516001600160f81b03191614613bec5785856040516020018083805190602001908083835b60208310613b655780518252601f199092019160209182019101613b46565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bad5780518252601f199092019160209182019101613b8e565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061192d565b600101613ae7565b5092949350505050565b606081613c2357506040805180820190915260018152600360fc1b6020820152610657565b8160005b8115613c3b57600101600a82049150613c27565b6000816001600160401b0381118015613c5357600080fd5b506040519080825280601f01601f191660200182016040528015613c7e576020820181803683370190505b50859350905060001982015b8315613ccf57600a840660300160f81b82828060019003935081518110613cad57fe5b60200101906001600160f81b031916908160001a905350600a84049350613c8a565b50949350505050565b600061242d613f08565b60008151604114613d3a576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d5886828585613f43565b9695505050505050565b6001600160a01b038216613dbd576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e19576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e2281611af0565b15613e74576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613e8060008383610827565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c438282614199565b60008181526101c7602052604090205460026000196101006001841615020190911604156110095760008181526101c76020526040812061100991614388565b6000611b177f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f366141a3565b613f3e6141a9565b6141af565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fa45760405162461bcd60e51b8152600401808060200182810382526022815260200180614fca6022913960400191505060405180910390fd5b6000601e8560ff16111561407e576004850360ff16601b1480613fcd57506004850360ff16601c145b6140085760405162461bcd60e51b81526004018080602001828103825260228152602001806150d16022913960400191505060405180910390fd5b600161401387614211565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561406d573d6000803e3d6000fd5b505050602060405103519050614135565b8460ff16601b148061409357508460ff16601c145b6140ce5760405162461bcd60e51b81526004018080602001828103825260228152602001806150d16022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614128573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614190576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c438282614262565b60975490565b60985490565b60008383836141bc613a0c565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142d15760405182906001600160a01b03831690600090600080516020615211833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061521183398151915260405160405180910390a4610827565b60405182906001600160a01b03851690600090600080516020615211833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143325760008555614378565b82601f1061434b57805160ff1916838001178555614378565b82800160010185558215614378579182015b8281111561437857825182559160200191906001019061435d565b506143849291506143c8565b5090565b50805460018160011615610100020316600290046000825580601f106143ae5750611009565b601f01602090049060005260206000209081019061100991905b5b8082111561438457600081556001016143c9565b803561065781614ef5565b600082601f8301126143f8578081fd5b8135602061440d61440883614ed8565b614eb5565b8281528181019085830183850287018401881015614429578586fd5b855b8581101561445057813561443e81614ef5565b8452928401929084019060010161442b565b5090979650505050505050565b600082601f83011261446d578081fd5b8135602061447d61440883614ed8565b82815281810190858301855b85811015614450576144a0898684358b010161456d565b84529284019290840190600101614489565b600082601f8301126144c2578081fd5b813560206144d261440883614ed8565b828152818101908583016040808602880185018910156144f0578687fd5b865b8681101561455f5781838b031215614508578788fd5b81518281018181106001600160401b038211171561452257fe5b8352833561452f81614ef5565b8152838701356001600160601b038116811461454957898afd5b81880152855293850193918101916001016144f2565b509198975050505050505050565b600082601f83011261457d578081fd5b81356001600160401b0381111561459057fe5b6145a3601f8201601f1916602001614eb5565b8181528460208386010111156145b7578283fd5b816020850160208301379081016020019190915292915050565b600060a082840312156145e2578081fd5b6145ec60a0614eb5565b90508135815260208201356001600160401b038082111561460c57600080fd5b6146188583860161456d565b6020840152604084013591508082111561463157600080fd5b61463d858386016144b2565b6040840152606084013591508082111561465657600080fd5b614662858386016144b2565b6060840152608084013591508082111561467b57600080fd5b506146888482850161445d565b60808301525092915050565b6000602082840312156146a5578081fd5b813561192a81614ef5565b600080604083850312156146c2578081fd5b82356146cd81614ef5565b915060208301356146dd81614ef5565b809150509250929050565b6000806000606084860312156146fc578081fd5b833561470781614ef5565b9250602084013561471781614ef5565b929592945050506040919091013590565b6000806000806080858703121561473d578182fd5b843561474881614ef5565b9350602085013561475881614ef5565b92506040850135915060608501356001600160401b03811115614779578182fd5b6147858782880161456d565b91505092959194509250565b600080604083850312156147a3578182fd5b82356147ae81614ef5565b9150602083013580151581146146dd578182fd5b600080600080600060a086880312156147d9578283fd5b85356147e481614ef5565b945060208601356001600160401b038111156147fe578384fd5b61480a8882890161456d565b9450506040860135925060608601359150608086013560ff8116811461482e578182fd5b809150509295509295909350565b6000806040838503121561484e578182fd5b823561485981614ef5565b946020939093013593505050565b600060208284031215614878578081fd5b81356001600160401b0381111561488d578182fd5b613292848285016143e8565b6000602082840312156148aa578081fd5b81356001600160e01b03198116811461192a578182fd5b6000602082840312156148d2578081fd5b81356001600160401b038111156148e7578182fd5b6132928482850161456d565b60008060008060008060c0878903121561490b578384fd5b86356001600160401b0380821115614921578586fd5b61492d8a838b0161456d565b97506020890135915080821115614942578586fd5b61494e8a838b0161456d565b96506040890135915080821115614963578586fd5b61496f8a838b0161456d565b95506060890135915080821115614984578283fd5b5061499189828a0161456d565b9350506149a0608088016143dd565b91506149ae60a088016143dd565b90509295509295509295565b600080600080600080600060e0888a0312156149d4578485fd5b87356001600160401b03808211156149ea578687fd5b6149f68b838c0161456d565b985060208a0135915080821115614a0b578687fd5b614a178b838c0161456d565b975060408a0135915080821115614a2c578687fd5b614a388b838c0161456d565b965060608a0135915080821115614a4d578283fd5b614a598b838c0161456d565b955060808a0135915080821115614a6e578283fd5b50614a7b8a828b016143e8565b935050614a8a60a089016143dd565b9150614a9860c089016143dd565b905092959891949750929550565b60008060408385031215614ab8578182fd5b82356001600160401b03811115614acd578283fd5b614ad9858286016145d1565b92505060208301356146dd81614ef5565b600080600060608486031215614afe578081fd5b83356001600160401b03811115614b13578182fd5b614b1f868287016145d1565b9350506020840135614b3081614ef5565b91506040840135614b4081614ef5565b809150509250925092565b600060208284031215614b5c578081fd5b5035919050565b600080600060608486031215614b77578081fd5b833592506020840135614b3081614ef5565b60008060408385031215614b9b578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614bf657815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614bbd565b509495945050505050565b60008151808452815b81811015614c2657602081850181015186830182015201614c0a565b81811115614c375782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614c8490830185614c01565b8281036040840152613d588185614c01565b6001600160a01b03929092168252602082015260400190565b60006020825261192a6020830184614baa565b901515815260200190565b60006020825261192a6020830184614c01565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132926040830184614baa565b6040518181016001600160401b0381118282101715614ed057fe5b604052919050565b60006001600160401b03821115614eeb57fe5b5060209081020190565b6001600160a01b038116811461100957600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220a4af80d98c1ea06b28253abe062a76cad67681536d192b48c743dfd2de8061ed64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "151", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "152", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22877, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 24053, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage" + }, + { + "astId": 24055, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 24059, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owners", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 24063, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 24067, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenApprovals", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 24073, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 24083, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_burnedTokens", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 24862, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "260", + "type": "t_array(t_uint256)43_storage" + }, + { + "astId": 23120, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23191, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23110, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "354", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19012, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "404", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 17786, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "454", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)" + }, + { + "astId": 23887, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "455", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 23889, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "456", + "type": "t_string_storage" + }, + { + "astId": 24024, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "457", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23234, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)" + }, + { + "astId": 23659, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "508", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 18853, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "558", + "type": "t_string_storage" + }, + { + "astId": 18887, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "559", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 23024, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "608", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 18893, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "658", + "type": "t_bool" + }, + { + "astId": 18897, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "659", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19022, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "708", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 19143, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "709", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 15838, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "759", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15840, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "760", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)15592_storage)dyn_storage": { + "base": "t_struct(Part)15592_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)15592_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)15592_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)15592_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 15589, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 15591, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Proxy.json new file mode 100644 index 000000000..bfecfbca2 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMeta_Proxy.json @@ -0,0 +1,287 @@ +{ + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "transactionIndex": 1, + "gasUsed": "1080349", + "logsBloom": "0x00000000000000000000000000000000400000000000000050800000000000000000000000000020000000000040000000000000000400000000000000000000000000000000000000002000000002010001000000000000000000000000000000000000021000000000001000000800000000800000000000000000000001400000000000000000004000010002000000000000000000000000000000800000000000000000000000000000000000000000200000000000200000040000000000000020000000000040000010000000000000000400000000000010000020000000000000000020000000000000000000000000000000000000000001000000", + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3", + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000025a46c1eac0ff9be6b27fedaf602ce306874335e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000015cef16b61d8d87e08e129b6d4af299a29027694" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 4, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + }, + { + "transactionIndex": 1, + "blockNumber": 446430, + "transactionHash": "0x78425ae86df5b7ac6e29304f54ccc5f74555db7846df4280efbefaca2c271c73", + "address": "0xe8e947048fd18A3b3Fc51E79290F959276165850", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 5, + "blockHash": "0x67d66351ebd8095ade5361edfc5fe61805ec6df3b8a59e722b1022799063d4a3" + } + ], + "blockNumber": 446430, + "cumulativeGasUsed": "1132552", + "status": 1, + "byzantium": true + }, + "args": [ + "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x3db397c600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf2000000000000000000000000015cef16b61d8d87e08e129b6d4af299a29027694000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMinimalBeaconMeta.json new file mode 100644 index 000000000..9f7dc2c5b --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ERC721RaribleMinimalBeaconMeta.json @@ -0,0 +1,199 @@ +{ + "address": "0x039Ad594223C53e665Ac80b00C63973c770baCBA", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x3a4f24c3032340f99e4082276466e41bc52b350aa4500abf341084465154b9c7", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x039Ad594223C53e665Ac80b00C63973c770baCBA", + "transactionIndex": 1, + "gasUsed": "356388", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000100000000000000000000000021000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000080000000000000000400000000000000000000000000000000", + "blockHash": "0x9ae9727c8b34151ca7341bd319d5e737ca7df8ad2f041789f4665086e8f25feb", + "transactionHash": "0x3a4f24c3032340f99e4082276466e41bc52b350aa4500abf341084465154b9c7", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446434, + "transactionHash": "0x3a4f24c3032340f99e4082276466e41bc52b350aa4500abf341084465154b9c7", + "address": "0x039Ad594223C53e665Ac80b00C63973c770baCBA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x9ae9727c8b34151ca7341bd319d5e737ca7df8ad2f041789f4665086e8f25feb" + } + ], + "blockNumber": 446434, + "cumulativeGasUsed": "400215", + "status": 1, + "byzantium": true + }, + "args": [ + "0x25a46C1eaC0fF9BE6b27FEdAf602cE306874335e" + ], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":\"ERC721RaribleMinimalBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x74e682f5c26cd1290987e53ce368b9a908a7b674f329395a413cc95ff88588b0\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220d014740003730a299f6764ded32cc405512e8bcd1542564d586c837fcf41383264736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220d014740003730a299f6764ded32cc405512e8bcd1542564d586c837fcf41383264736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5276, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6331, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2.json new file mode 100644 index 000000000..ed2e924be --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2.json @@ -0,0 +1,1239 @@ +{ + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "transactionIndex": 1, + "gasUsed": "928840", + "logsBloom": "0x00000000000000000000000000000000400000000000000080800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010001000000000000000000008000000000000000021000000000000000000800000000800000000000000000000000400000000000000000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000200000000000000000800020000000000000000000000000000000000400000000000000000020000000000000000000000000000000000000000000040000000000000000000000", + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da", + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000091286fbc258befd2faf076ef9526b0a80b4f6ffc" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + }, + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + }, + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 2, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + } + ], + "blockNumber": 446383, + "cumulativeGasUsed": "972667", + "status": 1, + "byzantium": true + }, + "args": [ + "0x91286fbc258bEfd2fAf076Ef9526B0A80B4F6ffc", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x1372a625000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20000000000000000000000000bcd37b7548c35d5bb9703f5e40a59d082876809e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa99fb829e51e0213651c822eb18fefa36a5510f" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ExchangeV2_init", + "args": [ + "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "0xbcD37B7548c35d5bb9703F5e40a59D082876809E", + 0, + "0x0000000000000000000000000000000000000000", + "0xFA99fB829e51E0213651c822eB18feFa36A5510F" + ] + }, + "implementation": "0x91286fbc258bEfd2fAf076Ef9526B0A80B4F6ffc", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Implementation.json new file mode 100644 index 000000000..677513ac0 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Implementation.json @@ -0,0 +1,1329 @@ +{ + "address": "0x91286fbc258bEfd2fAf076Ef9526B0A80B4F6ffc", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xd7ac488469c12022f894fc69df40b22c006737a3ff138bed096b9f95e8a442b0", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x91286fbc258bEfd2fAf076Ef9526B0A80B4F6ffc", + "transactionIndex": 1, + "gasUsed": "5109603", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xdf2a8c652435f93de41f0b896ad1fb0b9f19b8a49d7ad0e5b60e1509ba4e55b8", + "transactionHash": "0xd7ac488469c12022f894fc69df40b22c006737a3ff138bed096b9f95e8a442b0", + "logs": [], + "blockNumber": 446378, + "cumulativeGasUsed": "5153430", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":\"ExchangeMetaV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n}\\n\",\"keccak256\":\"0xb39016abefc3e1794ff3db48e349fe36bf32eaf04f9d9b6be506ca19af312a20\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker,\\n protocolFeeEnabled: leftOrderData.protocolFeeEnabled\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker,\\n protocolFeeEnabled: rightOrderData.protocolFeeEnabled\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xa93d432fd4012eb69625b23fc71744f0d28dbb1acf58165b68647beb18f5baa2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n bool protocolFeeEnabled;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n dataOrder.protocolFeeEnabled = false;\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == LibOrderDataV3.V3) {\\n LibOrderDataV3.DataV3 memory data = abi.decode(order.data, (LibOrderDataV3.DataV3));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n dataOrder.protocolFeeEnabled = true;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x7ade2e0f39574183261011013a7eebe7a06abad9b8585e48d132a4579c2334bc\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3 = bytes4(keccak256(\\\"V3\\\"));\\n\\n struct DataV3 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n}\\n\",\"keccak256\":\"0x73efab7636308c9dbc8dd54db91535dd0f8915624ffe1547f545f5ba617dc126\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n uint buyerProtocolFee = paymentSide.protocolFeeEnabled ? _protocolFee.buyerAmount : 0;\\n uint sellerProtocolFee = nftSide.protocolFeeEnabled ? _protocolFee.sellerAmount : 0;\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, buyerProtocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, buyerProtocolFee + sellerProtocolFee, _protocolFee.receiver, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n /**\\n @notice transfers protocol fee to protocol fee receiver\\n */\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n uint protocolFeeTotal,\\n address protocolFeeReceiver,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, protocolFeeTotal);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, protocolFeeReceiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param buyerProtocolFee buyer protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n uint buyerProtocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = buyerProtocolFee;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x26817b8e94229124aa1298725cc122d23ee26ca5d63effc935910aa962fe4a83\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n bool protocolFeeEnabled;\\n }\\n}\\n\",\"keccak256\":\"0xa547c45c10324eb0ffa9bcc246406a88f9a07cbf198c5df5832544f27495b0e3\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615b6c80620000216000396000f3fe60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102f2578063e2864fe314610312578063e99a3f8014610332578063eae3ad6f14610345578063f2fde38b146103655761011f565b80638da5cb5b14610259578063b0e21e8a1461026e578063b39deb4614610292578063b74c8e9a146102b2578063bc158c2d146102d25761011f565b806330c642f1116100e757806330c642f1146101cf5780633be89922146101ef57806367d49a3b1461020f5780636d8f069414610222578063715018a6146102445761011f565b80630c53c51c146101245780630d5f7d351461014d5780631372a6251461016257806320158c44146101825780632d0335ab146101af575b600080fd5b610137610132366004614f91565b610385565b60405161014491906154ab565b60405180910390f35b61016061015b3660046150f9565b6106fe565b005b34801561016e57600080fd5b5061016061017d366004614f2a565b610a1b565b34801561018e57600080fd5b506101a261019d36600461508d565b610b38565b6040516101449190615487565b3480156101bb57600080fd5b506101a26101ca366004614cd5565b610b4b565b3480156101db57600080fd5b506101606101ea3660046150c1565b610b67565b3480156101fb57600080fd5b5061016061020a366004614cd5565b610c37565b61016061021d3660046150f9565b610cbc565b34801561022e57600080fd5b50610237610f9c565b60405161014491906153bb565b34801561025057600080fd5b50610160610fac565b34801561026557600080fd5b50610237611058565b34801561027a57600080fd5b50610283611068565b6040516101449392919061545e565b34801561029e57600080fd5b506101606102ad3660046150c1565b611093565b3480156102be57600080fd5b506101606102cd366004614ffd565b611157565b3480156102de57600080fd5b506101606102ed366004614cd5565b6111d9565b3480156102fe57600080fd5b5061016061030d36600461534d565b6112a6565b34801561031e57600080fd5b5061016061032d366004615274565b611380565b6101606103403660046152a6565b611441565b34801561035157600080fd5b5061016061036036600461534d565b611457565b34801561037157600080fd5b50610160610380366004614cd5565b61152e565b6060600061039286611631565b90506000356001600160e01b031990811690821614156103f9576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526101936020908152908490205483528201529081018790526104378882888888611651565b6104725760405162461bcd60e51b8152600401808060200182810382526021815260200180615b166021913960400191505060405180910390fd5b6001600160a01b0388166000908152610193602052604090205461049790600161173b565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106105025780518252601f1990920191602091820191016104e3565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105785780518252601f199092019160209182019101610559565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b509150915081610636576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106b557818101518382015260200161069d565b50505050905090810190601f1680156106e25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061071861071360c0840160a08501614cd5565b61179e565b604080516101208101909152909150600090806107386020860186614cd5565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061076f91906150a5565b6001600160e01b031916815260200161078b60608a018a6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161082e610140860161012087016150a5565b6001600160e01b031916815260200161084b6101408601866158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050604080516101208101825282815281518083018352878152610180890135602082810191909152820152808201839052815160808101835294955091939192506060808401929182918282019182916108df91908c01908c016150a5565b6001600160e01b03191681526020016108fb60608b018b6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161096a610140870161012088016150a5565b6001600160e01b03191681526020016109876101c08701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a0b826109d16101608701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180192505050565b610a158282611818565b50505050565b600054610100900460ff1680610a345750610a34611a82565b80610a42575060005460ff16155b610a7d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015610aa8576000805460ff1961ff0019909116610100171660011790555b610ab0611a93565b610ab8611b35565b610ac0611c2e565b610b096040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611cfe565b610b138686611d8e565b610b1e848484611e38565b8015610b30576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b6001600160a01b03166000908152610193602052604090205490565b610b6f611ef8565b6001600160a01b0316610b80611058565b6001600160a01b031614610bc9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610c2b9084906153bb565b60405180910390a25050565b610c3f611ef8565b6001600160a01b0316610c50611058565b6001600160a01b031614610c99576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd161071360c0840160a08501614cd5565b60408051610120810190915290915060009080610cf16020860186614cd5565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610d5691906150a5565b6001600160e01b0319168152602001610d7260608a018a6158b0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610ded610140860161012087016150a5565b6001600160e01b0319168152602001610e0a6101408601866158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610e7c9060608c01908c016150a5565b6001600160e01b0319168152602001610e9860608b018b6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610f2b610140870161012088016150a5565b6001600160e01b0319168152602001610f486101c08701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610f92826109d16101608701876158b0565b610a158183611818565b610162546001600160a01b031681565b610fb4611ef8565b6001600160a01b0316610fc5611058565b6001600160a01b03161461100e576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b61109b611ef8565b6001600160a01b03166110ac611058565b6001600160a01b0316146110f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610c2b9084906153bb565b61115f611ef8565b6001600160a01b0316611170611058565b6001600160a01b0316146111b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6111c2836111d9565b6111cb826112a6565b6111d481611457565b505050565b6111e1611ef8565b6001600160a01b03166111f2611058565b6001600160a01b03161461123b576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd039161127b916001600160a01b039091169084906153cf565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b6112ae611ef8565b6001600160a01b03166112bf611058565b6001600160a01b031614611308576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161134d91600160a01b90910465ffffffffffff16908490615897565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611393611ef8565b6001600160a01b0316146113c25760405162461bcd60e51b81526004016113b990615807565b60405180910390fd5b60808101516113e35760405162461bcd60e51b81526004016113b990615599565b60006113ee82611f07565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611435908390615487565b60405180910390a15050565b61144d8484848461208f565b610a158483611818565b61145f611ef8565b6001600160a01b0316611470611058565b6001600160a01b0316146114b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916114fe91600160d01b90910465ffffffffffff16908490615897565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b611536611ef8565b6001600160a01b0316611547611058565b6001600160a01b031614611590576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160a01b0381166115d55760405162461bcd60e51b81526004018080602001828103825260268152602001806159f06026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156116455750600061164c565b5060208101515b919050565b60008060016116676116628861215b565b6121de565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116be573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661171a576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611795576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6117a661482e565b6117ae61482e565b6001600160a01b0383166117cb576355575f5d60e11b8152611798565b6322ba176160e21b81526040516117e69084906020016153bb565b60408051601f19818403018152919052602082015292915050565b61180a8261222a565b61181482826122f4565b5050565b60008061182584846125a3565b915091506000806000611838878761263c565b9250925092506000806119a96040518060c0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152602001876060015115158152506040518060c0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152602001876060015115158152506119a48a600001518a600001516126eb565b6127bc565b885191935091506001600160e01b0319166355575f5d60e11b1415611a285785516001600160e01b0319166355575f5d60e11b14156119e757600080fd5b81341015611a075760405162461bcd60e51b81526004016113b9906157df565b81341115611a2357611a23611a1c3484612933565b3390612990565b611a77565b85516001600160e01b0319166355575f5d60e11b1415611a775780341015611a625760405162461bcd60e51b81526004016113b9906157df565b80341115611a7757611a77611a1c3483612933565b505050505050505050565b6000611a8d30612a28565b15905090565b600054610100900460ff1680611aac5750611aac611a82565b80611aba575060005460ff16155b611af55760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611b20576000805460ff1961ff0019909116610100171660011790555b8015611b32576000805461ff00191690555b50565b600054610100900460ff1680611b4e5750611b4e611a82565b80611b5c575060005460ff16155b611b975760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611bc2576000805460ff1961ff0019909116610100171660011790555b6000611bcc611ef8565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611b32576000805461ff001916905550565b600054610100900460ff1680611c475750611c47611a82565b80611c55575060005460ff16155b611c905760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611cbb576000805460ff1961ff0019909116610100171660011790555b611b206040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612a2e565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611d38612aee565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611e515750611e51611a82565b80611e5f575060005460ff16155b611e9a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611ec5576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a15576000805461ff001916905550505050565b6000611f02612af8565b905090565b60e08101516000906001600160e01b031916632611a13360e11b1480611f3b575060e08201516001600160e01b0319908116145b15611fb0578151602083015151611f5190612b54565b606084015151611f6090612b54565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061164c565b8151602083015151611fc190612b54565b606084015151611fd090612b54565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561203c578181015183820152602001612024565b50505050905090810190601f1680156120695780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061164c565b6120998484611801565b6120a38282611801565b60408401516001600160a01b0316156120ff5781516001600160a01b0316156120ff5783604001516001600160a01b031682600001516001600160a01b0316146120ff5760405162461bcd60e51b81526004016113b99061579c565b60408201516001600160a01b031615610a155783516001600160a01b031615610a155783600001516001600160a01b031682604001516001600160a01b031614610a155760405162461bcd60e51b81526004016113b99061560b565b60006040518060800160405280604381526020016159ad60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006121e8612bbe565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a0810151158061223e5750428160a00151105b61228f576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806122a35750428160c00151115b611b32576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516123795781516001600160a01b0316156123745781516001600160a01b0316612320611ef8565b6001600160a01b031614612374576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611814565b81516001600160a01b031661238c611ef8565b6001600160a01b0316146118145760006123a583612bc5565b90506123bd83600001516001600160a01b0316612a28565b156124f9578251630b135d3f60e11b906001600160a01b0316631626ba7e6123e484612cb5565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561243757818101518382015260200161241f565b50505050905090810190601f1680156124645780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d60208110156124ac57600080fd5b50516001600160e01b031916146124f45760405162461bcd60e51b815260040180806020018281038252602b815260200180615a5a602b913960400191505060405180910390fd5b6111d4565b82516001600160a01b03166125178361251184612cb5565b90612cbf565b6001600160a01b03161461255c5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a386022913960400191505060405180910390fd5b82516001600160a01b03166111d4576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b6125ab61482e565b6125b361482e565b6020840151516060840151516125c99190612d3f565b80519092506001600160e01b0319166125f45760405162461bcd60e51b81526004016113b990615770565b60608401515160208401515161260a9190612d3f565b80519091506001600160e01b0319166126355760405162461bcd60e51b81526004016113b990615770565b9250929050565b612644614846565b61264c614846565b612654614872565b600061265f86611f07565b9050600061266c86611f07565b90506000612678611ef8565b88519091506001600160a01b0316612697576001600160a01b03811688525b86516001600160a01b03166126b3576001600160a01b03811687525b6126bc88612d7f565b95506126c787612d7f565b94506126df888885858a604001518a60400151612ede565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561270e57506001611798565b6001600160e01b031982166355575f5d60e11b141561272f57506002611798565b6001600160e01b031983166322ba176160e21b141561275057506001611798565b6001600160e01b031982166322ba176160e21b141561277157506002611798565b6001600160e01b0319831663025ceed960e61b141561279257506001611798565b6001600160e01b0319821663025ceed960e61b14156127b357506002611798565b50600092915050565b825160209081015183519091015160018360028111156127d857fe5b141561285a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261282a9086908690613099565b915061285584600001516000015185600001516020015186608001518860200151886060015161335a565b61292b565b600283600281111561286857fe5b14156128e55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526128ba9085908790613099565b905061285585600001516000015186600001516020015187608001518760200151896060015161335a565b84518051602091820151608088015192870151606089015161290894919061335a565b83518051602091820151608087015192880151606088015161292b94919061335a565b935093915050565b60008282111561298a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146129db576040519150601f19603f3d011682016040523d82523d6000602084013e6129e0565b606091505b50509050806111d4576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612a475750612a47611a82565b80612a55575060005460ff16155b612a905760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015612abb576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca5580156111d4576000805461ff0019169055505050565b6000611f026134de565b600033301415612b4f57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506110659050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612bfa84602001516134e2565b8460400151612c0c86606001516134e2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b60006121e8613552565b60008151604114612d17576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612d358682858561358d565b9695505050505050565b612d4761482e565b6000612d5384846137e3565b80519091506001600160e01b031916612d7857612d7083856137e3565b915050611798565b9050611798565b612d87614846565b6000606082015260e08201516001600160e01b031916632611a13360e11b1415612dda576000826101000151806020019051810190612dc691906151b6565b805183526020908101519083015250612ec5565b60e08201516001600160e01b0319166323d235ef60e01b1415612e32576000826101000151806020019051810190612e129190615242565b805183526020808201519084015260409081015115159083015250612ec5565b60e08201516001600160e01b03191663256f2a6560e11b1415612e91576000826101000151806020019051810190612e6a9190615242565b80518352602080820151908401526040908101511515908301525060016060820152612ec5565b60e08201516001600160e01b03199081161415612ead57612ec5565b60405162461bcd60e51b81526004016113b990615702565b80515161164c578151612ed7906139ff565b8152919050565b612ee6614872565b6000612ef6886080015187613a9a565b90506000612f08886080015187613a9a565b90506000612f1a8a8a85858a8a613abf565b90508960200151602001516000141580612f3b575060608901516020015115155b15612f5e578051612f5e5760405162461bcd60e51b81526004016113b99061567b565b60608a015160200151151580612f7a57506020808a0151015115155b15612fa3576000816020015111612fa35760405162461bcd60e51b81526004016113b99061567b565b60808a015115612ff6578515612fd5578051612fc090849061173b565b600089815261012f6020526040902055612ff6565b6020810151612fe590849061173b565b600089815261012f60205260409020555b60808901511561304957841561302b57602081015161301690839061173b565b600088815261012f6020526040902055613049565b805161303890839061173b565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092613084928c928c929190615490565b60405180910390a19998505050505050505050565b6000808460a001516130ac5760006130b2565b82602001515b65ffffffffffff16905060008460a001516130ce5760006130d4565b83604001515b65ffffffffffff1690506130f5866000015160200151838860400151613b58565b8651602081015160808901518751925160608b0151949750600094613121948994939289890192613bf8565b875180518851516020808b015193015160808c015160608d015195965061314f959394929387929190613c42565b9050866040015151600114801561316b57508560400151516001145b80156131c05750866040015160008151811061318357fe5b6020026020010151600001516001600160a01b031686604001516000815181106131a957fe5b6020026020010151600001516001600160a01b0316145b156132d657604080516001808252818301909252600091816020015b6131e461488c565b8152602001906001900390816131dc579050509050866040015160008151811061320a57fe5b6020026020010151600001518160008151811061322357fe5b60209081029190910101516001600160a01b0390911690526040880151805160009061324b57fe5b602002602001015160200151876040015160008151811061326857fe5b602002602001015160200151018160008151811061328257fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506132cc886000015160000151838a6000015160200151848c608001518d60600151613d45565b50915061332f9050565b613300876000015160000151828960000151602001518a604001518b608001518c60600151613d45565b5087518051602090910151604089015160808b015160608c015194955061332b948693929190613d45565b5090505b61335087600001516000015182896080015189602001518b6060015161335a565b5050509392505050565b600082511161337b5760405162461bcd60e51b81526004016113b9906155c7565b600084815b600185510381101561344a5760006133c186838151811061339d57fe5b6020026020010151602001516001600160601b031689613dfa90919063ffffffff16565b90506133f68683815181106133d257fe5b6020026020010151602001516001600160601b03168561173b90919063ffffffff16565b93508015613441576134088382612933565b925061344160405180604001604052808b8152602001838152508888858151811061342f57fe5b60200260200101516000015188613e12565b50600101613380565b5060008460018651038151811061345d57fe5b6020026020010151905061348781602001516001600160601b03168461173b90919063ffffffff16565b925082612710146134aa5760405162461bcd60e51b81526004016113b990615739565b81156134d4576134d460405180604001604052808a81526020018481525087836000015187613e12565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135128360000151612b54565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000611f027f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61358061421a565b613588614220565b614226565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156135ee5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a166022913960400191505060405180910390fd5b6000601e8560ff1611156136c8576004850360ff16601b148061361757506004850360ff16601c145b6136525760405162461bcd60e51b8152600401808060200182810382526022815260200180615ab36022913960400191505060405180910390fd5b600161365d87614288565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156136b7573d6000803e3d6000fd5b50505060206040510351905061377f565b8460ff16601b14806136dd57508460ff16601c145b6137185760405162461bcd60e51b8152600401808060200182810382526022815260200180615ab36022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613772573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166137da576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6137eb61482e565b825182516001600160e01b031982166355575f5d60e11b1415613856576001600160e01b031981166355575f5d60e11b141561382b578492505050611798565b5050604080518082018252600080825282516020818101909452908152918101919091529050611798565b6001600160e01b031982166322ba176160e21b141561389b576001600160e01b031981166322ba176160e21b141561382b5761389285856142d9565b92505050611798565b6001600160e01b031982166339d690a360e11b14156138d7576001600160e01b031981166339d690a360e11b141561382b5761389285856142d9565b6001600160e01b0319821663025ceed960e61b1415613913576001600160e01b0319811663025ceed960e61b141561382b5761389285856142d9565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156139c8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb09061396a908990899060040161582c565b60006040518083038186803b15801561398257600080fd5b505afa158015613996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139be919081019061512b565b9350505050611798565b6001600160e01b031983811690831614156139e7576139be86866142d9565b60405162461bcd60e51b81526004016113b99061552b565b60408051600180825281830190925260609160009190816020015b613a2261488c565b815260200190600190039081613a1a5790505090508281600081518110613a4557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613a7957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613aa957506000611798565b50600090815261012f6020526040902054919050565b613ac7614872565b600080613ad5898887614336565b91509150600080613ae78a8988614336565b9150915083811180613b0157508381148015613b01575083155b15613b2d57613b2284848c60200151602001518d60600151602001516143af565b945050505050612d35565b613b498b60200151602001518c60600151602001518484614434565b9b9a5050505050505050505050565b600082815b8351811015613bd857612710848281518110613b7557fe5b6020026020010151602001516001600160601b03161115613ba85760405162461bcd60e51b81526004016113b9906156d3565b838181518110613bb457fe5b6020026020010151602001516001600160601b031682019150806001019050613b5d565b50613bed613be68683613dfa565b869061173b565b9150505b9392505050565b6000806000613c088a8a896144ba565b90925090508015613c3357613c33604051806040016040528087815260200183815250898887613e12565b5090505b979650505050505050565b600080613c4e886144dc565b905080516001148015613c62575086516001145b8015613caf575086600081518110613c7657fe5b6020026020010151600001516001600160a01b031681600081518110613c9857fe5b6020026020010151600001516001600160a01b0316145b15613d005761138881600081518110613cc457fe5b6020026020010151602001516001600160601b03161115613cf75760405162461bcd60e51b81526004016113b990615562565b85915050613c37565b600080613d118b8989868a8a613d45565b91509150611388811115613d375760405162461bcd60e51b81526004016113b990615562565b509998505050505050505050565b846000805b8551811015613dee57613d86868281518110613d6257fe5b6020026020010151602001516001600160601b03168361173b90919063ffffffff16565b91506000613db58489898581518110613d9b57fe5b6020026020010151602001516001600160601b03166144ba565b90945090508015613de557613de560405180604001604052808c8152602001838152508789858151811061342f57fe5b50600101613d4a565b50965096945050505050565b6000611795612710613e0c8585614651565b906146aa565b8351516001600160e01b0319166339d690a360e11b1415613f5857600080856000015160200151806020019051810190613e4c9190614efd565b915091508560200151600114613e745760405162461bcd60e51b81526004016113b99061564f565b6001600160a01b038516301415613eec57604051632142170760e11b81526001600160a01b038316906342842e0e90613eb5903090889086906004016153e9565b600060405180830381600087803b158015613ecf57600080fd5b505af1158015613ee3573d6000803e3d6000fd5b50505050613f51565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690613f1e908590899089908790600401615501565b600060405180830381600087803b158015613f3857600080fd5b505af1158015613f4c573d6000803e3d6000fd5b505050505b5050610a15565b8351516001600160e01b0319166322ba176160e21b14156140b6576000846000015160200151806020019051810190613f919190614cf1565b90506001600160a01b03841630141561404857602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613fd5918791600401615445565b602060405180830381600087803b158015613fef57600080fd5b505af1158015614003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140279190615073565b6140435760405162461bcd60e51b81526004016113b9906156a4565b6140b0565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161407d91859189918991600401615501565b600060405180830381600087803b15801561409757600080fd5b505af11580156140ab573d6000803e3d6000fd5b505050505b50610a15565b8351516001600160e01b03191663025ceed960e61b1415614173576000808560000151602001518060200190518101906140f09190614efd565b90925090506001600160a01b03851630141561413b576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613eb59130918991879160040161540d565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee991613f1e9186918a918a918891906004016154be565b8351516001600160e01b0319166355575f5d60e11b14156141bc576001600160a01b03821630146141b75760208401516141b7906001600160a01b03841690612990565b610a15565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906141ec90879087908790600401615851565b600060405180830381600087803b15801561420657600080fd5b505af11580156134d4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836142336134de565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6142e161482e565b6020808401518051908201208382015180519201919091208082141561430b578492505050611798565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156143755760208086015101516143519085612933565b915061436e85606001516020015186602001516020015184614711565b905061292b565b6060850151602001516143889085612933565b90506143a585602001516020015186606001516020015183614711565b9150935093915050565b6143b7614872565b60006143c4858585614711565b90508581111561441b576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61443c614872565b6000614449838787614711565b9050838111156144a0576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806144d0856144cb8686613dfa565b614777565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614510575081516001600160e01b0319166339d690a360e11b145b156145c65760008083602001518060200190518101906145309190614efd565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a906145679085908590600401615445565b600060405180830381600087803b15801561458157600080fd5b505af1158015614595573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145bd9190810190615041565b9250505061164c565b81516001600160e01b03191662737ea960e61b141561460757600082602001518060200190518101906145f99190614d0d565b60800151925061164c915050565b81516001600160e01b03191663d8f960c160e01b1415614649576000826020015180602001905181019061463b9190614e0a565b60600151925061164c915050565b506060919050565b60008261466057506000611798565b8282028284828161466d57fe5b04146117955760405162461bcd60e51b8152600401808060200182810382526021815260200180615ad56021913960400191505060405180910390fd5b6000808211614700576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161470957fe5b049392505050565b600061471e84848461479f565b15614761576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61476f83613e0c8685614651565b949350505050565b600080828411156147965761478c8484612933565b9150829050612635565b50600093915050565b6000826147e6576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806147f1575083155b156147fe57506000613bf1565b6000838061480857fe5b85840990506148178584614651565b614823826103e8614651565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806080016040528060608152602001606081526020016000151581526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561164c81615981565b600082601f8301126148be578081fd5b815160206148d36148ce83615917565b6158f4565b82815281810190858301855b85811015614908576148f6898684518b0101614a37565b845292840192908401906001016148df565b5090979650505050505050565b600082601f830112614925578081fd5b815160206149356148ce83615917565b82815281810190858301604080860288018501891015614953578687fd5b865b868110156149c25781838b03121561496b578788fd5b81518281018181106001600160401b038211171561498557fe5b8352835161499281615981565b8152838701516001600160601b03811681146149ac57898afd5b8188015285529385019391810191600101614955565b509198975050505050505050565b8051801515811461164c57600080fd5b803561164c81615996565b600082601f8301126149fb578081fd5b8135614a096148ce82615934565b818152846020838601011115614a1d578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614a47578081fd5b8151614a556148ce82615934565b818152846020838601011115614a69578283fd5b61476f826020830160208701615955565b60006101e08284031215614a8c578081fd5b50919050565b60006040808385031215614aa4578182fd5b80518181016001600160401b038282108183111715614abf57fe5b818452829450853581811115614ad457600080fd5b8601808803851315614ae557600080fd5b608084018381108382111715614af757fe5b909452833593614b0685615996565b93825260208401359381851115614b1c57600080fd5b614b28888683016149eb565b60608501525050815260209384013593019290925292915050565b600060608284031215614b54578081fd5b604051606081016001600160401b038282108183111715614b7157fe5b816040528293508451915080821115614b8957600080fd5b614b9586838701614915565b83526020850151915080821115614bab57600080fd5b50614bb885828601614915565b602083015250614bca604084016149d0565b60408201525092915050565b6000610120808385031215614be9578182fd5b614bf2816158f4565b915050614bfe826148a3565b815260208201356001600160401b0380821115614c1a57600080fd5b614c2685838601614a92565b6020840152614c37604085016148a3565b60408401526060840135915080821115614c5057600080fd5b614c5c85838601614a92565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614c8b60e085016149e0565b60e084015261010091508184013581811115614ca657600080fd5b614cb2868287016149eb565b8385015250505092915050565b803565ffffffffffff8116811461164c57600080fd5b600060208284031215614ce6578081fd5b813561179581615981565b600060208284031215614d02578081fd5b815161179581615981565b60008060408385031215614d1f578081fd5b8251614d2a81615981565b60208401519092506001600160401b0380821115614d46578283fd5b9084019060c08287031215614d59578283fd5b614d6360c06158f4565b82518152602083015182811115614d78578485fd5b614d8488828601614a37565b60208301525060408301516040820152606083015182811115614da5578485fd5b614db188828601614915565b606083015250608083015182811115614dc8578485fd5b614dd488828601614915565b60808301525060a083015182811115614deb578485fd5b614df7888286016148ae565b60a0830152508093505050509250929050565b60008060408385031215614e1c578182fd5b8251614e2781615981565b60208401519092506001600160401b0380821115614e43578283fd5b9084019060a08287031215614e56578283fd5b614e6060a06158f4565b82518152602083015182811115614e75578485fd5b614e8188828601614a37565b602083015250604083015182811115614e98578485fd5b614ea488828601614915565b604083015250606083015182811115614ebb578485fd5b614ec788828601614915565b606083015250608083015182811115614ede578485fd5b614eea888286016148ae565b6080830152508093505050509250929050565b60008060408385031215614f0f578182fd5b8251614f1a81615981565b6020939093015192949293505050565b600080600080600060a08688031215614f41578081fd5b8535614f4c81615981565b94506020860135614f5c81615981565b9350604086013592506060860135614f7381615981565b91506080860135614f8381615981565b809150509295509295909350565b600080600080600060a08688031215614fa8578283fd5b8535614fb381615981565b945060208601356001600160401b03811115614fcd578384fd5b614fd9888289016149eb565b9450506040860135925060608601359150608086013560ff81168114614f83578182fd5b600080600060608486031215615011578081fd5b833561501c81615981565b925061502a60208501614cbf565b915061503860408501614cbf565b90509250925092565b600060208284031215615052578081fd5b81516001600160401b03811115615067578182fd5b61476f84828501614915565b600060208284031215615084578081fd5b611795826149d0565b60006020828403121561509e578081fd5b5035919050565b6000602082840312156150b6578081fd5b813561179581615996565b600080604083850312156150d3578182fd5b82356150de81615996565b915060208301356150ee81615981565b809150509250929050565b60006020828403121561510a578081fd5b81356001600160401b0381111561511f578182fd5b61476f84828501614a7a565b60006020828403121561513c578081fd5b81516001600160401b0380821115615152578283fd5b9083019060408286031215615165578283fd5b60405160408101818110838211171561517a57fe5b604052825161518881615996565b815260208301518281111561519b578485fd5b6151a787828601614a37565b60208301525095945050505050565b6000602082840312156151c7578081fd5b81516001600160401b03808211156151dd578283fd5b90830190604082860312156151f0578283fd5b60405160408101818110838211171561520557fe5b604052825182811115615216578485fd5b61522287828601614915565b825250602083015182811115615236578485fd5b6151a787828601614915565b600060208284031215615253578081fd5b81516001600160401b03811115615268578182fd5b61476f84828501614b43565b600060208284031215615285578081fd5b81356001600160401b0381111561529a578182fd5b61476f84828501614bd6565b600080600080608085870312156152bb578182fd5b84356001600160401b03808211156152d1578384fd5b6152dd88838901614bd6565b955060208701359150808211156152f2578384fd5b6152fe888389016149eb565b94506040870135915080821115615313578384fd5b61531f88838901614bd6565b93506060870135915080821115615334578283fd5b50615341878288016149eb565b91505092959194509250565b60006020828403121561535e578081fd5b61179582614cbf565b6000815180845261537f816020860160208601615955565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261476f6040850182615367565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6000602082526117956020830184615367565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261583f6040830185615393565b8281036020840152613bed8185615393565b60006060825284516040606084015261586d60a0840182615393565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126158c6578283fd5b8301803591506001600160401b038211156158df578283fd5b60200191503681900382131561263557600080fd5b6040518181016001600160401b038111828210171561590f57fe5b604052919050565b60006001600160401b0382111561592a57fe5b5060209081020190565b60006001600160401b0382111561594757fe5b50601f01601f191660200190565b60005b83811015615970578181015183820152602001615958565b83811115610a155750506000910152565b6001600160a01b0381168114611b3257600080fd5b6001600160e01b031981168114611b3257600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220d27ecddf6dc922ec759fd1009325766bdd3bf64fa8da52596fe45fd60d28e48964736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102f2578063e2864fe314610312578063e99a3f8014610332578063eae3ad6f14610345578063f2fde38b146103655761011f565b80638da5cb5b14610259578063b0e21e8a1461026e578063b39deb4614610292578063b74c8e9a146102b2578063bc158c2d146102d25761011f565b806330c642f1116100e757806330c642f1146101cf5780633be89922146101ef57806367d49a3b1461020f5780636d8f069414610222578063715018a6146102445761011f565b80630c53c51c146101245780630d5f7d351461014d5780631372a6251461016257806320158c44146101825780632d0335ab146101af575b600080fd5b610137610132366004614f91565b610385565b60405161014491906154ab565b60405180910390f35b61016061015b3660046150f9565b6106fe565b005b34801561016e57600080fd5b5061016061017d366004614f2a565b610a1b565b34801561018e57600080fd5b506101a261019d36600461508d565b610b38565b6040516101449190615487565b3480156101bb57600080fd5b506101a26101ca366004614cd5565b610b4b565b3480156101db57600080fd5b506101606101ea3660046150c1565b610b67565b3480156101fb57600080fd5b5061016061020a366004614cd5565b610c37565b61016061021d3660046150f9565b610cbc565b34801561022e57600080fd5b50610237610f9c565b60405161014491906153bb565b34801561025057600080fd5b50610160610fac565b34801561026557600080fd5b50610237611058565b34801561027a57600080fd5b50610283611068565b6040516101449392919061545e565b34801561029e57600080fd5b506101606102ad3660046150c1565b611093565b3480156102be57600080fd5b506101606102cd366004614ffd565b611157565b3480156102de57600080fd5b506101606102ed366004614cd5565b6111d9565b3480156102fe57600080fd5b5061016061030d36600461534d565b6112a6565b34801561031e57600080fd5b5061016061032d366004615274565b611380565b6101606103403660046152a6565b611441565b34801561035157600080fd5b5061016061036036600461534d565b611457565b34801561037157600080fd5b50610160610380366004614cd5565b61152e565b6060600061039286611631565b90506000356001600160e01b031990811690821614156103f9576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526101936020908152908490205483528201529081018790526104378882888888611651565b6104725760405162461bcd60e51b8152600401808060200182810382526021815260200180615b166021913960400191505060405180910390fd5b6001600160a01b0388166000908152610193602052604090205461049790600161173b565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106105025780518252601f1990920191602091820191016104e3565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105785780518252601f199092019160209182019101610559565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b509150915081610636576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106b557818101518382015260200161069d565b50505050905090810190601f1680156106e25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061071861071360c0840160a08501614cd5565b61179e565b604080516101208101909152909150600090806107386020860186614cd5565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061076f91906150a5565b6001600160e01b031916815260200161078b60608a018a6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161082e610140860161012087016150a5565b6001600160e01b031916815260200161084b6101408601866158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050604080516101208101825282815281518083018352878152610180890135602082810191909152820152808201839052815160808101835294955091939192506060808401929182918282019182916108df91908c01908c016150a5565b6001600160e01b03191681526020016108fb60608b018b6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161096a610140870161012088016150a5565b6001600160e01b03191681526020016109876101c08701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a0b826109d16101608701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180192505050565b610a158282611818565b50505050565b600054610100900460ff1680610a345750610a34611a82565b80610a42575060005460ff16155b610a7d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015610aa8576000805460ff1961ff0019909116610100171660011790555b610ab0611a93565b610ab8611b35565b610ac0611c2e565b610b096040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611cfe565b610b138686611d8e565b610b1e848484611e38565b8015610b30576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b6001600160a01b03166000908152610193602052604090205490565b610b6f611ef8565b6001600160a01b0316610b80611058565b6001600160a01b031614610bc9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610c2b9084906153bb565b60405180910390a25050565b610c3f611ef8565b6001600160a01b0316610c50611058565b6001600160a01b031614610c99576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd161071360c0840160a08501614cd5565b60408051610120810190915290915060009080610cf16020860186614cd5565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610d5691906150a5565b6001600160e01b0319168152602001610d7260608a018a6158b0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610ded610140860161012087016150a5565b6001600160e01b0319168152602001610e0a6101408601866158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610e7c9060608c01908c016150a5565b6001600160e01b0319168152602001610e9860608b018b6158b0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610f2b610140870161012088016150a5565b6001600160e01b0319168152602001610f486101c08701876158b0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610f92826109d16101608701876158b0565b610a158183611818565b610162546001600160a01b031681565b610fb4611ef8565b6001600160a01b0316610fc5611058565b6001600160a01b03161461100e576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b61109b611ef8565b6001600160a01b03166110ac611058565b6001600160a01b0316146110f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610c2b9084906153bb565b61115f611ef8565b6001600160a01b0316611170611058565b6001600160a01b0316146111b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6111c2836111d9565b6111cb826112a6565b6111d481611457565b505050565b6111e1611ef8565b6001600160a01b03166111f2611058565b6001600160a01b03161461123b576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd039161127b916001600160a01b039091169084906153cf565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b6112ae611ef8565b6001600160a01b03166112bf611058565b6001600160a01b031614611308576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161134d91600160a01b90910465ffffffffffff16908490615897565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611393611ef8565b6001600160a01b0316146113c25760405162461bcd60e51b81526004016113b990615807565b60405180910390fd5b60808101516113e35760405162461bcd60e51b81526004016113b990615599565b60006113ee82611f07565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611435908390615487565b60405180910390a15050565b61144d8484848461208f565b610a158483611818565b61145f611ef8565b6001600160a01b0316611470611058565b6001600160a01b0316146114b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916114fe91600160d01b90910465ffffffffffff16908490615897565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b611536611ef8565b6001600160a01b0316611547611058565b6001600160a01b031614611590576040805162461bcd60e51b81526020600482018190526024820152600080516020615af6833981519152604482015290519081900360640190fd5b6001600160a01b0381166115d55760405162461bcd60e51b81526004018080602001828103825260268152602001806159f06026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156116455750600061164c565b5060208101515b919050565b60008060016116676116628861215b565b6121de565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116be573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661171a576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611795576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6117a661482e565b6117ae61482e565b6001600160a01b0383166117cb576355575f5d60e11b8152611798565b6322ba176160e21b81526040516117e69084906020016153bb565b60408051601f19818403018152919052602082015292915050565b61180a8261222a565b61181482826122f4565b5050565b60008061182584846125a3565b915091506000806000611838878761263c565b9250925092506000806119a96040518060c0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152602001876060015115158152506040518060c0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152602001876060015115158152506119a48a600001518a600001516126eb565b6127bc565b885191935091506001600160e01b0319166355575f5d60e11b1415611a285785516001600160e01b0319166355575f5d60e11b14156119e757600080fd5b81341015611a075760405162461bcd60e51b81526004016113b9906157df565b81341115611a2357611a23611a1c3484612933565b3390612990565b611a77565b85516001600160e01b0319166355575f5d60e11b1415611a775780341015611a625760405162461bcd60e51b81526004016113b9906157df565b80341115611a7757611a77611a1c3483612933565b505050505050505050565b6000611a8d30612a28565b15905090565b600054610100900460ff1680611aac5750611aac611a82565b80611aba575060005460ff16155b611af55760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611b20576000805460ff1961ff0019909116610100171660011790555b8015611b32576000805461ff00191690555b50565b600054610100900460ff1680611b4e5750611b4e611a82565b80611b5c575060005460ff16155b611b975760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611bc2576000805460ff1961ff0019909116610100171660011790555b6000611bcc611ef8565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611b32576000805461ff001916905550565b600054610100900460ff1680611c475750611c47611a82565b80611c55575060005460ff16155b611c905760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611cbb576000805460ff1961ff0019909116610100171660011790555b611b206040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612a2e565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611d38612aee565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611e515750611e51611a82565b80611e5f575060005460ff16155b611e9a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015611ec5576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a15576000805461ff001916905550505050565b6000611f02612af8565b905090565b60e08101516000906001600160e01b031916632611a13360e11b1480611f3b575060e08201516001600160e01b0319908116145b15611fb0578151602083015151611f5190612b54565b606084015151611f6090612b54565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061164c565b8151602083015151611fc190612b54565b606084015151611fd090612b54565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561203c578181015183820152602001612024565b50505050905090810190601f1680156120695780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061164c565b6120998484611801565b6120a38282611801565b60408401516001600160a01b0316156120ff5781516001600160a01b0316156120ff5783604001516001600160a01b031682600001516001600160a01b0316146120ff5760405162461bcd60e51b81526004016113b99061579c565b60408201516001600160a01b031615610a155783516001600160a01b031615610a155783600001516001600160a01b031682604001516001600160a01b031614610a155760405162461bcd60e51b81526004016113b99061560b565b60006040518060800160405280604381526020016159ad60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006121e8612bbe565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a0810151158061223e5750428160a00151105b61228f576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806122a35750428160c00151115b611b32576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516123795781516001600160a01b0316156123745781516001600160a01b0316612320611ef8565b6001600160a01b031614612374576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611814565b81516001600160a01b031661238c611ef8565b6001600160a01b0316146118145760006123a583612bc5565b90506123bd83600001516001600160a01b0316612a28565b156124f9578251630b135d3f60e11b906001600160a01b0316631626ba7e6123e484612cb5565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561243757818101518382015260200161241f565b50505050905090810190601f1680156124645780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d60208110156124ac57600080fd5b50516001600160e01b031916146124f45760405162461bcd60e51b815260040180806020018281038252602b815260200180615a5a602b913960400191505060405180910390fd5b6111d4565b82516001600160a01b03166125178361251184612cb5565b90612cbf565b6001600160a01b03161461255c5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a386022913960400191505060405180910390fd5b82516001600160a01b03166111d4576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b6125ab61482e565b6125b361482e565b6020840151516060840151516125c99190612d3f565b80519092506001600160e01b0319166125f45760405162461bcd60e51b81526004016113b990615770565b60608401515160208401515161260a9190612d3f565b80519091506001600160e01b0319166126355760405162461bcd60e51b81526004016113b990615770565b9250929050565b612644614846565b61264c614846565b612654614872565b600061265f86611f07565b9050600061266c86611f07565b90506000612678611ef8565b88519091506001600160a01b0316612697576001600160a01b03811688525b86516001600160a01b03166126b3576001600160a01b03811687525b6126bc88612d7f565b95506126c787612d7f565b94506126df888885858a604001518a60400151612ede565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561270e57506001611798565b6001600160e01b031982166355575f5d60e11b141561272f57506002611798565b6001600160e01b031983166322ba176160e21b141561275057506001611798565b6001600160e01b031982166322ba176160e21b141561277157506002611798565b6001600160e01b0319831663025ceed960e61b141561279257506001611798565b6001600160e01b0319821663025ceed960e61b14156127b357506002611798565b50600092915050565b825160209081015183519091015160018360028111156127d857fe5b141561285a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261282a9086908690613099565b915061285584600001516000015185600001516020015186608001518860200151886060015161335a565b61292b565b600283600281111561286857fe5b14156128e55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526128ba9085908790613099565b905061285585600001516000015186600001516020015187608001518760200151896060015161335a565b84518051602091820151608088015192870151606089015161290894919061335a565b83518051602091820151608087015192880151606088015161292b94919061335a565b935093915050565b60008282111561298a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146129db576040519150601f19603f3d011682016040523d82523d6000602084013e6129e0565b606091505b50509050806111d4576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612a475750612a47611a82565b80612a55575060005460ff16155b612a905760405162461bcd60e51b815260040180806020018281038252602e815260200180615a85602e913960400191505060405180910390fd5b600054610100900460ff16158015612abb576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca5580156111d4576000805461ff0019169055505050565b6000611f026134de565b600033301415612b4f57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506110659050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612bfa84602001516134e2565b8460400151612c0c86606001516134e2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b60006121e8613552565b60008151604114612d17576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612d358682858561358d565b9695505050505050565b612d4761482e565b6000612d5384846137e3565b80519091506001600160e01b031916612d7857612d7083856137e3565b915050611798565b9050611798565b612d87614846565b6000606082015260e08201516001600160e01b031916632611a13360e11b1415612dda576000826101000151806020019051810190612dc691906151b6565b805183526020908101519083015250612ec5565b60e08201516001600160e01b0319166323d235ef60e01b1415612e32576000826101000151806020019051810190612e129190615242565b805183526020808201519084015260409081015115159083015250612ec5565b60e08201516001600160e01b03191663256f2a6560e11b1415612e91576000826101000151806020019051810190612e6a9190615242565b80518352602080820151908401526040908101511515908301525060016060820152612ec5565b60e08201516001600160e01b03199081161415612ead57612ec5565b60405162461bcd60e51b81526004016113b990615702565b80515161164c578151612ed7906139ff565b8152919050565b612ee6614872565b6000612ef6886080015187613a9a565b90506000612f08886080015187613a9a565b90506000612f1a8a8a85858a8a613abf565b90508960200151602001516000141580612f3b575060608901516020015115155b15612f5e578051612f5e5760405162461bcd60e51b81526004016113b99061567b565b60608a015160200151151580612f7a57506020808a0151015115155b15612fa3576000816020015111612fa35760405162461bcd60e51b81526004016113b99061567b565b60808a015115612ff6578515612fd5578051612fc090849061173b565b600089815261012f6020526040902055612ff6565b6020810151612fe590849061173b565b600089815261012f60205260409020555b60808901511561304957841561302b57602081015161301690839061173b565b600088815261012f6020526040902055613049565b805161303890839061173b565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092613084928c928c929190615490565b60405180910390a19998505050505050505050565b6000808460a001516130ac5760006130b2565b82602001515b65ffffffffffff16905060008460a001516130ce5760006130d4565b83604001515b65ffffffffffff1690506130f5866000015160200151838860400151613b58565b8651602081015160808901518751925160608b0151949750600094613121948994939289890192613bf8565b875180518851516020808b015193015160808c015160608d015195965061314f959394929387929190613c42565b9050866040015151600114801561316b57508560400151516001145b80156131c05750866040015160008151811061318357fe5b6020026020010151600001516001600160a01b031686604001516000815181106131a957fe5b6020026020010151600001516001600160a01b0316145b156132d657604080516001808252818301909252600091816020015b6131e461488c565b8152602001906001900390816131dc579050509050866040015160008151811061320a57fe5b6020026020010151600001518160008151811061322357fe5b60209081029190910101516001600160a01b0390911690526040880151805160009061324b57fe5b602002602001015160200151876040015160008151811061326857fe5b602002602001015160200151018160008151811061328257fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506132cc886000015160000151838a6000015160200151848c608001518d60600151613d45565b50915061332f9050565b613300876000015160000151828960000151602001518a604001518b608001518c60600151613d45565b5087518051602090910151604089015160808b015160608c015194955061332b948693929190613d45565b5090505b61335087600001516000015182896080015189602001518b6060015161335a565b5050509392505050565b600082511161337b5760405162461bcd60e51b81526004016113b9906155c7565b600084815b600185510381101561344a5760006133c186838151811061339d57fe5b6020026020010151602001516001600160601b031689613dfa90919063ffffffff16565b90506133f68683815181106133d257fe5b6020026020010151602001516001600160601b03168561173b90919063ffffffff16565b93508015613441576134088382612933565b925061344160405180604001604052808b8152602001838152508888858151811061342f57fe5b60200260200101516000015188613e12565b50600101613380565b5060008460018651038151811061345d57fe5b6020026020010151905061348781602001516001600160601b03168461173b90919063ffffffff16565b925082612710146134aa5760405162461bcd60e51b81526004016113b990615739565b81156134d4576134d460405180604001604052808a81526020018481525087836000015187613e12565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135128360000151612b54565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000611f027f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61358061421a565b613588614220565b614226565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156135ee5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a166022913960400191505060405180910390fd5b6000601e8560ff1611156136c8576004850360ff16601b148061361757506004850360ff16601c145b6136525760405162461bcd60e51b8152600401808060200182810382526022815260200180615ab36022913960400191505060405180910390fd5b600161365d87614288565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156136b7573d6000803e3d6000fd5b50505060206040510351905061377f565b8460ff16601b14806136dd57508460ff16601c145b6137185760405162461bcd60e51b8152600401808060200182810382526022815260200180615ab36022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613772573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166137da576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6137eb61482e565b825182516001600160e01b031982166355575f5d60e11b1415613856576001600160e01b031981166355575f5d60e11b141561382b578492505050611798565b5050604080518082018252600080825282516020818101909452908152918101919091529050611798565b6001600160e01b031982166322ba176160e21b141561389b576001600160e01b031981166322ba176160e21b141561382b5761389285856142d9565b92505050611798565b6001600160e01b031982166339d690a360e11b14156138d7576001600160e01b031981166339d690a360e11b141561382b5761389285856142d9565b6001600160e01b0319821663025ceed960e61b1415613913576001600160e01b0319811663025ceed960e61b141561382b5761389285856142d9565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156139c8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb09061396a908990899060040161582c565b60006040518083038186803b15801561398257600080fd5b505afa158015613996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526139be919081019061512b565b9350505050611798565b6001600160e01b031983811690831614156139e7576139be86866142d9565b60405162461bcd60e51b81526004016113b99061552b565b60408051600180825281830190925260609160009190816020015b613a2261488c565b815260200190600190039081613a1a5790505090508281600081518110613a4557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613a7957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613aa957506000611798565b50600090815261012f6020526040902054919050565b613ac7614872565b600080613ad5898887614336565b91509150600080613ae78a8988614336565b9150915083811180613b0157508381148015613b01575083155b15613b2d57613b2284848c60200151602001518d60600151602001516143af565b945050505050612d35565b613b498b60200151602001518c60600151602001518484614434565b9b9a5050505050505050505050565b600082815b8351811015613bd857612710848281518110613b7557fe5b6020026020010151602001516001600160601b03161115613ba85760405162461bcd60e51b81526004016113b9906156d3565b838181518110613bb457fe5b6020026020010151602001516001600160601b031682019150806001019050613b5d565b50613bed613be68683613dfa565b869061173b565b9150505b9392505050565b6000806000613c088a8a896144ba565b90925090508015613c3357613c33604051806040016040528087815260200183815250898887613e12565b5090505b979650505050505050565b600080613c4e886144dc565b905080516001148015613c62575086516001145b8015613caf575086600081518110613c7657fe5b6020026020010151600001516001600160a01b031681600081518110613c9857fe5b6020026020010151600001516001600160a01b0316145b15613d005761138881600081518110613cc457fe5b6020026020010151602001516001600160601b03161115613cf75760405162461bcd60e51b81526004016113b990615562565b85915050613c37565b600080613d118b8989868a8a613d45565b91509150611388811115613d375760405162461bcd60e51b81526004016113b990615562565b509998505050505050505050565b846000805b8551811015613dee57613d86868281518110613d6257fe5b6020026020010151602001516001600160601b03168361173b90919063ffffffff16565b91506000613db58489898581518110613d9b57fe5b6020026020010151602001516001600160601b03166144ba565b90945090508015613de557613de560405180604001604052808c8152602001838152508789858151811061342f57fe5b50600101613d4a565b50965096945050505050565b6000611795612710613e0c8585614651565b906146aa565b8351516001600160e01b0319166339d690a360e11b1415613f5857600080856000015160200151806020019051810190613e4c9190614efd565b915091508560200151600114613e745760405162461bcd60e51b81526004016113b99061564f565b6001600160a01b038516301415613eec57604051632142170760e11b81526001600160a01b038316906342842e0e90613eb5903090889086906004016153e9565b600060405180830381600087803b158015613ecf57600080fd5b505af1158015613ee3573d6000803e3d6000fd5b50505050613f51565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690613f1e908590899089908790600401615501565b600060405180830381600087803b158015613f3857600080fd5b505af1158015613f4c573d6000803e3d6000fd5b505050505b5050610a15565b8351516001600160e01b0319166322ba176160e21b14156140b6576000846000015160200151806020019051810190613f919190614cf1565b90506001600160a01b03841630141561404857602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613fd5918791600401615445565b602060405180830381600087803b158015613fef57600080fd5b505af1158015614003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140279190615073565b6140435760405162461bcd60e51b81526004016113b9906156a4565b6140b0565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161407d91859189918991600401615501565b600060405180830381600087803b15801561409757600080fd5b505af11580156140ab573d6000803e3d6000fd5b505050505b50610a15565b8351516001600160e01b03191663025ceed960e61b1415614173576000808560000151602001518060200190518101906140f09190614efd565b90925090506001600160a01b03851630141561413b576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613eb59130918991879160040161540d565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee991613f1e9186918a918a918891906004016154be565b8351516001600160e01b0319166355575f5d60e11b14156141bc576001600160a01b03821630146141b75760208401516141b7906001600160a01b03841690612990565b610a15565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906141ec90879087908790600401615851565b600060405180830381600087803b15801561420657600080fd5b505af11580156134d4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836142336134de565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6142e161482e565b6020808401518051908201208382015180519201919091208082141561430b578492505050611798565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156143755760208086015101516143519085612933565b915061436e85606001516020015186602001516020015184614711565b905061292b565b6060850151602001516143889085612933565b90506143a585602001516020015186606001516020015183614711565b9150935093915050565b6143b7614872565b60006143c4858585614711565b90508581111561441b576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61443c614872565b6000614449838787614711565b9050838111156144a0576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806144d0856144cb8686613dfa565b614777565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614510575081516001600160e01b0319166339d690a360e11b145b156145c65760008083602001518060200190518101906145309190614efd565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a906145679085908590600401615445565b600060405180830381600087803b15801561458157600080fd5b505af1158015614595573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145bd9190810190615041565b9250505061164c565b81516001600160e01b03191662737ea960e61b141561460757600082602001518060200190518101906145f99190614d0d565b60800151925061164c915050565b81516001600160e01b03191663d8f960c160e01b1415614649576000826020015180602001905181019061463b9190614e0a565b60600151925061164c915050565b506060919050565b60008261466057506000611798565b8282028284828161466d57fe5b04146117955760405162461bcd60e51b8152600401808060200182810382526021815260200180615ad56021913960400191505060405180910390fd5b6000808211614700576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161470957fe5b049392505050565b600061471e84848461479f565b15614761576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61476f83613e0c8685614651565b949350505050565b600080828411156147965761478c8484612933565b9150829050612635565b50600093915050565b6000826147e6576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806147f1575083155b156147fe57506000613bf1565b6000838061480857fe5b85840990506148178584614651565b614823826103e8614651565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806080016040528060608152602001606081526020016000151581526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561164c81615981565b600082601f8301126148be578081fd5b815160206148d36148ce83615917565b6158f4565b82815281810190858301855b85811015614908576148f6898684518b0101614a37565b845292840192908401906001016148df565b5090979650505050505050565b600082601f830112614925578081fd5b815160206149356148ce83615917565b82815281810190858301604080860288018501891015614953578687fd5b865b868110156149c25781838b03121561496b578788fd5b81518281018181106001600160401b038211171561498557fe5b8352835161499281615981565b8152838701516001600160601b03811681146149ac57898afd5b8188015285529385019391810191600101614955565b509198975050505050505050565b8051801515811461164c57600080fd5b803561164c81615996565b600082601f8301126149fb578081fd5b8135614a096148ce82615934565b818152846020838601011115614a1d578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614a47578081fd5b8151614a556148ce82615934565b818152846020838601011115614a69578283fd5b61476f826020830160208701615955565b60006101e08284031215614a8c578081fd5b50919050565b60006040808385031215614aa4578182fd5b80518181016001600160401b038282108183111715614abf57fe5b818452829450853581811115614ad457600080fd5b8601808803851315614ae557600080fd5b608084018381108382111715614af757fe5b909452833593614b0685615996565b93825260208401359381851115614b1c57600080fd5b614b28888683016149eb565b60608501525050815260209384013593019290925292915050565b600060608284031215614b54578081fd5b604051606081016001600160401b038282108183111715614b7157fe5b816040528293508451915080821115614b8957600080fd5b614b9586838701614915565b83526020850151915080821115614bab57600080fd5b50614bb885828601614915565b602083015250614bca604084016149d0565b60408201525092915050565b6000610120808385031215614be9578182fd5b614bf2816158f4565b915050614bfe826148a3565b815260208201356001600160401b0380821115614c1a57600080fd5b614c2685838601614a92565b6020840152614c37604085016148a3565b60408401526060840135915080821115614c5057600080fd5b614c5c85838601614a92565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614c8b60e085016149e0565b60e084015261010091508184013581811115614ca657600080fd5b614cb2868287016149eb565b8385015250505092915050565b803565ffffffffffff8116811461164c57600080fd5b600060208284031215614ce6578081fd5b813561179581615981565b600060208284031215614d02578081fd5b815161179581615981565b60008060408385031215614d1f578081fd5b8251614d2a81615981565b60208401519092506001600160401b0380821115614d46578283fd5b9084019060c08287031215614d59578283fd5b614d6360c06158f4565b82518152602083015182811115614d78578485fd5b614d8488828601614a37565b60208301525060408301516040820152606083015182811115614da5578485fd5b614db188828601614915565b606083015250608083015182811115614dc8578485fd5b614dd488828601614915565b60808301525060a083015182811115614deb578485fd5b614df7888286016148ae565b60a0830152508093505050509250929050565b60008060408385031215614e1c578182fd5b8251614e2781615981565b60208401519092506001600160401b0380821115614e43578283fd5b9084019060a08287031215614e56578283fd5b614e6060a06158f4565b82518152602083015182811115614e75578485fd5b614e8188828601614a37565b602083015250604083015182811115614e98578485fd5b614ea488828601614915565b604083015250606083015182811115614ebb578485fd5b614ec788828601614915565b606083015250608083015182811115614ede578485fd5b614eea888286016148ae565b6080830152508093505050509250929050565b60008060408385031215614f0f578182fd5b8251614f1a81615981565b6020939093015192949293505050565b600080600080600060a08688031215614f41578081fd5b8535614f4c81615981565b94506020860135614f5c81615981565b9350604086013592506060860135614f7381615981565b91506080860135614f8381615981565b809150509295509295909350565b600080600080600060a08688031215614fa8578283fd5b8535614fb381615981565b945060208601356001600160401b03811115614fcd578384fd5b614fd9888289016149eb565b9450506040860135925060608601359150608086013560ff81168114614f83578182fd5b600080600060608486031215615011578081fd5b833561501c81615981565b925061502a60208501614cbf565b915061503860408501614cbf565b90509250925092565b600060208284031215615052578081fd5b81516001600160401b03811115615067578182fd5b61476f84828501614915565b600060208284031215615084578081fd5b611795826149d0565b60006020828403121561509e578081fd5b5035919050565b6000602082840312156150b6578081fd5b813561179581615996565b600080604083850312156150d3578182fd5b82356150de81615996565b915060208301356150ee81615981565b809150509250929050565b60006020828403121561510a578081fd5b81356001600160401b0381111561511f578182fd5b61476f84828501614a7a565b60006020828403121561513c578081fd5b81516001600160401b0380821115615152578283fd5b9083019060408286031215615165578283fd5b60405160408101818110838211171561517a57fe5b604052825161518881615996565b815260208301518281111561519b578485fd5b6151a787828601614a37565b60208301525095945050505050565b6000602082840312156151c7578081fd5b81516001600160401b03808211156151dd578283fd5b90830190604082860312156151f0578283fd5b60405160408101818110838211171561520557fe5b604052825182811115615216578485fd5b61522287828601614915565b825250602083015182811115615236578485fd5b6151a787828601614915565b600060208284031215615253578081fd5b81516001600160401b03811115615268578182fd5b61476f84828501614b43565b600060208284031215615285578081fd5b81356001600160401b0381111561529a578182fd5b61476f84828501614bd6565b600080600080608085870312156152bb578182fd5b84356001600160401b03808211156152d1578384fd5b6152dd88838901614bd6565b955060208701359150808211156152f2578384fd5b6152fe888389016149eb565b94506040870135915080821115615313578384fd5b61531f88838901614bd6565b93506060870135915080821115615334578283fd5b50615341878288016149eb565b91505092959194509250565b60006020828403121561535e578081fd5b61179582614cbf565b6000815180845261537f816020860160208601615955565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261476f6040850182615367565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6000602082526117956020830184615367565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261583f6040830185615393565b8281036020840152613bed8185615393565b60006060825284516040606084015261586d60a0840182615393565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126158c6578283fd5b8301803591506001600160401b038211156158df578283fd5b60200191503681900382131561263557600080fd5b6040518181016001600160401b038111828210171561590f57fe5b604052919050565b60006001600160401b0382111561592a57fe5b5060209081020190565b60006001600160401b0382111561594757fe5b50601f01601f191660200190565b60005b83811015615970578181015183820152602001615958565b83811115610a155750506000910152565b6001600160a01b0381168114611b3257600080fd5b6001600160e01b031981168114611b3257600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220d27ecddf6dc922ec759fd1009325766bdd3bf64fa8da52596fe45fd60d28e48964736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", + "params": { + "direct": "struct with parameters for accept bid operation" + } + }, + "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 8438, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "matchers", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 8684, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 28108, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "proxies", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 28405, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "201", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "202", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 9910, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 8838, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "fills", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 9774, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 27016, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "protocolFee", + "offset": 0, + "slot": "353", + "type": "t_struct(ProtocolFeeData)27052_storage" + }, + { + "astId": 27018, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "royaltiesRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IRoyaltiesProvider)8407" + }, + { + "astId": 27020, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "defaultFeeReceiver", + "offset": 0, + "slot": "355", + "type": "t_address" + }, + { + "astId": 27024, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "feeReceivers", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 28084, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)46_storage" + }, + { + "astId": 15838, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "nonces", + "offset": 0, + "slot": "403", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 15840, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "domainSeparator", + "offset": 0, + "slot": "404", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IRoyaltiesProvider)8407": { + "encoding": "inplace", + "label": "contract IRoyaltiesProvider", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_struct(ProtocolFeeData)27052_storage": { + "encoding": "inplace", + "label": "struct RaribleTransferManager.ProtocolFeeData", + "members": [ + { + "astId": 27047, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "receiver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 27049, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "buyerAmount", + "offset": 20, + "slot": "0", + "type": "t_uint48" + }, + { + "astId": 27051, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "sellerAmount", + "offset": 26, + "slot": "0", + "type": "t_uint48" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "encoding": "inplace", + "label": "uint48", + "numberOfBytes": "6" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Proxy.json new file mode 100644 index 000000000..cfb6a80f0 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/ExchangeMetaV2_Proxy.json @@ -0,0 +1,249 @@ +{ + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "transactionIndex": 1, + "gasUsed": "928840", + "logsBloom": "0x00000000000000000000000000000000400000000000000080800000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010001000000000000000000008000000000000000021000000000000000000800000000800000000000000000000000400000000000000000000000000000000000080000000000000000000000800000000000000000000000000000000000000000000000000000200000000000000000800020000000000000000000000000000000000400000000000000000020000000000000000000000000000000000000000000040000000000000000000000", + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da", + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000091286fbc258befd2faf076ef9526b0a80b4f6ffc" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + }, + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + }, + { + "transactionIndex": 1, + "blockNumber": 446383, + "transactionHash": "0xf60ff54763779b7278851a945b97aa8e37c34686646b2a7a18d4c5d7b606607d", + "address": "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 2, + "blockHash": "0x1c3464b7bd7a49828a2a364e5b01e6c5276c183e4162c706d7e6a115168957da" + } + ], + "blockNumber": 446383, + "cumulativeGasUsed": "972667", + "status": 1, + "byzantium": true + }, + "args": [ + "0x91286fbc258bEfd2fAf076Ef9526B0A80B4F6ffc", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x1372a625000000000000000000000000a12b63714b42ea4ab44ca129acc15ad441cdcf20000000000000000000000000bcd37b7548c35d5bb9703f5e40a59d082876809e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa99fb829e51e0213651c822eb18fefa36a5510f" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/match_testnet_699/RaribleExchangeWrapper.json new file mode 100644 index 000000000..4b803c602 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/RaribleExchangeWrapper.json @@ -0,0 +1,692 @@ +{ + "address": "0x06C66b78794ecd65Be3A8497561a371d66F8AbCD", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "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": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x8a886f2b24bbcf7d209893a09d3866bc1816051276e6a9b21c684aa2b89e139d", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0x06C66b78794ecd65Be3A8497561a371d66F8AbCD", + "transactionIndex": 1, + "gasUsed": "4210107", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000021000000000000000000800000000000000000000000000000000400004000000000000000000000000008000000000000000000000000000000000000000000000800000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1664a530cdf560e76ba9fd5e4acce49205bfc3ba7aa2943eeb54458b619d7935", + "transactionHash": "0x8a886f2b24bbcf7d209893a09d3866bc1816051276e6a9b21c684aa2b89e139d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446458, + "transactionHash": "0x8a886f2b24bbcf7d209893a09d3866bc1816051276e6a9b21c684aa2b89e139d", + "address": "0x06C66b78794ecd65Be3A8497561a371d66F8AbCD", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x1664a530cdf560e76ba9fd5e4acce49205bfc3ba7aa2943eeb54458b619d7935" + } + ], + "blockNumber": 446458, + "cumulativeGasUsed": "4253934", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A", + "0x00000000006c3852cbEf3e08E8dF289169EdE581", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000001ad428e4906aE43D8F9852d0dD6", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" + ], + "0x0000000000000000000000000000000000000000", + [ + "0xbcD37B7548c35d5bb9703F5e40a59D082876809E" + ] + ], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker,\\n protocolFeeEnabled: leftOrderData.protocolFeeEnabled\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker,\\n protocolFeeEnabled: rightOrderData.protocolFeeEnabled\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xa93d432fd4012eb69625b23fc71744f0d28dbb1acf58165b68647beb18f5baa2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n bool protocolFeeEnabled;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n dataOrder.protocolFeeEnabled = false;\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == LibOrderDataV3.V3) {\\n LibOrderDataV3.DataV3 memory data = abi.decode(order.data, (LibOrderDataV3.DataV3));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n dataOrder.protocolFeeEnabled = true;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0x7ade2e0f39574183261011013a7eebe7a06abad9b8585e48d132a4579c2334bc\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3 = bytes4(keccak256(\\\"V3\\\"));\\n\\n struct DataV3 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n}\\n\",\"keccak256\":\"0x73efab7636308c9dbc8dd54db91535dd0f8915624ffe1547f545f5ba617dc126\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n uint buyerProtocolFee = paymentSide.protocolFeeEnabled ? _protocolFee.buyerAmount : 0;\\n uint sellerProtocolFee = nftSide.protocolFeeEnabled ? _protocolFee.sellerAmount : 0;\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, buyerProtocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, buyerProtocolFee + sellerProtocolFee, _protocolFee.receiver, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n /**\\n @notice transfers protocol fee to protocol fee receiver\\n */\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n uint protocolFeeTotal,\\n address protocolFeeReceiver,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, protocolFeeTotal);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, protocolFeeReceiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param buyerProtocolFee buyer protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n uint buyerProtocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = buyerProtocolFee;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x26817b8e94229124aa1298725cc122d23ee26ca5d63effc935910aa962fe4a83\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n bool protocolFeeEnabled;\\n }\\n}\\n\",\"keccak256\":\"0xa547c45c10324eb0ffa9bcc246406a88f9a07cbf198c5df5832544f27495b0e3\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122036c94fd12e371f1251a4d3f1c1be346175118b111e1fbf25d822a6919ff6820b64736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122036c94fd12e371f1251a4d3f1c1be346175118b111e1fbf25d822a6919ff6820b64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5276, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5392, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 13827, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry.json new file mode 100644 index 000000000..c683d2329 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry.json @@ -0,0 +1,591 @@ +{ + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "transactionIndex": 1, + "gasUsed": "768983", + "logsBloom": "0x10000000000000000000000001000000400000000000000000800000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010001000000000000000000000000000000000000021000000000000000000800000000800000000000000000000000400000400000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000400000000000200000000000000000000020000000000000000000000000000000000400040000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580", + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000dd7586a9e76643bfc758850a6f3bb1dd20a38702" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + }, + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + }, + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 2, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + } + ], + "blockNumber": 446340, + "cumulativeGasUsed": "821198", + "status": 1, + "byzantium": true + }, + "args": [ + "0xdd7586A9E76643BfC758850a6f3bb1DD20A38702", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x27fff8ab" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__RoyaltiesRegistry_init", + "args": [] + }, + "implementation": "0xdd7586A9E76643BfC758850a6f3bb1DD20A38702", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Implementation.json new file mode 100644 index 000000000..6a0c1d8ea --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Implementation.json @@ -0,0 +1,626 @@ +{ + "address": "0xdd7586A9E76643BfC758850a6f3bb1DD20A38702", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xadd6394f345c94cec8916ff61cc17bd1290fe4dc5815e34c067441791b5f50a4", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xdd7586A9E76643BfC758850a6f3bb1DD20A38702", + "transactionIndex": 1, + "gasUsed": "1571871", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf5d81c15b52d865996f750829a3a9988f72ea2faed69d4c6abc971166106df6a", + "transactionHash": "0xadd6394f345c94cec8916ff61cc17bd1290fe4dc5815e34c067441791b5f50a4", + "logs": [], + "blockNumber": 446336, + "cumulativeGasUsed": "1615686", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611b75806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", + "devdoc": { + "events": { + "RoyaltiesSetForContract(address,(address,uint96)[])": { + "details": "emitted when royalties set for token in " + }, + "RoyaltiesSetForToken(address,uint256,(address,uint96)[])": { + "details": "deprecated" + } + }, + "kind": "dev", + "methods": { + "clearRoyaltiesType(address)": { + "details": "clears royalties type for token contract" + }, + "forceSetRoyaltiesType(address,uint256)": { + "details": "clears and sets new royalties type for token contract" + }, + "getProvider(address)": { + "details": "returns provider address for token contract from royaltiesProviders mapping" + }, + "getRoyalties(address,uint256)": { + "details": "returns royalties for token contract and token id" + }, + "getRoyaltiesType(address)": { + "details": "returns royalties type for token contract" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setProviderByToken(address,address)": { + "details": "sets external provider for token contract, and royalties type = 4" + }, + "setRoyaltiesByToken(address,(address,uint96)[])": { + "details": "sets royalties for token contract in royaltiesByToken mapping and royalties type = 1" + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "stateVariables": { + "royaltiesByToken": { + "details": "stores royalties for token contract, set in setRoyaltiesByToken() method" + }, + "royaltiesByTokenAndTokenId": { + "details": "deprecated" + }, + "royaltiesProviders": { + "details": "stores external provider and royalties type for token contract" + }, + "royaltiesTypesAmount": { + "details": "total amount or supported royalties types" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16305, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByTokenAndTokenId", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)16300_storage)" + }, + { + "astId": 16310, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByToken", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)16300_storage)" + }, + { + "astId": 16315, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesProviders", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 17095, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "104", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)15592_storage)dyn_storage": { + "base": "t_struct(Part)15592_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RoyaltiesSet)16300_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)16300_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)16300_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)16300_storage" + }, + "t_struct(Part)15592_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 15589, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 15591, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoyaltiesSet)16300_storage": { + "encoding": "inplace", + "label": "struct RoyaltiesRegistry.RoyaltiesSet", + "members": [ + { + "astId": 16296, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 16299, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royalties", + "offset": 0, + "slot": "1", + "type": "t_array(t_struct(Part)15592_storage)dyn_storage" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Proxy.json new file mode 100644 index 000000000..17bd15b5f --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/RoyaltiesRegistry_Proxy.json @@ -0,0 +1,249 @@ +{ + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "transactionIndex": 1, + "gasUsed": "768983", + "logsBloom": "0x10000000000000000000000001000000400000000000000000800000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000002010001000000000000000000000000000000000000021000000000000000000800000000800000000000000000000000400000400000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000400000000000200000000000000000000020000000000000000000000000000000000400040000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580", + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000dd7586a9e76643bfc758850a6f3bb1dd20a38702" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + }, + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000285772284a33161095aa54897e13e322ae28024d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + }, + { + "transactionIndex": 1, + "blockNumber": 446340, + "transactionHash": "0xd03bd8307f24fb39803772a4e33a0297f3fb430446fb56c409d200baec21becc", + "address": "0xFA99fB829e51E0213651c822eB18feFa36A5510F", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5134b7da62b888246a22bdb1f276b6d94ea3f3e", + "logIndex": 2, + "blockHash": "0x74438595a80d042d86e415886594e710e8bbcc4fb5d475078e18711a95b18580" + } + ], + "blockNumber": 446340, + "cumulativeGasUsed": "821198", + "status": 1, + "byzantium": true + }, + "args": [ + "0xdd7586A9E76643BfC758850a6f3bb1DD20A38702", + "0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E", + "0x27fff8ab" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/TransferProxy.json b/projects/hardhat-deploy/deployments/match_testnet_699/TransferProxy.json new file mode 100644 index 000000000..9095638c4 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/TransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC1155Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "erc1155safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC721Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "erc721safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xf170d44fcc10dd7e93065e2674aae22b0918723b3624c2c1db2fae1b0f5042df", + "receipt": { + "to": null, + "from": "0x285772284a33161095aa54897e13e322Ae28024d", + "contractAddress": "0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20", + "transactionIndex": 1, + "gasUsed": "649103", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd1e7ee0ecfed56f284c3d8899de76b573a37a8cd0956fe676a23b1b6156c4b88", + "transactionHash": "0xf170d44fcc10dd7e93065e2674aae22b0918723b3624c2c1db2fae1b0f5042df", + "logs": [], + "blockNumber": 446344, + "cumulativeGasUsed": "692930", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "7ce9693ea617d70a93374d648505751f", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\\n (bool success, ) = recipient.call{ value: amount }(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610ac8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4128, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 16207, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/7ce9693ea617d70a93374d648505751f.json b/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/7ce9693ea617d70a93374d648505751f.json new file mode 100644 index 000000000..5ea5982a5 --- /dev/null +++ b/projects/hardhat-deploy/deployments/match_testnet_699/solcInputs/7ce9693ea617d70a93374d648505751f.json @@ -0,0 +1,578 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, avoid-call-value\n (bool success, ) = recipient.call{ value: amount }(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker,\n protocolFeeEnabled: leftOrderData.protocolFeeEnabled\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker,\n protocolFeeEnabled: rightOrderData.protocolFeeEnabled\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n bool protocolFeeEnabled;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n dataOrder.protocolFeeEnabled = false;\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == LibOrderDataV3.V3) {\n LibOrderDataV3.DataV3 memory data = abi.decode(order.data, (LibOrderDataV3.DataV3));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n dataOrder.protocolFeeEnabled = true;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV3 {\n bytes4 constant public V3 = bytes4(keccak256(\"V3\"));\n\n struct DataV3 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3(LibOrderDataV3.DataV3 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/dependencies/IERC4906.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.6;\n\n/// @title ERC-721 Metadata Update Extension\ninterface IERC4906 {\n /// @dev This event emits when the metadata of a token is changed.\n /// So that the third-party platforms such as NFT market could\n /// timely update the images and related attributes of the NFT.\n event MetadataUpdate(uint256 _tokenId);\n\n /// @dev This event emits when the metadata of a range of tokens is changed.\n /// So that the third-party platforms such as NFT market could\n /// timely update the images and related attributes of the NFTs.\n event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);\n}\n" + }, + "@rarible/test/contracts/dependencies/IOwnable.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.6;\n\n/// @author thirdweb\n\n/**\n * Thirdweb's `Ownable` is a contract extension to be used with any base contract. It exposes functions for setting and reading\n * who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses\n * information about who the contract's owner is.\n */\n\ninterface IOwnable {\n /// @dev Returns the owner of the contract.\n function owner() external view returns (address);\n\n /// @dev Lets a module admin set a new owner for the contract. The new owner must be a module admin.\n function setOwner(address _newOwner) external;\n\n /// @dev Emitted when a new Owner is set.\n event OwnerUpdated(address indexed prevOwner, address indexed newOwner);\n}" + }, + "@rarible/test/contracts/dependencies/Ownable.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity 0.7.6;\n\n/// @author thirdweb\n\nimport \"./IOwnable.sol\";\n\n/**\n * @title Ownable\n * @notice Thirdweb's `Ownable` is a contract extension to be used with any base contract. It exposes functions for setting and reading\n * who the 'owner' of the inheriting smart contract is, and lets the inheriting contract perform conditional logic that uses\n * information about who the contract's owner is.\n */\n\nabstract contract Ownable is IOwnable {\n /// @dev Owner of the contract (purpose: OpenSea compatibility)\n address private _owner;\n\n /// @dev Reverts if caller is not the owner.\n modifier onlyOwner() {\n if (msg.sender != _owner) {\n revert(\"unauthorized\");\n }\n _;\n }\n\n /**\n * @notice Returns the owner of the contract.\n */\n function owner() public view override returns (address) {\n return _owner;\n }\n\n /**\n * @notice Lets an authorized wallet set a new owner for the contract.\n * @param _newOwner The address to set as the new owner of the contract.\n */\n function setOwner(address _newOwner) external override {\n if (!_canSetOwner()) {\n revert(\"unauthorized\");\n }\n _setupOwner(_newOwner);\n }\n\n /// @dev Lets a contract admin set a new owner for the contract. The new owner must be a contract admin.\n function _setupOwner(address _newOwner) internal {\n address _prevOwner = _owner;\n _owner = _newOwner;\n\n emit OwnerUpdated(_prevOwner, _newOwner);\n }\n\n /// @dev Returns whether owner can be set in the given execution context.\n function _canSetOwner() internal view virtual returns (bool);\n}" + }, + "@rarible/test/contracts/dependencies/RenderingContract.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.7.6;\n\ninterface ITokenURIGenerator {\n function tokenURI(uint tokenId) external view returns (string memory);\n}\n\nabstract contract RenderingContract {\n ITokenURIGenerator public renderingContract;\n\n function setRenderingContract(ITokenURIGenerator _contract) external {\n renderingContract = _contract;\n }\n}" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport \"./dependencies/Ownable.sol\";\nimport \"./dependencies/RenderingContract.sol\";\nimport \"./dependencies/IERC4906.sol\";\n\n\ncontract TestERC721 is ERC721Upgradeable, Ownable, RenderingContract, IERC4906 {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n _setupOwner(msg.sender);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n function _canSetOwner() internal virtual view override returns (bool) {\n return msg.sender == owner();\n }\n\n function mintWithPrice(address to, uint[] memory tokenIds, address currency, uint256 pricePerToken) external {\n for (uint i = 0; i < tokenIds.length; i++) {\n _mint(to, tokenIds[i]);\n }\n IERC20Upgradeable(currency).transferFrom(msg.sender, owner(), pricePerToken * tokenIds.length);\n }\n\n function updateMetaData(uint256 _tokenId) external {\n emit MetadataUpdate(_tokenId);\n }\n\n function updateBatchMetaData(uint256 _fromTokenId, uint256 _toTokenId) external {\n emit BatchMetadataUpdate(_fromTokenId, _toTokenId);\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n bool protocolFeeEnabled;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n uint buyerProtocolFee = paymentSide.protocolFeeEnabled ? _protocolFee.buyerAmount : 0;\n uint sellerProtocolFee = nftSide.protocolFeeEnabled ? _protocolFee.sellerAmount : 0;\n totalAmount = calculateTotalAmount(paymentSide.asset.value, buyerProtocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, buyerProtocolFee + sellerProtocolFee, _protocolFee.receiver, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n /**\n @notice transfers protocol fee to protocol fee receiver\n */\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n uint protocolFeeTotal,\n address protocolFeeReceiver,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, protocolFeeTotal);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, protocolFeeReceiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param buyerProtocolFee buyer protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n uint buyerProtocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = buyerProtocolFee;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n" + }, + "src/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + }, + "test/exchange/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/networks/match_testnet_699.md b/projects/hardhat-deploy/networks/match_testnet_699.md new file mode 100644 index 000000000..13cb2aac7 --- /dev/null +++ b/projects/hardhat-deploy/networks/match_testnet_699.md @@ -0,0 +1,17 @@ + Name | Address | Url + --- | --- | --- + AssetMatcherCollection | 0x25bb5A7E5FaCf4de3f65E926c9a14e1ADA2c770a | https://www.matchscan.io/address/0x25bb5A7E5FaCf4de3f65E926c9a14e1ADA2c770a + DefaultProxyAdmin | 0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E | https://www.matchscan.io/address/0xf5134B7Da62B888246A22Bdb1f276B6D94EA3F3E + ERC1155LazyMintTransferProxy | 0xBc8453F510474B8542120AE312f878BC44693Ddc | https://www.matchscan.io/address/0xBc8453F510474B8542120AE312f878BC44693Ddc + ERC1155RaribleBeaconMeta | 0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78 | https://www.matchscan.io/address/0x9e2f3e556Cc799C1fFe7ce31824495fCA99B6F78 + ERC1155RaribleFactoryC2 | 0x6938Bcd84F5d4388125aA80423db48a74a0584b1 | https://www.matchscan.io/address/0x6938Bcd84F5d4388125aA80423db48a74a0584b1 + ERC1155RaribleMeta | 0xe0c84cc0E421a022f00E97C5130ca58C07694F13 | https://www.matchscan.io/address/0xe0c84cc0E421a022f00E97C5130ca58C07694F13 + ERC20TransferProxy | 0xbcD37B7548c35d5bb9703F5e40a59D082876809E | https://www.matchscan.io/address/0xbcD37B7548c35d5bb9703F5e40a59D082876809E + ERC721LazyMintTransferProxy | 0x15ceF16B61D8d87E08e129B6D4Af299a29027694 | https://www.matchscan.io/address/0x15ceF16B61D8d87E08e129B6D4Af299a29027694 + ERC721RaribleFactoryC2 | 0x5Fe44e61d9917CD6e36283d12ce4FdC5949a2823 | https://www.matchscan.io/address/0x5Fe44e61d9917CD6e36283d12ce4FdC5949a2823 + ERC721RaribleMeta | 0xe8e947048fd18A3b3Fc51E79290F959276165850 | https://www.matchscan.io/address/0xe8e947048fd18A3b3Fc51E79290F959276165850 + ERC721RaribleMinimalBeaconMeta | 0x039Ad594223C53e665Ac80b00C63973c770baCBA | https://www.matchscan.io/address/0x039Ad594223C53e665Ac80b00C63973c770baCBA + ExchangeMetaV2 | 0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A | https://www.matchscan.io/address/0x045A51B9d4b8B113f0597F4bAB65Fe10c1F2786A + RaribleExchangeWrapper | 0x06C66b78794ecd65Be3A8497561a371d66F8AbCD | https://www.matchscan.io/address/0x06C66b78794ecd65Be3A8497561a371d66F8AbCD + RoyaltiesRegistry | 0xFA99fB829e51E0213651c822eB18feFa36A5510F | https://www.matchscan.io/address/0xFA99fB829e51E0213651c822eB18feFa36A5510F + TransferProxy | 0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20 | https://www.matchscan.io/address/0xa12b63714B42ea4aB44Ca129aCC15aD441cDcF20 diff --git a/projects/hardhat-deploy/utils/config/match_testnet_699.json b/projects/hardhat-deploy/utils/config/match_testnet_699.json new file mode 100644 index 000000000..8f1d838c0 --- /dev/null +++ b/projects/hardhat-deploy/utils/config/match_testnet_699.json @@ -0,0 +1,4 @@ +{ + "deploy_meta": true, + "deploy_non_meta": false + } \ No newline at end of file