From a12abdbfca0a891f3017ae43a525bb183c89846c Mon Sep 17 00:00:00 2001 From: CounterFire2023 <136581895+CounterFire2023@users.noreply.github.com> Date: Mon, 19 Jun 2023 14:22:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0market=E7=9A=84abi=E5=92=8Cad?= =?UTF-8?q?dress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/contracts/BENFTMarket.json | 818 +++++++++++++++---------------- contracts/market/BENftMarket.sol | 2 +- out_arbitrum_testnet_dev.json | 2 +- 3 files changed, 411 insertions(+), 411 deletions(-) diff --git a/build/contracts/BENFTMarket.json b/build/contracts/BENFTMarket.json index fb2d83f..4c132c0 100644 --- a/build/contracts/BENFTMarket.json +++ b/build/contracts/BENFTMarket.json @@ -933,9 +933,9 @@ "type": "function" } ], - "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"AddERC20Suppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"AddNFTSuppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BuyOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"CancelOrder\",\"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\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"PriceUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"RemoveERC20Suppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"RemoveNFTSuppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"SellOrder\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_TRANSACTION_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TRANSACTION_TAX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TRANSACTION_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TRANSACTION_TAX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"addERC1155Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"addERC20Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"addERC721Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc1155Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc20Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc721Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nftPriceMaxLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nftPriceMinLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"orderInfos\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"removeERC1155Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"removeERC20Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"removeERC721Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeToAddress\",\"type\":\"address\"}],\"name\":\"setFeeToAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxLimit\",\"type\":\"uint256\"}],\"name\":\"setNFTPriceMaxLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minLimit\",\"type\":\"uint256\"}],\"name\":\"setNFTPriceMinLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_taxToAddress\",\"type\":\"address\"}],\"name\":\"setTaxToAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transactionFee\",\"type\":\"uint256\"}],\"name\":\"setTransactionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transactionTax\",\"type\":\"uint256\"}],\"name\":\"setTransactionTax\",\"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\":\"taxToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tranFeeTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tranTaxTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transactionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transactionTax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"updatePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addERC1155Support(address)\":{\"details\":\"Add 1155 NFT support\"},\"addERC20Support(address)\":{\"details\":\"Add ERC20 support\"},\"addERC721Support(address)\":{\"details\":\"Add ERC20 support\"},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeERC1155Support(address)\":{\"details\":\"Remove 1155 NFT support\"},\"removeERC20Support(address)\":{\"details\":\"Remove ERC20 support\"},\"removeERC721Support(address)\":{\"details\":\"Remove 721 NFT support\"},\"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.\"},\"setFeeToAddress(address)\":{\"details\":\"Set the fee received address\"},\"setNFTPriceMaxLimit(address,uint256)\":{\"details\":\"Set the maximum price limit for NFT\"},\"setNFTPriceMinLimit(address,uint256)\":{\"details\":\"Set the minimum price limit for NFT\"},\"setTaxToAddress(address)\":{\"details\":\"Set the tax received address\"},\"setTransactionFee(uint256)\":{\"details\":\"Set the transaction fee\"},\"setTransactionTax(uint256)\":{\"details\":\"Set the transaction tax\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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\":{\"project:/contracts/market/BENftMarket.sol\":\"BENftMarket\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x8e93de94c9062ebc94fb7e2e3929b0781ac6a2b7772e2f7a59045861c93e5be9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f920a631bf986c610fe573d3c70a2bb6f224f86f4a8550016470c7ee476c9ab5\",\"dweb:/ipfs/QmYzsyVMfnaREKHcHv5RPS8Xg5r1Q38E2SDsGBTnXeFWzb\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0xeb373f1fdc7b755c6a750123a9b9e3a8a02c1470042fd6505d875000a80bde0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e28648f994abf1d6bc345644a361cc0b7efa544f8bc0c8ec26011fed85a91ec\",\"dweb:/ipfs/QmVVE7AiRjKaQYYji7TkjmTeVzGpNmms5eoxqTCfvvpj6D\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\":{\"keccak256\":\"0x2e024ca51ce5abe16c0d34e6992a1104f356e2244eb4ccbec970435e8b3405e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a74009db3c6fc8db851ba69ddb6795b5c1ef1120c5a00fd1a8dc3a717dd9d519\",\"dweb:/ipfs/QmZMk8Yh2X3gPS51ckUVLEXjZUhMSEeGApnA53WtjvLb9h\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol\":{\"keccak256\":\"0x3dd5e1a66a56f30302108a1da97d677a42b1daa60e503696b2bcbbf3e4c95bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0808de0ae4918c664643c885ca7fa6503e8ef2bd75609dfc85152c0128a3422d\",\"dweb:/ipfs/QmNrhFC1XgBKuuxfahFeiwi1MCdu3FLNpHj2uStgmf4iJj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4632c341a06ba5c079b51ca5a915efab4e6ab57735b37839b3e8365ff806a43e\",\"dweb:/ipfs/QmTHT3xHYed2wajEoA5qu7ii2BxLpPhQZHwAhtLK5Z7ANK\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\":{\"keccak256\":\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"project:/contracts/market/BENftMarket.sol\":{\"keccak256\":\"0x43062bbc9358baf2ee49b473b8b3e53446bf36624d3c7c03ae81c357213ed5b4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16fdb41370b202431c06cd3e24178ca24da8904b4d2b89329bded87e798568be\",\"dweb:/ipfs/QmXZz13g2RRKA5QH54wJ7meyLyHwJ9V8T9xgKW3VMd4MMr\"]}},\"version\":1}", - "bytecode": "0x60806040526064620f424060036200001891906200018a565b6200002491906200021a565b600a556064620f424060016200003b91906200018a565b6200004791906200021a565b600b553480156200005757600080fd5b50620000786200006c6200008560201b60201c565b6200008d60201b60201c565b6001808190555062000252565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620001978262000151565b9150620001a48362000151565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620001e057620001df6200015b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620002278262000151565b9150620002348362000151565b925082620002475762000246620001eb565b5b828204905092915050565b614e5580620002626000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80638d1400b41161013b578063bc1081e9116100b8578063d2d03a221161007c578063d2d03a22146106df578063d96a094a146106fd578063f23a6e6114610719578063f2fde38b14610749578063fdf397ee1461076557610248565b8063bc1081e914610627578063bc197c8114610645578063c179c58014610675578063c24bdfc614610693578063c68d20ab146106c357610248565b8063b18c1047116100ff578063b18c10471461057f578063b4a1753a1461059d578063b8a9ddeb146105d3578063b9c214a1146105ef578063b9d2df611461060b57610248565b80638d1400b4146104db5780638da5cb5b146104f75780639017f79e146105155780639ed3edf014610545578063a5f955581461056357610248565b806340a28c56116101c95780636d213f721161018d5780636d213f721461044b5780636f22d45b1461047b578063715018a61461049957806382367b2d146104a357806386847c70146104bf57610248565b806340a28c56146103bd578063498886ac146103d9578063514fcac7146103f5578063580bb9a5146104115780635a43c2e51461042d57610248565b806330681e631161021057806330681e6314610303578063322ba2c814610321578063348eff20146103515780633a27df071461036f5780633d19b4681461038d57610248565b806301ffc9a71461024d578063083d80f91461027d578063096a8ab71461029b578063150b7a02146102b757806328400cf3146102e7575b600080fd5b6102676004803603810190610262919061358d565b610781565b60405161027491906135d5565b60405180910390f35b6102856107fb565b6040516102929190613631565b60405180910390f35b6102b560048036038101906102b09190613682565b610821565b005b6102d160048036038101906102cc9190613821565b610912565b6040516102de91906138b3565b60405180910390f35b61030160048036038101906102fc91906138ce565b610926565b005b61030b610ab4565b604051610318919061391d565b60405180910390f35b61033b60048036038101906103369190613938565b610ad3565b60405161034891906135d5565b60405180910390f35b610359610af3565b604051610366919061391d565b60405180910390f35b610377610af8565b604051610384919061391d565b60405180910390f35b6103a760048036038101906103a29190613938565b610afe565b6040516103b4919061391d565b60405180910390f35b6103d760048036038101906103d29190613938565b610b16565b005b6103f360048036038101906103ee9190613938565b610c24565b005b61040f600480360381019061040a9190613682565b610d32565b005b61042b60048036038101906104269190613938565b61122f565b005b61043561135f565b604051610442919061391d565b60405180910390f35b61046560048036038101906104609190613938565b611365565b60405161047291906135d5565b60405180910390f35b610483611385565b604051610490919061391d565b60405180910390f35b6104a16113a4565b005b6104bd60048036038101906104b89190613965565b61142c565b005b6104d960048036038101906104d49190613938565b611813565b005b6104f560048036038101906104f09190613682565b611921565b005b6104ff611a12565b60405161050c9190613631565b60405180910390f35b61052f600480360381019061052a9190613938565b611a3b565b60405161053c91906135d5565b60405180910390f35b61054d611a5b565b60405161055a919061391d565b60405180910390f35b61057d60048036038101906105789190613938565b611a61565b005b610587611b6f565b604051610594919061391d565b60405180910390f35b6105b760048036038101906105b29190613682565b611b74565b6040516105ca97969594939291906139a5565b60405180910390f35b6105ed60048036038101906105e89190613a14565b611c16565b005b610609600480360381019061060491906138ce565b6122a3565b005b61062560048036038101906106209190613938565b6123e9565b005b61062f612567565b60405161063c9190613631565b60405180910390f35b61065f600480360381019061065a9190613b57565b61258d565b60405161066c91906138b3565b60405180910390f35b61067d6125a2565b60405161068a919061391d565b60405180910390f35b6106ad60048036038101906106a89190613938565b6125a8565b6040516106ba919061391d565b60405180910390f35b6106dd60048036038101906106d89190613938565b6125c0565b005b6106e76126f0565b6040516106f4919061391d565b60405180910390f35b61071760048036038101906107129190613682565b6126f6565b005b610733600480360381019061072e9190613c26565b612eca565b60405161074091906138b3565b60405180910390f35b610763600480360381019061075e9190613938565b612edf565b005b61077f600480360381019061077a9190613938565b612fd7565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f457506107f3826130e5565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61082961314f565b73ffffffffffffffffffffffffffffffffffffffff16610847611a12565b73ffffffffffffffffffffffffffffffffffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089490613d1a565b60405180910390fd5b600081101580156108c957506064620f4240600a6108bb9190613d69565b6108c59190613df2565b8111155b610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613e95565b60405180910390fd5b80600a8190555050565b600063150b7a0260e01b9050949350505050565b61092e61314f565b73ffffffffffffffffffffffffffffffffffffffff1661094c611a12565b73ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613d1a565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6c57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613f27565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6064620f4240600a610ac69190613d69565b610ad09190613df2565b81565b60036020528060005260406000206000915054906101000a900460ff1681565b600081565b600e5481565b60076020528060005260406000206000915090505481565b610b1e61314f565b73ffffffffffffffffffffffffffffffffffffffff16610b3c611a12565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613d1a565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610c199190613631565b60405180910390a150565b610c2c61314f565b73ffffffffffffffffffffffffffffffffffffffff16610c4a611a12565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613d1a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610d279190613631565b60405180910390a150565b60026001541415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613f93565b60405180910390fd5b6002600181905550610d8861314f565b73ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614025565b60405180910390fd5b6000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600260008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611050578060a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30610ff661314f565b84602001516040518463ffffffff1660e01b815260040161101993929190614045565b600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b5050505061112c565b600360008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b578060a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a306110cf61314f565b846020015185604001516040518563ffffffff1660e01b81526004016110f894939291906140b3565b600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b505050505b5b60056000838152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505080602001518160a0015173ffffffffffffffffffffffffffffffffffffffff16837f9a6b35ee285392e8eb213e5184af2b520faed9b903fddfea170510591d056cb760405160405180910390a4506001808190555050565b61123761314f565b73ffffffffffffffffffffffffffffffffffffffff16611255611a12565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061417d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60026020528060005260406000206000915054906101000a900460ff1681565b6064620f4240600a6113979190613d69565b6113a19190613df2565b81565b6113ac61314f565b73ffffffffffffffffffffffffffffffffffffffff166113ca611a12565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613d1a565b60405180910390fd5b61142a6000613157565b565b6000600560008481526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000816020015114156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906141e9565b60405180910390fd5b6115c861314f565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163090614255565b60405180910390fd5b600660008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115806116ce57506000600660008360a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b61170d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611704906142e7565b60405180910390fd5b600760008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611761575060008214155b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790614379565b60405180910390fd5b6000816080015190508282608001818152505081602001518260a0015173ffffffffffffffffffffffffffffffffffffffff16857f8b5c3e60125dcfa034fa05a3bc5936e91ef3ce11947807c64c8ea198aecaa2718487604051611805929190614399565b60405180910390a450505050565b61181b61314f565b73ffffffffffffffffffffffffffffffffffffffff16611839611a12565b73ffffffffffffffffffffffffffffffffffffffff161461188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613d1a565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f816040516119169190613631565b60405180910390a150565b61192961314f565b73ffffffffffffffffffffffffffffffffffffffff16611947611a12565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613d1a565b60405180910390fd5b600081101580156119c957506064620f4240600a6119bb9190613d69565b6119c59190613df2565b8111155b611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90614434565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600a5481565b611a6961314f565b73ffffffffffffffffffffffffffffffffffffffff16611a87611a12565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613d1a565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611b649190613631565b60405180910390a150565b600081565b60056020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905087565b6000831415611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906144a0565b60405180910390fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cfb5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d319061450c565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614578565b60405180910390fd5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111580611e5357506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142e7565b60405180910390fd5b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611ee2575060008214155b611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614379565b60405180910390fd5b6001600e6000828254611f349190614598565b92505081905550600060056000600e5481526020019081526020016000209050600e548160000181905550838160010181905550818160020181905550858160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fbc61314f565b8160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160040181905550848160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561215a57600182146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614660565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e61210361314f565b30876040518463ffffffff1660e01b815260040161212393929190614045565b600060405180830381600087803b15801561213d57600080fd5b505af1158015612151573d6000803e3d6000fd5b50505050612226565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612225578573ffffffffffffffffffffffffffffffffffffffff1663f242432a6121d061314f565b3087866040518563ffffffff1660e01b81526004016121f294939291906140b3565b600060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b505050505b5b8573ffffffffffffffffffffffffffffffffffffffff1661224561314f565b73ffffffffffffffffffffffffffffffffffffffff16857f3aaa280a8041ed5527c779fa4743a630db39846bb549ac7a52d2f9b78ef2fe4f85600e548a896040516122939493929190614680565b60405180910390a4505050505050565b6122ab61314f565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a12565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613d1a565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890614737565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6123f161314f565b73ffffffffffffffffffffffffffffffffffffffff1661240f611a12565b73ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc906147a3565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f636dc55442e1c73ff1acc6b88f4522b3b047cd6b5b53076466fe6efc132b7d978160405161255c9190613631565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c8160e01b905095945050505050565b600b5481565b60066020528060005260406000206000915090505481565b6125c861314f565b73ffffffffffffffffffffffffffffffffffffffff166125e6611a12565b73ffffffffffffffffffffffffffffffffffffffff161461263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614835565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6002600154141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613f93565b60405180910390fd5b60026001819055506000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000816020015114156128d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cf906141e9565b60405180910390fd5b6000620f4240600a5483608001516128f09190613d69565b6128fa9190613df2565b90508060085461290a9190614598565b6008819055506000620f4240600b5484608001516129289190613d69565b6129329190613df2565b9050806009546129429190614598565b60098190555060008183856080015161295b9190614855565b6129659190614855565b905060008460c00151905084608001518173ffffffffffffffffffffffffffffffffffffffff166370a0823161299961314f565b6040518263ffffffff1660e01b81526004016129b59190613631565b602060405180830381865afa1580156129d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f6919061489e565b1015612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061493d565b60405180910390fd5b84608001518173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612a6061314f565b306040518363ffffffff1660e01b8152600401612a7e92919061495d565b602060405180830381865afa158015612a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abf919061489e565b1015612b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af790614a1e565b60405180910390fd5b612b38612b0b61314f565b8660600151848473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b6000841115612b9857612b97612b4c61314f565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b5b6000831115612bf857612bf7612bac61314f565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b5b600260008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd1578460a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30612c7761314f565b88602001516040518463ffffffff1660e01b8152600401612c9a93929190614045565b600060405180830381600087803b158015612cb457600080fd5b505af1158015612cc8573d6000803e3d6000fd5b50505050612dad565b600360008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dac578460a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a30612d5061314f565b886020015189604001516040518563ffffffff1660e01b8152600401612d7994939291906140b3565b600060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050505b5b84602001517f5ed2283a84be92aa3d96afceb486f7904c7a63a11cf51985e529e554440566b3878760a0015188604001518960600151612deb61314f565b8b60c001518c60800151604051612e089796959493929190614a3e565b60405180910390a260056000878152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050506001808190555050565b600063f23a6e6160e01b905095945050505050565b612ee761314f565b73ffffffffffffffffffffffffffffffffffffffff16612f05611a12565b73ffffffffffffffffffffffffffffffffffffffff1614612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc290614b1f565b60405180910390fd5b612fd481613157565b50565b612fdf61314f565b73ffffffffffffffffffffffffffffffffffffffff16612ffd611a12565b73ffffffffffffffffffffffffffffffffffffffff1614613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a90613d1a565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9e7e7de58452376347303ed83ad0a3680a82bcb8bfe7541fb27efba64adf6a816040516130da9190613631565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61329e846323b872dd60e01b85858560405160240161323c93929190614045565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506132a4565b50505050565b6000613306826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661336b9092919063ffffffff16565b905060008151111561336657808060200190518101906133269190614b6b565b613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335c90614c0a565b60405180910390fd5b5b505050565b606061337a8484600085613383565b90509392505050565b6060824710156133c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bf90614c9c565b60405180910390fd5b6133d185613497565b613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340790614d08565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516134399190614da2565b60006040518083038185875af1925050503d8060008114613476576040519150601f19603f3d011682016040523d82523d6000602084013e61347b565b606091505b509150915061348b8282866134ba565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156134ca5782905061351a565b6000835111156134dd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135119190614dfd565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61356a81613535565b811461357557600080fd5b50565b60008135905061358781613561565b92915050565b6000602082840312156135a3576135a261352b565b5b60006135b184828501613578565b91505092915050565b60008115159050919050565b6135cf816135ba565b82525050565b60006020820190506135ea60008301846135c6565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b82525050565b60006020820190506136466000830184613622565b92915050565b6000819050919050565b61365f8161364c565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b6000602082840312156136985761369761352b565b5b60006136a68482850161366d565b91505092915050565b6136b881613610565b81146136c357600080fd5b50565b6000813590506136d5816136af565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61372e826136e5565b810181811067ffffffffffffffff8211171561374d5761374c6136f6565b5b80604052505050565b6000613760613521565b905061376c8282613725565b919050565b600067ffffffffffffffff82111561378c5761378b6136f6565b5b613795826136e5565b9050602081019050919050565b82818337600083830152505050565b60006137c46137bf84613771565b613756565b9050828152602081018484840111156137e0576137df6136e0565b5b6137eb8482856137a2565b509392505050565b600082601f830112613808576138076136db565b5b81356138188482602086016137b1565b91505092915050565b6000806000806080858703121561383b5761383a61352b565b5b6000613849878288016136c6565b945050602061385a878288016136c6565b935050604061386b8782880161366d565b925050606085013567ffffffffffffffff81111561388c5761388b613530565b5b613898878288016137f3565b91505092959194509250565b6138ad81613535565b82525050565b60006020820190506138c860008301846138a4565b92915050565b600080604083850312156138e5576138e461352b565b5b60006138f3858286016136c6565b92505060206139048582860161366d565b9150509250929050565b6139178161364c565b82525050565b6000602082019050613932600083018461390e565b92915050565b60006020828403121561394e5761394d61352b565b5b600061395c848285016136c6565b91505092915050565b6000806040838503121561397c5761397b61352b565b5b600061398a8582860161366d565b925050602061399b8582860161366d565b9150509250929050565b600060e0820190506139ba600083018a61390e565b6139c7602083018961390e565b6139d4604083018861390e565b6139e16060830187613622565b6139ee608083018661390e565b6139fb60a0830185613622565b613a0860c0830184613622565b98975050505050505050565b600080600080600060a08688031215613a3057613a2f61352b565b5b6000613a3e888289016136c6565b9550506020613a4f888289016136c6565b9450506040613a608882890161366d565b9350506060613a718882890161366d565b9250506080613a828882890161366d565b9150509295509295909350565b600067ffffffffffffffff821115613aaa57613aa96136f6565b5b602082029050602081019050919050565b600080fd5b6000613ad3613ace84613a8f565b613756565b90508083825260208201905060208402830185811115613af657613af5613abb565b5b835b81811015613b1f5780613b0b888261366d565b845260208401935050602081019050613af8565b5050509392505050565b600082601f830112613b3e57613b3d6136db565b5b8135613b4e848260208601613ac0565b91505092915050565b600080600080600060a08688031215613b7357613b7261352b565b5b6000613b81888289016136c6565b9550506020613b92888289016136c6565b945050604086013567ffffffffffffffff811115613bb357613bb2613530565b5b613bbf88828901613b29565b935050606086013567ffffffffffffffff811115613be057613bdf613530565b5b613bec88828901613b29565b925050608086013567ffffffffffffffff811115613c0d57613c0c613530565b5b613c19888289016137f3565b9150509295509295909350565b600080600080600060a08688031215613c4257613c4161352b565b5b6000613c50888289016136c6565b9550506020613c61888289016136c6565b9450506040613c728882890161366d565b9350506060613c838882890161366d565b925050608086013567ffffffffffffffff811115613ca457613ca3613530565b5b613cb0888289016137f3565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d04602083613cbd565b9150613d0f82613cce565b602082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d748261364c565b9150613d7f8361364c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613db857613db7613d3a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dfd8261364c565b9150613e088361364c565b925082613e1857613e17613dc3565b5b828204905092915050565b7f4e46544d61726b65743a205f7472616e73616374696f6e466565206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000613e7f602f83613cbd565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f4e46544d61726b65743a206d696e4c696d69742063616e206e6f74206265206c60008201527f6172676572207468616e206d6178206c696d6974210000000000000000000000602082015250565b6000613f11603583613cbd565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f7d601f83613cbd565b9150613f8882613f47565b602082019050919050565b60006020820190508181036000830152613fac81613f70565b9050919050565b7f4e46544d61726b65743a2063616e63656c2063616c6c6572206973206e6f742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061400f602583613cbd565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b600060608201905061405a6000830186613622565b6140676020830185613622565b614074604083018461390e565b949350505050565b600082825260208201905092915050565b50565b600061409d60008361407c565b91506140a88261408d565b600082019050919050565b600060a0820190506140c86000830187613622565b6140d56020830186613622565b6140e2604083018561390e565b6140ef606083018461390e565b818103608083015261410081614090565b905095945050505050565b7f4e46544d61726b65743a2066656520726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b6000614167602f83613cbd565b91506141728261410b565b604082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e46544d61726b65743a204e465420646f6573206e6f74206578697374000000600082015250565b60006141d3601d83613cbd565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f4e46544d61726b65743a2063616c6c6572206973206e6f74206f776e65720000600082015250565b600061423f601e83613cbd565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b7f4e46544d61726b65743a204d6178696d756d207072696365206c696d6974206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006142d1602783613cbd565b91506142dc82614275565b604082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f4e46544d61726b65743a2042656c6f7720746865206d696e696d756d2070726960008201527f6365206c696d6974000000000000000000000000000000000000000000000000602082015250565b6000614363602883613cbd565b915061436e82614307565b604082019050919050565b6000602082019050818103600083015261439281614356565b9050919050565b60006040820190506143ae600083018561390e565b6143bb602083018461390e565b9392505050565b7f4e46544d61726b65743a205f7472616e73616374696f6e546178206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b600061441e602f83613cbd565b9150614429826143c2565b604082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b7f4e46544d61726b65743a20746f6b656e49642063616e206e6f74206265203021600082015250565b600061448a602083613cbd565b915061449582614454565b602082019050919050565b600060208201905081810360008301526144b98161447d565b9050919050565b7f4e46544d61726b65743a20556e737570706f72746564204e4654000000000000600082015250565b60006144f6601a83613cbd565b9150614501826144c0565b602082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4e46544d61726b65743a20556e737570706f7274656420746f6b656e73000000600082015250565b6000614562601d83613cbd565b915061456d8261452c565b602082019050919050565b6000602082019050818103600083015261459181614555565b9050919050565b60006145a38261364c565b91506145ae8361364c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145e3576145e2613d3a565b5b828201905092915050565b7f4e46544d61726b65743a2045524337323120616d6f756e74206d75737420626560008201527f2031200000000000000000000000000000000000000000000000000000000000602082015250565b600061464a602383613cbd565b9150614655826145ee565b604082019050919050565b600060208201905081810360008301526146798161463d565b9050919050565b6000608082019050614695600083018761390e565b6146a2602083018661390e565b6146af6040830185613622565b6146bc606083018461390e565b95945050505050565b7f4e46544d61726b65743a206d61784c696d69742063616e206e6f74206265206c60008201527f657373207468616e206d696e206c696d69742100000000000000000000000000602082015250565b6000614721603383613cbd565b915061472c826146c5565b604082019050919050565b6000602082019050818103600083015261475081614714565b9050919050565b7f4e46544d61726b65743a2045524332302061646472657373206973207a65726f600082015250565b600061478d602083613cbd565b915061479882614757565b602082019050919050565b600060208201905081810360008301526147bc81614780565b9050919050565b7f4e46544d61726b65743a2074617820726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b600061481f602f83613cbd565b915061482a826147c3565b604082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b60006148608261364c565b915061486b8361364c565b92508282101561487e5761487d613d3a565b5b828203905092915050565b60008151905061489881613656565b92915050565b6000602082840312156148b4576148b361352b565b5b60006148c284828501614889565b91505092915050565b7f42454e46544d61726b65743a20627579657220646f65736e277420686176652060008201527f656e6f75676820746f6b656e20746f206275792074686973206974656d000000602082015250565b6000614927603d83613cbd565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b60006040820190506149726000830185613622565b61497f6020830184613622565b9392505050565b7f42454e46544d61726b65743a20627579657220646f65736e277420617070726f60008201527f7665206d61726b6574706c61636520746f207370656e64207061796d656e742060208201527f616d6f756e740000000000000000000000000000000000000000000000000000604082015250565b6000614a08604683613cbd565b9150614a1382614986565b606082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b600060e082019050614a53600083018a61390e565b614a606020830189613622565b614a6d604083018861390e565b614a7a6060830187613622565b614a876080830186613622565b614a9460a0830185613622565b614aa160c083018461390e565b98975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b09602683613cbd565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b614b48816135ba565b8114614b5357600080fd5b50565b600081519050614b6581614b3f565b92915050565b600060208284031215614b8157614b8061352b565b5b6000614b8f84828501614b56565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614bf4602a83613cbd565b9150614bff82614b98565b604082019050919050565b60006020820190508181036000830152614c2381614be7565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c86602683613cbd565b9150614c9182614c2a565b604082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614cf2601d83613cbd565b9150614cfd82614cbc565b602082019050919050565b60006020820190508181036000830152614d2181614ce5565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015614d5c578082015181840152602081019050614d41565b83811115614d6b576000848401525b50505050565b6000614d7c82614d28565b614d868185614d33565b9350614d96818560208601614d3e565b80840191505092915050565b6000614dae8284614d71565b915081905092915050565b600081519050919050565b6000614dcf82614db9565b614dd98185613cbd565b9350614de9818560208601614d3e565b614df2816136e5565b840191505092915050565b60006020820190508181036000830152614e178184614dc4565b90509291505056fea264697066735822122030e4f335e1e104871b674ae97f70f4bd1dd0b4065beef587437c4fb02067840d64736f6c634300080a0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c80638d1400b41161013b578063bc1081e9116100b8578063d2d03a221161007c578063d2d03a22146106df578063d96a094a146106fd578063f23a6e6114610719578063f2fde38b14610749578063fdf397ee1461076557610248565b8063bc1081e914610627578063bc197c8114610645578063c179c58014610675578063c24bdfc614610693578063c68d20ab146106c357610248565b8063b18c1047116100ff578063b18c10471461057f578063b4a1753a1461059d578063b8a9ddeb146105d3578063b9c214a1146105ef578063b9d2df611461060b57610248565b80638d1400b4146104db5780638da5cb5b146104f75780639017f79e146105155780639ed3edf014610545578063a5f955581461056357610248565b806340a28c56116101c95780636d213f721161018d5780636d213f721461044b5780636f22d45b1461047b578063715018a61461049957806382367b2d146104a357806386847c70146104bf57610248565b806340a28c56146103bd578063498886ac146103d9578063514fcac7146103f5578063580bb9a5146104115780635a43c2e51461042d57610248565b806330681e631161021057806330681e6314610303578063322ba2c814610321578063348eff20146103515780633a27df071461036f5780633d19b4681461038d57610248565b806301ffc9a71461024d578063083d80f91461027d578063096a8ab71461029b578063150b7a02146102b757806328400cf3146102e7575b600080fd5b6102676004803603810190610262919061358d565b610781565b60405161027491906135d5565b60405180910390f35b6102856107fb565b6040516102929190613631565b60405180910390f35b6102b560048036038101906102b09190613682565b610821565b005b6102d160048036038101906102cc9190613821565b610912565b6040516102de91906138b3565b60405180910390f35b61030160048036038101906102fc91906138ce565b610926565b005b61030b610ab4565b604051610318919061391d565b60405180910390f35b61033b60048036038101906103369190613938565b610ad3565b60405161034891906135d5565b60405180910390f35b610359610af3565b604051610366919061391d565b60405180910390f35b610377610af8565b604051610384919061391d565b60405180910390f35b6103a760048036038101906103a29190613938565b610afe565b6040516103b4919061391d565b60405180910390f35b6103d760048036038101906103d29190613938565b610b16565b005b6103f360048036038101906103ee9190613938565b610c24565b005b61040f600480360381019061040a9190613682565b610d32565b005b61042b60048036038101906104269190613938565b61122f565b005b61043561135f565b604051610442919061391d565b60405180910390f35b61046560048036038101906104609190613938565b611365565b60405161047291906135d5565b60405180910390f35b610483611385565b604051610490919061391d565b60405180910390f35b6104a16113a4565b005b6104bd60048036038101906104b89190613965565b61142c565b005b6104d960048036038101906104d49190613938565b611813565b005b6104f560048036038101906104f09190613682565b611921565b005b6104ff611a12565b60405161050c9190613631565b60405180910390f35b61052f600480360381019061052a9190613938565b611a3b565b60405161053c91906135d5565b60405180910390f35b61054d611a5b565b60405161055a919061391d565b60405180910390f35b61057d60048036038101906105789190613938565b611a61565b005b610587611b6f565b604051610594919061391d565b60405180910390f35b6105b760048036038101906105b29190613682565b611b74565b6040516105ca97969594939291906139a5565b60405180910390f35b6105ed60048036038101906105e89190613a14565b611c16565b005b610609600480360381019061060491906138ce565b6122a3565b005b61062560048036038101906106209190613938565b6123e9565b005b61062f612567565b60405161063c9190613631565b60405180910390f35b61065f600480360381019061065a9190613b57565b61258d565b60405161066c91906138b3565b60405180910390f35b61067d6125a2565b60405161068a919061391d565b60405180910390f35b6106ad60048036038101906106a89190613938565b6125a8565b6040516106ba919061391d565b60405180910390f35b6106dd60048036038101906106d89190613938565b6125c0565b005b6106e76126f0565b6040516106f4919061391d565b60405180910390f35b61071760048036038101906107129190613682565b6126f6565b005b610733600480360381019061072e9190613c26565b612eca565b60405161074091906138b3565b60405180910390f35b610763600480360381019061075e9190613938565b612edf565b005b61077f600480360381019061077a9190613938565b612fd7565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f457506107f3826130e5565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61082961314f565b73ffffffffffffffffffffffffffffffffffffffff16610847611a12565b73ffffffffffffffffffffffffffffffffffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089490613d1a565b60405180910390fd5b600081101580156108c957506064620f4240600a6108bb9190613d69565b6108c59190613df2565b8111155b610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613e95565b60405180910390fd5b80600a8190555050565b600063150b7a0260e01b9050949350505050565b61092e61314f565b73ffffffffffffffffffffffffffffffffffffffff1661094c611a12565b73ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613d1a565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6c57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613f27565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6064620f4240600a610ac69190613d69565b610ad09190613df2565b81565b60036020528060005260406000206000915054906101000a900460ff1681565b600081565b600e5481565b60076020528060005260406000206000915090505481565b610b1e61314f565b73ffffffffffffffffffffffffffffffffffffffff16610b3c611a12565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613d1a565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610c199190613631565b60405180910390a150565b610c2c61314f565b73ffffffffffffffffffffffffffffffffffffffff16610c4a611a12565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613d1a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610d279190613631565b60405180910390a150565b60026001541415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613f93565b60405180910390fd5b6002600181905550610d8861314f565b73ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290614025565b60405180910390fd5b6000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600260008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611050578060a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30610ff661314f565b84602001516040518463ffffffff1660e01b815260040161101993929190614045565b600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b5050505061112c565b600360008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b578060a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a306110cf61314f565b846020015185604001516040518563ffffffff1660e01b81526004016110f894939291906140b3565b600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b505050505b5b60056000838152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505080602001518160a0015173ffffffffffffffffffffffffffffffffffffffff16837f9a6b35ee285392e8eb213e5184af2b520faed9b903fddfea170510591d056cb760405160405180910390a4506001808190555050565b61123761314f565b73ffffffffffffffffffffffffffffffffffffffff16611255611a12565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061417d565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60026020528060005260406000206000915054906101000a900460ff1681565b6064620f4240600a6113979190613d69565b6113a19190613df2565b81565b6113ac61314f565b73ffffffffffffffffffffffffffffffffffffffff166113ca611a12565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613d1a565b60405180910390fd5b61142a6000613157565b565b6000600560008481526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000816020015114156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b7906141e9565b60405180910390fd5b6115c861314f565b73ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614611639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163090614255565b60405180910390fd5b600660008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115806116ce57506000600660008360a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b61170d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611704906142e7565b60405180910390fd5b600760008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611761575060008214155b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790614379565b60405180910390fd5b6000816080015190508282608001818152505081602001518260a0015173ffffffffffffffffffffffffffffffffffffffff16857f8b5c3e60125dcfa034fa05a3bc5936e91ef3ce11947807c64c8ea198aecaa2718487604051611805929190614399565b60405180910390a450505050565b61181b61314f565b73ffffffffffffffffffffffffffffffffffffffff16611839611a12565b73ffffffffffffffffffffffffffffffffffffffff161461188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690613d1a565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f816040516119169190613631565b60405180910390a150565b61192961314f565b73ffffffffffffffffffffffffffffffffffffffff16611947611a12565b73ffffffffffffffffffffffffffffffffffffffff161461199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613d1a565b60405180910390fd5b600081101580156119c957506064620f4240600a6119bb9190613d69565b6119c59190613df2565b8111155b611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff90614434565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600a5481565b611a6961314f565b73ffffffffffffffffffffffffffffffffffffffff16611a87611a12565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613d1a565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611b649190613631565b60405180910390a150565b600081565b60056020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905087565b6000831415611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906144a0565b60405180910390fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611cfb5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d319061450c565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614578565b60405180910390fd5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111580611e5357506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906142e7565b60405180910390fd5b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611ee2575060008214155b611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614379565b60405180910390fd5b6001600e6000828254611f349190614598565b92505081905550600060056000600e5481526020019081526020016000209050600e548160000181905550838160010181905550818160020181905550858160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611fbc61314f565b8160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160040181905550848160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561215a57600182146120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614660565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e61210361314f565b30876040518463ffffffff1660e01b815260040161212393929190614045565b600060405180830381600087803b15801561213d57600080fd5b505af1158015612151573d6000803e3d6000fd5b50505050612226565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612225578573ffffffffffffffffffffffffffffffffffffffff1663f242432a6121d061314f565b3087866040518563ffffffff1660e01b81526004016121f294939291906140b3565b600060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b505050505b5b8573ffffffffffffffffffffffffffffffffffffffff1661224561314f565b73ffffffffffffffffffffffffffffffffffffffff16857f3aaa280a8041ed5527c779fa4743a630db39846bb549ac7a52d2f9b78ef2fe4f85600e548a896040516122939493929190614680565b60405180910390a4505050505050565b6122ab61314f565b73ffffffffffffffffffffffffffffffffffffffff166122c9611a12565b73ffffffffffffffffffffffffffffffffffffffff161461231f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231690613d1a565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548110156123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890614737565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6123f161314f565b73ffffffffffffffffffffffffffffffffffffffff1661240f611a12565b73ffffffffffffffffffffffffffffffffffffffff1614612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc906147a3565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f636dc55442e1c73ff1acc6b88f4522b3b047cd6b5b53076466fe6efc132b7d978160405161255c9190613631565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c8160e01b905095945050505050565b600b5481565b60066020528060005260406000206000915090505481565b6125c861314f565b73ffffffffffffffffffffffffffffffffffffffff166125e6611a12565b73ffffffffffffffffffffffffffffffffffffffff161461263c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263390613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614835565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b6002600154141561273c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273390613f93565b60405180910390fd5b60026001819055506000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090506000816020015114156128d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cf906141e9565b60405180910390fd5b6000620f4240600a5483608001516128f09190613d69565b6128fa9190613df2565b90508060085461290a9190614598565b6008819055506000620f4240600b5484608001516129289190613d69565b6129329190613df2565b9050806009546129429190614598565b60098190555060008183856080015161295b9190614855565b6129659190614855565b905060008460c00151905084608001518173ffffffffffffffffffffffffffffffffffffffff166370a0823161299961314f565b6040518263ffffffff1660e01b81526004016129b59190613631565b602060405180830381865afa1580156129d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f6919061489e565b1015612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061493d565b60405180910390fd5b84608001518173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e612a6061314f565b306040518363ffffffff1660e01b8152600401612a7e92919061495d565b602060405180830381865afa158015612a9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abf919061489e565b1015612b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af790614a1e565b60405180910390fd5b612b38612b0b61314f565b8660600151848473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b6000841115612b9857612b97612b4c61314f565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b5b6000831115612bf857612bf7612bac61314f565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858473ffffffffffffffffffffffffffffffffffffffff1661321b909392919063ffffffff16565b5b600260008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612cd1578460a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30612c7761314f565b88602001516040518463ffffffff1660e01b8152600401612c9a93929190614045565b600060405180830381600087803b158015612cb457600080fd5b505af1158015612cc8573d6000803e3d6000fd5b50505050612dad565b600360008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dac578460a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a30612d5061314f565b886020015189604001516040518563ffffffff1660e01b8152600401612d7994939291906140b3565b600060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050505b5b84602001517f5ed2283a84be92aa3d96afceb486f7904c7a63a11cf51985e529e554440566b3878760a0015188604001518960600151612deb61314f565b8b60c001518c60800151604051612e089796959493929190614a3e565b60405180910390a260056000878152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050506001808190555050565b600063f23a6e6160e01b905095945050505050565b612ee761314f565b73ffffffffffffffffffffffffffffffffffffffff16612f05611a12565b73ffffffffffffffffffffffffffffffffffffffff1614612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5290613d1a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc290614b1f565b60405180910390fd5b612fd481613157565b50565b612fdf61314f565b73ffffffffffffffffffffffffffffffffffffffff16612ffd611a12565b73ffffffffffffffffffffffffffffffffffffffff1614613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a90613d1a565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9e7e7de58452376347303ed83ad0a3680a82bcb8bfe7541fb27efba64adf6a816040516130da9190613631565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61329e846323b872dd60e01b85858560405160240161323c93929190614045565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506132a4565b50505050565b6000613306826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661336b9092919063ffffffff16565b905060008151111561336657808060200190518101906133269190614b6b565b613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335c90614c0a565b60405180910390fd5b5b505050565b606061337a8484600085613383565b90509392505050565b6060824710156133c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133bf90614c9c565b60405180910390fd5b6133d185613497565b613410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340790614d08565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516134399190614da2565b60006040518083038185875af1925050503d8060008114613476576040519150601f19603f3d011682016040523d82523d6000602084013e61347b565b606091505b509150915061348b8282866134ba565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156134ca5782905061351a565b6000835111156134dd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135119190614dfd565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61356a81613535565b811461357557600080fd5b50565b60008135905061358781613561565b92915050565b6000602082840312156135a3576135a261352b565b5b60006135b184828501613578565b91505092915050565b60008115159050919050565b6135cf816135ba565b82525050565b60006020820190506135ea60008301846135c6565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b82525050565b60006020820190506136466000830184613622565b92915050565b6000819050919050565b61365f8161364c565b811461366a57600080fd5b50565b60008135905061367c81613656565b92915050565b6000602082840312156136985761369761352b565b5b60006136a68482850161366d565b91505092915050565b6136b881613610565b81146136c357600080fd5b50565b6000813590506136d5816136af565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61372e826136e5565b810181811067ffffffffffffffff8211171561374d5761374c6136f6565b5b80604052505050565b6000613760613521565b905061376c8282613725565b919050565b600067ffffffffffffffff82111561378c5761378b6136f6565b5b613795826136e5565b9050602081019050919050565b82818337600083830152505050565b60006137c46137bf84613771565b613756565b9050828152602081018484840111156137e0576137df6136e0565b5b6137eb8482856137a2565b509392505050565b600082601f830112613808576138076136db565b5b81356138188482602086016137b1565b91505092915050565b6000806000806080858703121561383b5761383a61352b565b5b6000613849878288016136c6565b945050602061385a878288016136c6565b935050604061386b8782880161366d565b925050606085013567ffffffffffffffff81111561388c5761388b613530565b5b613898878288016137f3565b91505092959194509250565b6138ad81613535565b82525050565b60006020820190506138c860008301846138a4565b92915050565b600080604083850312156138e5576138e461352b565b5b60006138f3858286016136c6565b92505060206139048582860161366d565b9150509250929050565b6139178161364c565b82525050565b6000602082019050613932600083018461390e565b92915050565b60006020828403121561394e5761394d61352b565b5b600061395c848285016136c6565b91505092915050565b6000806040838503121561397c5761397b61352b565b5b600061398a8582860161366d565b925050602061399b8582860161366d565b9150509250929050565b600060e0820190506139ba600083018a61390e565b6139c7602083018961390e565b6139d4604083018861390e565b6139e16060830187613622565b6139ee608083018661390e565b6139fb60a0830185613622565b613a0860c0830184613622565b98975050505050505050565b600080600080600060a08688031215613a3057613a2f61352b565b5b6000613a3e888289016136c6565b9550506020613a4f888289016136c6565b9450506040613a608882890161366d565b9350506060613a718882890161366d565b9250506080613a828882890161366d565b9150509295509295909350565b600067ffffffffffffffff821115613aaa57613aa96136f6565b5b602082029050602081019050919050565b600080fd5b6000613ad3613ace84613a8f565b613756565b90508083825260208201905060208402830185811115613af657613af5613abb565b5b835b81811015613b1f5780613b0b888261366d565b845260208401935050602081019050613af8565b5050509392505050565b600082601f830112613b3e57613b3d6136db565b5b8135613b4e848260208601613ac0565b91505092915050565b600080600080600060a08688031215613b7357613b7261352b565b5b6000613b81888289016136c6565b9550506020613b92888289016136c6565b945050604086013567ffffffffffffffff811115613bb357613bb2613530565b5b613bbf88828901613b29565b935050606086013567ffffffffffffffff811115613be057613bdf613530565b5b613bec88828901613b29565b925050608086013567ffffffffffffffff811115613c0d57613c0c613530565b5b613c19888289016137f3565b9150509295509295909350565b600080600080600060a08688031215613c4257613c4161352b565b5b6000613c50888289016136c6565b9550506020613c61888289016136c6565b9450506040613c728882890161366d565b9350506060613c838882890161366d565b925050608086013567ffffffffffffffff811115613ca457613ca3613530565b5b613cb0888289016137f3565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d04602083613cbd565b9150613d0f82613cce565b602082019050919050565b60006020820190508181036000830152613d3381613cf7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d748261364c565b9150613d7f8361364c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613db857613db7613d3a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dfd8261364c565b9150613e088361364c565b925082613e1857613e17613dc3565b5b828204905092915050565b7f4e46544d61726b65743a205f7472616e73616374696f6e466565206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000613e7f602f83613cbd565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f4e46544d61726b65743a206d696e4c696d69742063616e206e6f74206265206c60008201527f6172676572207468616e206d6178206c696d6974210000000000000000000000602082015250565b6000613f11603583613cbd565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f7d601f83613cbd565b9150613f8882613f47565b602082019050919050565b60006020820190508181036000830152613fac81613f70565b9050919050565b7f4e46544d61726b65743a2063616e63656c2063616c6c6572206973206e6f742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061400f602583613cbd565b915061401a82613fb3565b604082019050919050565b6000602082019050818103600083015261403e81614002565b9050919050565b600060608201905061405a6000830186613622565b6140676020830185613622565b614074604083018461390e565b949350505050565b600082825260208201905092915050565b50565b600061409d60008361407c565b91506140a88261408d565b600082019050919050565b600060a0820190506140c86000830187613622565b6140d56020830186613622565b6140e2604083018561390e565b6140ef606083018461390e565b818103608083015261410081614090565b905095945050505050565b7f4e46544d61726b65743a2066656520726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b6000614167602f83613cbd565b91506141728261410b565b604082019050919050565b600060208201905081810360008301526141968161415a565b9050919050565b7f4e46544d61726b65743a204e465420646f6573206e6f74206578697374000000600082015250565b60006141d3601d83613cbd565b91506141de8261419d565b602082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f4e46544d61726b65743a2063616c6c6572206973206e6f74206f776e65720000600082015250565b600061423f601e83613cbd565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b7f4e46544d61726b65743a204d6178696d756d207072696365206c696d6974206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b60006142d1602783613cbd565b91506142dc82614275565b604082019050919050565b60006020820190508181036000830152614300816142c4565b9050919050565b7f4e46544d61726b65743a2042656c6f7720746865206d696e696d756d2070726960008201527f6365206c696d6974000000000000000000000000000000000000000000000000602082015250565b6000614363602883613cbd565b915061436e82614307565b604082019050919050565b6000602082019050818103600083015261439281614356565b9050919050565b60006040820190506143ae600083018561390e565b6143bb602083018461390e565b9392505050565b7f4e46544d61726b65743a205f7472616e73616374696f6e546178206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b600061441e602f83613cbd565b9150614429826143c2565b604082019050919050565b6000602082019050818103600083015261444d81614411565b9050919050565b7f4e46544d61726b65743a20746f6b656e49642063616e206e6f74206265203021600082015250565b600061448a602083613cbd565b915061449582614454565b602082019050919050565b600060208201905081810360008301526144b98161447d565b9050919050565b7f4e46544d61726b65743a20556e737570706f72746564204e4654000000000000600082015250565b60006144f6601a83613cbd565b9150614501826144c0565b602082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4e46544d61726b65743a20556e737570706f7274656420746f6b656e73000000600082015250565b6000614562601d83613cbd565b915061456d8261452c565b602082019050919050565b6000602082019050818103600083015261459181614555565b9050919050565b60006145a38261364c565b91506145ae8361364c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145e3576145e2613d3a565b5b828201905092915050565b7f4e46544d61726b65743a2045524337323120616d6f756e74206d75737420626560008201527f2031200000000000000000000000000000000000000000000000000000000000602082015250565b600061464a602383613cbd565b9150614655826145ee565b604082019050919050565b600060208201905081810360008301526146798161463d565b9050919050565b6000608082019050614695600083018761390e565b6146a2602083018661390e565b6146af6040830185613622565b6146bc606083018461390e565b95945050505050565b7f4e46544d61726b65743a206d61784c696d69742063616e206e6f74206265206c60008201527f657373207468616e206d696e206c696d69742100000000000000000000000000602082015250565b6000614721603383613cbd565b915061472c826146c5565b604082019050919050565b6000602082019050818103600083015261475081614714565b9050919050565b7f4e46544d61726b65743a2045524332302061646472657373206973207a65726f600082015250565b600061478d602083613cbd565b915061479882614757565b602082019050919050565b600060208201905081810360008301526147bc81614780565b9050919050565b7f4e46544d61726b65743a2074617820726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b600061481f602f83613cbd565b915061482a826147c3565b604082019050919050565b6000602082019050818103600083015261484e81614812565b9050919050565b60006148608261364c565b915061486b8361364c565b92508282101561487e5761487d613d3a565b5b828203905092915050565b60008151905061489881613656565b92915050565b6000602082840312156148b4576148b361352b565b5b60006148c284828501614889565b91505092915050565b7f42454e46544d61726b65743a20627579657220646f65736e277420686176652060008201527f656e6f75676820746f6b656e20746f206275792074686973206974656d000000602082015250565b6000614927603d83613cbd565b9150614932826148cb565b604082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b60006040820190506149726000830185613622565b61497f6020830184613622565b9392505050565b7f42454e46544d61726b65743a20627579657220646f65736e277420617070726f60008201527f7665206d61726b6574706c61636520746f207370656e64207061796d656e742060208201527f616d6f756e740000000000000000000000000000000000000000000000000000604082015250565b6000614a08604683613cbd565b9150614a1382614986565b606082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b600060e082019050614a53600083018a61390e565b614a606020830189613622565b614a6d604083018861390e565b614a7a6060830187613622565b614a876080830186613622565b614a9460a0830185613622565b614aa160c083018461390e565b98975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b09602683613cbd565b9150614b1482614aad565b604082019050919050565b60006020820190508181036000830152614b3881614afc565b9050919050565b614b48816135ba565b8114614b5357600080fd5b50565b600081519050614b6581614b3f565b92915050565b600060208284031215614b8157614b8061352b565b5b6000614b8f84828501614b56565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614bf4602a83613cbd565b9150614bff82614b98565b604082019050919050565b60006020820190508181036000830152614c2381614be7565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614c86602683613cbd565b9150614c9182614c2a565b604082019050919050565b60006020820190508181036000830152614cb581614c79565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614cf2601d83613cbd565b9150614cfd82614cbc565b602082019050919050565b60006020820190508181036000830152614d2181614ce5565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015614d5c578082015181840152602081019050614d41565b83811115614d6b576000848401525b50505050565b6000614d7c82614d28565b614d868185614d33565b9350614d96818560208601614d3e565b80840191505092915050565b6000614dae8284614d71565b915081905092915050565b600081519050919050565b6000614dcf82614db9565b614dd98185613cbd565b9350614de9818560208601614d3e565b614df2816136e5565b840191505092915050565b60006020820190508181036000830152614e178184614dc4565b90509291505056fea264697066735822122030e4f335e1e104871b674ae97f70f4bd1dd0b4065beef587437c4fb02067840d64736f6c634300080a0033", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"AddERC20Suppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"AddNFTSuppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"seller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"BuyOrder\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"CancelOrder\",\"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\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"priceOld\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"PriceUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"RemoveERC20Suppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"RemoveNFTSuppout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"SellOrder\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_TRANSACTION_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TRANSACTION_TAX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TRANSACTION_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TRANSACTION_TAX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"addERC1155Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"addERC20Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"addERC721Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc1155Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc20Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"erc721Supported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"feeToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nftPriceMaxLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nftPriceMinLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"orderInfos\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"removeERC1155Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20\",\"type\":\"address\"}],\"name\":\"removeERC20Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"}],\"name\":\"removeERC721Support\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_feeToAddress\",\"type\":\"address\"}],\"name\":\"setFeeToAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxLimit\",\"type\":\"uint256\"}],\"name\":\"setNFTPriceMaxLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"nftToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minLimit\",\"type\":\"uint256\"}],\"name\":\"setNFTPriceMinLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_taxToAddress\",\"type\":\"address\"}],\"name\":\"setTaxToAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transactionFee\",\"type\":\"uint256\"}],\"name\":\"setTransactionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_transactionTax\",\"type\":\"uint256\"}],\"name\":\"setTransactionTax\",\"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\":\"taxToAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tranFeeTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tranTaxTotal\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transactionFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transactionTax\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"orderId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"updatePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addERC1155Support(address)\":{\"details\":\"Add 1155 NFT support\"},\"addERC20Support(address)\":{\"details\":\"Add ERC20 support\"},\"addERC721Support(address)\":{\"details\":\"Add ERC20 support\"},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeERC1155Support(address)\":{\"details\":\"Remove 1155 NFT support\"},\"removeERC20Support(address)\":{\"details\":\"Remove ERC20 support\"},\"removeERC721Support(address)\":{\"details\":\"Remove 721 NFT support\"},\"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.\"},\"setFeeToAddress(address)\":{\"details\":\"Set the fee received address\"},\"setNFTPriceMaxLimit(address,uint256)\":{\"details\":\"Set the maximum price limit for NFT\"},\"setNFTPriceMinLimit(address,uint256)\":{\"details\":\"Set the minimum price limit for NFT\"},\"setTaxToAddress(address)\":{\"details\":\"Set the tax received address\"},\"setTransactionFee(uint256)\":{\"details\":\"Set the transaction fee\"},\"setTransactionTax(uint256)\":{\"details\":\"Set the transaction tax\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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\":{\"project:/contracts/market/BENftMarket.sol\":\"BENftMarket\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0x24e0364e503a9bbde94c715d26573a76f14cd2a202d45f96f52134ab806b67b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e12cbaa7378fd9b62280e4e1d164bedcb4399ce238f5f98fc0eefb7e50577981\",\"dweb:/ipfs/QmXRoFGUgfsaRkoPT5bxNMtSayKTQ8GZATLPXf69HcRA51\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0x0e9621f60b2faabe65549f7ed0f24e8853a45c1b7990d47e8160e523683f3935\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287a2f8d5814dd0f05f22b740f18ca8321acc21c9bd03a6cb2203ea626e2f3f2\",\"dweb:/ipfs/QmZRQv9iuwU817VuqkA2WweiaibKii69x9QxYBBEfbNEud\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x8e93de94c9062ebc94fb7e2e3929b0781ac6a2b7772e2f7a59045861c93e5be9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f920a631bf986c610fe573d3c70a2bb6f224f86f4a8550016470c7ee476c9ab5\",\"dweb:/ipfs/QmYzsyVMfnaREKHcHv5RPS8Xg5r1Q38E2SDsGBTnXeFWzb\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0xeb373f1fdc7b755c6a750123a9b9e3a8a02c1470042fd6505d875000a80bde0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0e28648f994abf1d6bc345644a361cc0b7efa544f8bc0c8ec26011fed85a91ec\",\"dweb:/ipfs/QmVVE7AiRjKaQYYji7TkjmTeVzGpNmms5eoxqTCfvvpj6D\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\":{\"keccak256\":\"0x2e024ca51ce5abe16c0d34e6992a1104f356e2244eb4ccbec970435e8b3405e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a74009db3c6fc8db851ba69ddb6795b5c1ef1120c5a00fd1a8dc3a717dd9d519\",\"dweb:/ipfs/QmZMk8Yh2X3gPS51ckUVLEXjZUhMSEeGApnA53WtjvLb9h\"]},\"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Receiver.sol\":{\"keccak256\":\"0x3dd5e1a66a56f30302108a1da97d677a42b1daa60e503696b2bcbbf3e4c95bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0808de0ae4918c664643c885ca7fa6503e8ef2bd75609dfc85152c0128a3422d\",\"dweb:/ipfs/QmNrhFC1XgBKuuxfahFeiwi1MCdu3FLNpHj2uStgmf4iJj\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbbc8ac883ac3c0078ce5ad3e288fbb3ffcc8a30c3a98c0fda0114d64fc44fca2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87a7a5d2f6f63f84598af02b8c50ca2df2631cb8ba2453e8d95fcb17e4be9824\",\"dweb:/ipfs/QmR76hqtAcRqoFj33tmNjcWTLrgNsAaakYwnKZ8zoJtKei\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4632c341a06ba5c079b51ca5a915efab4e6ab57735b37839b3e8365ff806a43e\",\"dweb:/ipfs/QmTHT3xHYed2wajEoA5qu7ii2BxLpPhQZHwAhtLK5Z7ANK\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\":{\"keccak256\":\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"project:/contracts/market/BENftMarket.sol\":{\"keccak256\":\"0x5d6fff649cd9f225ef1650309f81c96046a82d36ae84be1abcc114b6217c0bb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b69fb8b338f0cc2e340417a4f43152a43aa7e3cfbb9277a93b3e7e1eb7de6a8c\",\"dweb:/ipfs/QmdpN67KLnjoDzJxy1LVtJTetnEk9Wkqr6DULQm6NnRStB\"]}},\"version\":1}", + "bytecode": "0x60806040526064620f424060036200001891906200018a565b6200002491906200021a565b600a556064620f424060016200003b91906200018a565b6200004791906200021a565b600b553480156200005757600080fd5b50620000786200006c6200008560201b60201c565b6200008d60201b60201c565b6001808190555062000252565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620001978262000151565b9150620001a48362000151565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620001e057620001df6200015b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620002278262000151565b9150620002348362000151565b925082620002475762000246620001eb565b5b828204905092915050565b614dbf80620002626000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80638d1400b41161013b578063bc1081e9116100b8578063d2d03a221161007c578063d2d03a22146106df578063d96a094a146106fd578063f23a6e6114610719578063f2fde38b14610749578063fdf397ee1461076557610248565b8063bc1081e914610627578063bc197c8114610645578063c179c58014610675578063c24bdfc614610693578063c68d20ab146106c357610248565b8063b18c1047116100ff578063b18c10471461057f578063b4a1753a1461059d578063b8a9ddeb146105d3578063b9c214a1146105ef578063b9d2df611461060b57610248565b80638d1400b4146104db5780638da5cb5b146104f75780639017f79e146105155780639ed3edf014610545578063a5f955581461056357610248565b806340a28c56116101c95780636d213f721161018d5780636d213f721461044b5780636f22d45b1461047b578063715018a61461049957806382367b2d146104a357806386847c70146104bf57610248565b806340a28c56146103bd578063498886ac146103d9578063514fcac7146103f5578063580bb9a5146104115780635a43c2e51461042d57610248565b806330681e631161021057806330681e6314610303578063322ba2c814610321578063348eff20146103515780633a27df071461036f5780633d19b4681461038d57610248565b806301ffc9a71461024d578063083d80f91461027d578063096a8ab71461029b578063150b7a02146102b757806328400cf3146102e7575b600080fd5b610267600480360381019061026291906134f7565b610781565b604051610274919061353f565b60405180910390f35b6102856107fb565b604051610292919061359b565b60405180910390f35b6102b560048036038101906102b091906135ec565b610821565b005b6102d160048036038101906102cc919061378b565b610912565b6040516102de919061381d565b60405180910390f35b61030160048036038101906102fc9190613838565b610926565b005b61030b610ab4565b6040516103189190613887565b60405180910390f35b61033b600480360381019061033691906138a2565b610ad3565b604051610348919061353f565b60405180910390f35b610359610af3565b6040516103669190613887565b60405180910390f35b610377610af8565b6040516103849190613887565b60405180910390f35b6103a760048036038101906103a291906138a2565b610afe565b6040516103b49190613887565b60405180910390f35b6103d760048036038101906103d291906138a2565b610b16565b005b6103f360048036038101906103ee91906138a2565b610c24565b005b61040f600480360381019061040a91906135ec565b610d32565b005b61042b600480360381019061042691906138a2565b61122f565b005b61043561135f565b6040516104429190613887565b60405180910390f35b610465600480360381019061046091906138a2565b611365565b604051610472919061353f565b60405180910390f35b610483611385565b6040516104909190613887565b60405180910390f35b6104a16113a4565b005b6104bd60048036038101906104b891906138cf565b61142c565b005b6104d960048036038101906104d491906138a2565b61177d565b005b6104f560048036038101906104f091906135ec565b61188b565b005b6104ff61197c565b60405161050c919061359b565b60405180910390f35b61052f600480360381019061052a91906138a2565b6119a5565b60405161053c919061353f565b60405180910390f35b61054d6119c5565b60405161055a9190613887565b60405180910390f35b61057d600480360381019061057891906138a2565b6119cb565b005b610587611ad9565b6040516105949190613887565b60405180910390f35b6105b760048036038101906105b291906135ec565b611ade565b6040516105ca979695949392919061390f565b60405180910390f35b6105ed60048036038101906105e8919061397e565b611b80565b005b61060960048036038101906106049190613838565b61220d565b005b610625600480360381019061062091906138a2565b612353565b005b61062f6124d1565b60405161063c919061359b565b60405180910390f35b61065f600480360381019061065a9190613ac1565b6124f7565b60405161066c919061381d565b60405180910390f35b61067d61250c565b60405161068a9190613887565b60405180910390f35b6106ad60048036038101906106a891906138a2565b612512565b6040516106ba9190613887565b60405180910390f35b6106dd60048036038101906106d891906138a2565b61252a565b005b6106e761265a565b6040516106f49190613887565b60405180910390f35b610717600480360381019061071291906135ec565b612660565b005b610733600480360381019061072e9190613b90565b612e34565b604051610740919061381d565b60405180910390f35b610763600480360381019061075e91906138a2565b612e49565b005b61077f600480360381019061077a91906138a2565b612f41565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f457506107f38261304f565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108296130b9565b73ffffffffffffffffffffffffffffffffffffffff1661084761197c565b73ffffffffffffffffffffffffffffffffffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089490613c84565b60405180910390fd5b600081101580156108c957506064620f4240600a6108bb9190613cd3565b6108c59190613d5c565b8111155b610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613dff565b60405180910390fd5b80600a8190555050565b600063150b7a0260e01b9050949350505050565b61092e6130b9565b73ffffffffffffffffffffffffffffffffffffffff1661094c61197c565b73ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613c84565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6c57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613e91565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6064620f4240600a610ac69190613cd3565b610ad09190613d5c565b81565b60036020528060005260406000206000915054906101000a900460ff1681565b600081565b600e5481565b60076020528060005260406000206000915090505481565b610b1e6130b9565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61197c565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613c84565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610c19919061359b565b60405180910390a150565b610c2c6130b9565b73ffffffffffffffffffffffffffffffffffffffff16610c4a61197c565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613c84565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610d27919061359b565b60405180910390a150565b60026001541415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613efd565b60405180910390fd5b6002600181905550610d886130b9565b73ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613f8f565b60405180910390fd5b6000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600260008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611050578060a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30610ff66130b9565b84602001516040518463ffffffff1660e01b815260040161101993929190613faf565b600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b5050505061112c565b600360008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b578060a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a306110cf6130b9565b846020015185604001516040518563ffffffff1660e01b81526004016110f8949392919061401d565b600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b505050505b5b60056000838152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505080602001518160a0015173ffffffffffffffffffffffffffffffffffffffff16837f9a6b35ee285392e8eb213e5184af2b520faed9b903fddfea170510591d056cb760405160405180910390a4506001808190555050565b6112376130b9565b73ffffffffffffffffffffffffffffffffffffffff1661125561197c565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906140e7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60026020528060005260406000206000915054906101000a900460ff1681565b6064620f4240600a6113979190613cd3565b6113a19190613d5c565b81565b6113ac6130b9565b73ffffffffffffffffffffffffffffffffffffffff166113ca61197c565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613c84565b60405180910390fd5b61142a60006130c1565b565b600060056000848152602001908152602001600020905060008160010154141561148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614153565b60405180910390fd5b6114936130b9565b73ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906141bf565b60405180910390fd5b600660008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115806115f957506000600660008360050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614251565b60405180910390fd5b600760008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482101580156116ac575060008214155b6116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906142e3565b60405180910390fd5b60008160040154905082826004018190555081600101548260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16857f8b5c3e60125dcfa034fa05a3bc5936e91ef3ce11947807c64c8ea198aecaa271848760405161176f929190614303565b60405180910390a450505050565b6117856130b9565b73ffffffffffffffffffffffffffffffffffffffff166117a361197c565b73ffffffffffffffffffffffffffffffffffffffff16146117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613c84565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611880919061359b565b60405180910390a150565b6118936130b9565b73ffffffffffffffffffffffffffffffffffffffff166118b161197c565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613c84565b60405180910390fd5b6000811015801561193357506064620f4240600a6119259190613cd3565b61192f9190613d5c565b8111155b611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061439e565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600a5481565b6119d36130b9565b73ffffffffffffffffffffffffffffffffffffffff166119f161197c565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613c84565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611ace919061359b565b60405180910390a150565b600081565b60056020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905087565b6000831415611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061440a565b60405180910390fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c655750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90614476565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d27906144e2565b60405180910390fd5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111580611dbd57506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614251565b60405180910390fd5b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611e4c575060008214155b611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e82906142e3565b60405180910390fd5b6001600e6000828254611e9e9190614502565b92505081905550600060056000600e5481526020019081526020016000209050600e548160000181905550838160010181905550818160020181905550858160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f266130b9565b8160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160040181905550848160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c45760018214612049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612040906145ca565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e61206d6130b9565b30876040518463ffffffff1660e01b815260040161208d93929190613faf565b600060405180830381600087803b1580156120a757600080fd5b505af11580156120bb573d6000803e3d6000fd5b50505050612190565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561218f578573ffffffffffffffffffffffffffffffffffffffff1663f242432a61213a6130b9565b3087866040518563ffffffff1660e01b815260040161215c949392919061401d565b600060405180830381600087803b15801561217657600080fd5b505af115801561218a573d6000803e3d6000fd5b505050505b5b8573ffffffffffffffffffffffffffffffffffffffff166121af6130b9565b73ffffffffffffffffffffffffffffffffffffffff16857f3aaa280a8041ed5527c779fa4743a630db39846bb549ac7a52d2f9b78ef2fe4f85600e548a896040516121fd94939291906145ea565b60405180910390a4505050505050565b6122156130b9565b73ffffffffffffffffffffffffffffffffffffffff1661223361197c565b73ffffffffffffffffffffffffffffffffffffffff1614612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090613c84565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906146a1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61235b6130b9565b73ffffffffffffffffffffffffffffffffffffffff1661237961197c565b73ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124369061470d565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f636dc55442e1c73ff1acc6b88f4522b3b047cd6b5b53076466fe6efc132b7d97816040516124c6919061359b565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c8160e01b905095945050505050565b600b5481565b60066020528060005260406000206000915090505481565b6125326130b9565b73ffffffffffffffffffffffffffffffffffffffff1661255061197c565b73ffffffffffffffffffffffffffffffffffffffff16146125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d9061479f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600260015414156126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90613efd565b60405180910390fd5b60026001819055506000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600081602001511415612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614153565b60405180910390fd5b6000620f4240600a54836080015161285a9190613cd3565b6128649190613d5c565b9050806008546128749190614502565b6008819055506000620f4240600b5484608001516128929190613cd3565b61289c9190613d5c565b9050806009546128ac9190614502565b6009819055506000818385608001516128c591906147bf565b6128cf91906147bf565b905060008460c00151905084608001518173ffffffffffffffffffffffffffffffffffffffff166370a082316129036130b9565b6040518263ffffffff1660e01b815260040161291f919061359b565b602060405180830381865afa15801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190614808565b10156129a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612998906148a7565b60405180910390fd5b84608001518173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6129ca6130b9565b306040518363ffffffff1660e01b81526004016129e89291906148c7565b602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a299190614808565b1015612a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6190614988565b60405180910390fd5b612aa2612a756130b9565b8660600151848473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b6000841115612b0257612b01612ab66130b9565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b5b6000831115612b6257612b61612b166130b9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b5b600260008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c3b578460a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30612be16130b9565b88602001516040518463ffffffff1660e01b8152600401612c0493929190613faf565b600060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b50505050612d17565b600360008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d16578460a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a30612cba6130b9565b886020015189604001516040518563ffffffff1660e01b8152600401612ce3949392919061401d565b600060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b505050505b5b84602001517f5ed2283a84be92aa3d96afceb486f7904c7a63a11cf51985e529e554440566b3878760a0015188604001518960600151612d556130b9565b8b60c001518c60800151604051612d7297969594939291906149a8565b60405180910390a260056000878152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050506001808190555050565b600063f23a6e6160e01b905095945050505050565b612e516130b9565b73ffffffffffffffffffffffffffffffffffffffff16612e6f61197c565b73ffffffffffffffffffffffffffffffffffffffff1614612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2c90614a89565b60405180910390fd5b612f3e816130c1565b50565b612f496130b9565b73ffffffffffffffffffffffffffffffffffffffff16612f6761197c565b73ffffffffffffffffffffffffffffffffffffffff1614612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490613c84565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9e7e7de58452376347303ed83ad0a3680a82bcb8bfe7541fb27efba64adf6a81604051613044919061359b565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613208846323b872dd60e01b8585856040516024016131a693929190613faf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061320e565b50505050565b6000613270826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132d59092919063ffffffff16565b90506000815111156132d057808060200190518101906132909190614ad5565b6132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c690614b74565b60405180910390fd5b5b505050565b60606132e484846000856132ed565b90509392505050565b606082471015613332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332990614c06565b60405180910390fd5b61333b85613401565b61337a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337190614c72565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516133a39190614d0c565b60006040518083038185875af1925050503d80600081146133e0576040519150601f19603f3d011682016040523d82523d6000602084013e6133e5565b606091505b50915091506133f5828286613424565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561343457829050613484565b6000835111156134475782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347b9190614d67565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134d48161349f565b81146134df57600080fd5b50565b6000813590506134f1816134cb565b92915050565b60006020828403121561350d5761350c613495565b5b600061351b848285016134e2565b91505092915050565b60008115159050919050565b61353981613524565b82525050565b60006020820190506135546000830184613530565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135858261355a565b9050919050565b6135958161357a565b82525050565b60006020820190506135b0600083018461358c565b92915050565b6000819050919050565b6135c9816135b6565b81146135d457600080fd5b50565b6000813590506135e6816135c0565b92915050565b60006020828403121561360257613601613495565b5b6000613610848285016135d7565b91505092915050565b6136228161357a565b811461362d57600080fd5b50565b60008135905061363f81613619565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136988261364f565b810181811067ffffffffffffffff821117156136b7576136b6613660565b5b80604052505050565b60006136ca61348b565b90506136d6828261368f565b919050565b600067ffffffffffffffff8211156136f6576136f5613660565b5b6136ff8261364f565b9050602081019050919050565b82818337600083830152505050565b600061372e613729846136db565b6136c0565b90508281526020810184848401111561374a5761374961364a565b5b61375584828561370c565b509392505050565b600082601f83011261377257613771613645565b5b813561378284826020860161371b565b91505092915050565b600080600080608085870312156137a5576137a4613495565b5b60006137b387828801613630565b94505060206137c487828801613630565b93505060406137d5878288016135d7565b925050606085013567ffffffffffffffff8111156137f6576137f561349a565b5b6138028782880161375d565b91505092959194509250565b6138178161349f565b82525050565b6000602082019050613832600083018461380e565b92915050565b6000806040838503121561384f5761384e613495565b5b600061385d85828601613630565b925050602061386e858286016135d7565b9150509250929050565b613881816135b6565b82525050565b600060208201905061389c6000830184613878565b92915050565b6000602082840312156138b8576138b7613495565b5b60006138c684828501613630565b91505092915050565b600080604083850312156138e6576138e5613495565b5b60006138f4858286016135d7565b9250506020613905858286016135d7565b9150509250929050565b600060e082019050613924600083018a613878565b6139316020830189613878565b61393e6040830188613878565b61394b606083018761358c565b6139586080830186613878565b61396560a083018561358c565b61397260c083018461358c565b98975050505050505050565b600080600080600060a0868803121561399a57613999613495565b5b60006139a888828901613630565b95505060206139b988828901613630565b94505060406139ca888289016135d7565b93505060606139db888289016135d7565b92505060806139ec888289016135d7565b9150509295509295909350565b600067ffffffffffffffff821115613a1457613a13613660565b5b602082029050602081019050919050565b600080fd5b6000613a3d613a38846139f9565b6136c0565b90508083825260208201905060208402830185811115613a6057613a5f613a25565b5b835b81811015613a895780613a7588826135d7565b845260208401935050602081019050613a62565b5050509392505050565b600082601f830112613aa857613aa7613645565b5b8135613ab8848260208601613a2a565b91505092915050565b600080600080600060a08688031215613add57613adc613495565b5b6000613aeb88828901613630565b9550506020613afc88828901613630565b945050604086013567ffffffffffffffff811115613b1d57613b1c61349a565b5b613b2988828901613a93565b935050606086013567ffffffffffffffff811115613b4a57613b4961349a565b5b613b5688828901613a93565b925050608086013567ffffffffffffffff811115613b7757613b7661349a565b5b613b838882890161375d565b9150509295509295909350565b600080600080600060a08688031215613bac57613bab613495565b5b6000613bba88828901613630565b9550506020613bcb88828901613630565b9450506040613bdc888289016135d7565b9350506060613bed888289016135d7565b925050608086013567ffffffffffffffff811115613c0e57613c0d61349a565b5b613c1a8882890161375d565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c6e602083613c27565b9150613c7982613c38565b602082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cde826135b6565b9150613ce9836135b6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2257613d21613ca4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d67826135b6565b9150613d72836135b6565b925082613d8257613d81613d2d565b5b828204905092915050565b7f4e46544d61726b65743a205f7472616e73616374696f6e466565206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000613de9602f83613c27565b9150613df482613d8d565b604082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f4e46544d61726b65743a206d696e4c696d69742063616e206e6f74206265206c60008201527f6172676572207468616e206d6178206c696d6974210000000000000000000000602082015250565b6000613e7b603583613c27565b9150613e8682613e1f565b604082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613ee7601f83613c27565b9150613ef282613eb1565b602082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4e46544d61726b65743a2063616e63656c2063616c6c6572206973206e6f742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602583613c27565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b6000606082019050613fc4600083018661358c565b613fd1602083018561358c565b613fde6040830184613878565b949350505050565b600082825260208201905092915050565b50565b6000614007600083613fe6565b915061401282613ff7565b600082019050919050565b600060a082019050614032600083018761358c565b61403f602083018661358c565b61404c6040830185613878565b6140596060830184613878565b818103608083015261406a81613ffa565b905095945050505050565b7f4e46544d61726b65743a2066656520726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b60006140d1602f83613c27565b91506140dc82614075565b604082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b7f4e46544d61726b65743a204e465420646f6573206e6f74206578697374000000600082015250565b600061413d601d83613c27565b915061414882614107565b602082019050919050565b6000602082019050818103600083015261416c81614130565b9050919050565b7f4e46544d61726b65743a2063616c6c6572206973206e6f74206f776e65720000600082015250565b60006141a9601e83613c27565b91506141b482614173565b602082019050919050565b600060208201905081810360008301526141d88161419c565b9050919050565b7f4e46544d61726b65743a204d6178696d756d207072696365206c696d6974206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b600061423b602783613c27565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f4e46544d61726b65743a2042656c6f7720746865206d696e696d756d2070726960008201527f6365206c696d6974000000000000000000000000000000000000000000000000602082015250565b60006142cd602883613c27565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b60006040820190506143186000830185613878565b6143256020830184613878565b9392505050565b7f4e46544d61726b65743a205f7472616e73616374696f6e546178206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000614388602f83613c27565b91506143938261432c565b604082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f4e46544d61726b65743a20746f6b656e49642063616e206e6f74206265203021600082015250565b60006143f4602083613c27565b91506143ff826143be565b602082019050919050565b60006020820190508181036000830152614423816143e7565b9050919050565b7f4e46544d61726b65743a20556e737570706f72746564204e4654000000000000600082015250565b6000614460601a83613c27565b915061446b8261442a565b602082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4e46544d61726b65743a20556e737570706f7274656420746f6b656e73000000600082015250565b60006144cc601d83613c27565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b600061450d826135b6565b9150614518836135b6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561454d5761454c613ca4565b5b828201905092915050565b7f4e46544d61726b65743a2045524337323120616d6f756e74206d75737420626560008201527f2031200000000000000000000000000000000000000000000000000000000000602082015250565b60006145b4602383613c27565b91506145bf82614558565b604082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b60006080820190506145ff6000830187613878565b61460c6020830186613878565b614619604083018561358c565b6146266060830184613878565b95945050505050565b7f4e46544d61726b65743a206d61784c696d69742063616e206e6f74206265206c60008201527f657373207468616e206d696e206c696d69742100000000000000000000000000602082015250565b600061468b603383613c27565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f4e46544d61726b65743a2045524332302061646472657373206973207a65726f600082015250565b60006146f7602083613c27565b9150614702826146c1565b602082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b7f4e46544d61726b65743a2074617820726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b6000614789602f83613c27565b91506147948261472d565b604082019050919050565b600060208201905081810360008301526147b88161477c565b9050919050565b60006147ca826135b6565b91506147d5836135b6565b9250828210156147e8576147e7613ca4565b5b828203905092915050565b600081519050614802816135c0565b92915050565b60006020828403121561481e5761481d613495565b5b600061482c848285016147f3565b91505092915050565b7f42454e46544d61726b65743a20627579657220646f65736e277420686176652060008201527f656e6f75676820746f6b656e20746f206275792074686973206974656d000000602082015250565b6000614891603d83613c27565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b60006040820190506148dc600083018561358c565b6148e9602083018461358c565b9392505050565b7f42454e46544d61726b65743a20627579657220646f65736e277420617070726f60008201527f7665206d61726b6574706c61636520746f207370656e64207061796d656e742060208201527f616d6f756e740000000000000000000000000000000000000000000000000000604082015250565b6000614972604683613c27565b915061497d826148f0565b606082019050919050565b600060208201905081810360008301526149a181614965565b9050919050565b600060e0820190506149bd600083018a613878565b6149ca602083018961358c565b6149d76040830188613878565b6149e4606083018761358c565b6149f1608083018661358c565b6149fe60a083018561358c565b614a0b60c0830184613878565b98975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a73602683613c27565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b614ab281613524565b8114614abd57600080fd5b50565b600081519050614acf81614aa9565b92915050565b600060208284031215614aeb57614aea613495565b5b6000614af984828501614ac0565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b5e602a83613c27565b9150614b6982614b02565b604082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602683613c27565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614c5c601d83613c27565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015614cc6578082015181840152602081019050614cab565b83811115614cd5576000848401525b50505050565b6000614ce682614c92565b614cf08185614c9d565b9350614d00818560208601614ca8565b80840191505092915050565b6000614d188284614cdb565b915081905092915050565b600081519050919050565b6000614d3982614d23565b614d438185613c27565b9350614d53818560208601614ca8565b614d5c8161364f565b840191505092915050565b60006020820190508181036000830152614d818184614d2e565b90509291505056fea2646970667358221220767e3142852b2970e8379576d93a641733fc1f0366ccd8a11aad4df379d6a79264736f6c634300080a0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c80638d1400b41161013b578063bc1081e9116100b8578063d2d03a221161007c578063d2d03a22146106df578063d96a094a146106fd578063f23a6e6114610719578063f2fde38b14610749578063fdf397ee1461076557610248565b8063bc1081e914610627578063bc197c8114610645578063c179c58014610675578063c24bdfc614610693578063c68d20ab146106c357610248565b8063b18c1047116100ff578063b18c10471461057f578063b4a1753a1461059d578063b8a9ddeb146105d3578063b9c214a1146105ef578063b9d2df611461060b57610248565b80638d1400b4146104db5780638da5cb5b146104f75780639017f79e146105155780639ed3edf014610545578063a5f955581461056357610248565b806340a28c56116101c95780636d213f721161018d5780636d213f721461044b5780636f22d45b1461047b578063715018a61461049957806382367b2d146104a357806386847c70146104bf57610248565b806340a28c56146103bd578063498886ac146103d9578063514fcac7146103f5578063580bb9a5146104115780635a43c2e51461042d57610248565b806330681e631161021057806330681e6314610303578063322ba2c814610321578063348eff20146103515780633a27df071461036f5780633d19b4681461038d57610248565b806301ffc9a71461024d578063083d80f91461027d578063096a8ab71461029b578063150b7a02146102b757806328400cf3146102e7575b600080fd5b610267600480360381019061026291906134f7565b610781565b604051610274919061353f565b60405180910390f35b6102856107fb565b604051610292919061359b565b60405180910390f35b6102b560048036038101906102b091906135ec565b610821565b005b6102d160048036038101906102cc919061378b565b610912565b6040516102de919061381d565b60405180910390f35b61030160048036038101906102fc9190613838565b610926565b005b61030b610ab4565b6040516103189190613887565b60405180910390f35b61033b600480360381019061033691906138a2565b610ad3565b604051610348919061353f565b60405180910390f35b610359610af3565b6040516103669190613887565b60405180910390f35b610377610af8565b6040516103849190613887565b60405180910390f35b6103a760048036038101906103a291906138a2565b610afe565b6040516103b49190613887565b60405180910390f35b6103d760048036038101906103d291906138a2565b610b16565b005b6103f360048036038101906103ee91906138a2565b610c24565b005b61040f600480360381019061040a91906135ec565b610d32565b005b61042b600480360381019061042691906138a2565b61122f565b005b61043561135f565b6040516104429190613887565b60405180910390f35b610465600480360381019061046091906138a2565b611365565b604051610472919061353f565b60405180910390f35b610483611385565b6040516104909190613887565b60405180910390f35b6104a16113a4565b005b6104bd60048036038101906104b891906138cf565b61142c565b005b6104d960048036038101906104d491906138a2565b61177d565b005b6104f560048036038101906104f091906135ec565b61188b565b005b6104ff61197c565b60405161050c919061359b565b60405180910390f35b61052f600480360381019061052a91906138a2565b6119a5565b60405161053c919061353f565b60405180910390f35b61054d6119c5565b60405161055a9190613887565b60405180910390f35b61057d600480360381019061057891906138a2565b6119cb565b005b610587611ad9565b6040516105949190613887565b60405180910390f35b6105b760048036038101906105b291906135ec565b611ade565b6040516105ca979695949392919061390f565b60405180910390f35b6105ed60048036038101906105e8919061397e565b611b80565b005b61060960048036038101906106049190613838565b61220d565b005b610625600480360381019061062091906138a2565b612353565b005b61062f6124d1565b60405161063c919061359b565b60405180910390f35b61065f600480360381019061065a9190613ac1565b6124f7565b60405161066c919061381d565b60405180910390f35b61067d61250c565b60405161068a9190613887565b60405180910390f35b6106ad60048036038101906106a891906138a2565b612512565b6040516106ba9190613887565b60405180910390f35b6106dd60048036038101906106d891906138a2565b61252a565b005b6106e761265a565b6040516106f49190613887565b60405180910390f35b610717600480360381019061071291906135ec565b612660565b005b610733600480360381019061072e9190613b90565b612e34565b604051610740919061381d565b60405180910390f35b610763600480360381019061075e91906138a2565b612e49565b005b61077f600480360381019061077a91906138a2565b612f41565b005b60007f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107f457506107f38261304f565b5b9050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108296130b9565b73ffffffffffffffffffffffffffffffffffffffff1661084761197c565b73ffffffffffffffffffffffffffffffffffffffff161461089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089490613c84565b60405180910390fd5b600081101580156108c957506064620f4240600a6108bb9190613cd3565b6108c59190613d5c565b8111155b610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613dff565b60405180910390fd5b80600a8190555050565b600063150b7a0260e01b9050949350505050565b61092e6130b9565b73ffffffffffffffffffffffffffffffffffffffff1661094c61197c565b73ffffffffffffffffffffffffffffffffffffffff16146109a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099990613c84565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a6c57600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290613e91565b60405180910390fd5b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6064620f4240600a610ac69190613cd3565b610ad09190613d5c565b81565b60036020528060005260406000206000915054906101000a900460ff1681565b600081565b600e5481565b60076020528060005260406000206000915090505481565b610b1e6130b9565b73ffffffffffffffffffffffffffffffffffffffff16610b3c61197c565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613c84565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610c19919061359b565b60405180910390a150565b610c2c6130b9565b73ffffffffffffffffffffffffffffffffffffffff16610c4a61197c565b73ffffffffffffffffffffffffffffffffffffffff1614610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613c84565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffc6fe30295fcab6c6dd6df09076c1548effc4c1e1d267bd7e23587c965aa614681604051610d27919061359b565b60405180910390a150565b60026001541415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613efd565b60405180910390fd5b6002600181905550610d886130b9565b73ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613f8f565b60405180910390fd5b6000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600260008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611050578060a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30610ff66130b9565b84602001516040518463ffffffff1660e01b815260040161101993929190613faf565b600060405180830381600087803b15801561103357600080fd5b505af1158015611047573d6000803e3d6000fd5b5050505061112c565b600360008260a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561112b578060a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a306110cf6130b9565b846020015185604001516040518563ffffffff1660e01b81526004016110f8949392919061401d565b600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b505050505b5b60056000838152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505080602001518160a0015173ffffffffffffffffffffffffffffffffffffffff16837f9a6b35ee285392e8eb213e5184af2b520faed9b903fddfea170510591d056cb760405160405180910390a4506001808190555050565b6112376130b9565b73ffffffffffffffffffffffffffffffffffffffff1661125561197c565b73ffffffffffffffffffffffffffffffffffffffff16146112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561131b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611312906140e7565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b60026020528060005260406000206000915054906101000a900460ff1681565b6064620f4240600a6113979190613cd3565b6113a19190613d5c565b81565b6113ac6130b9565b73ffffffffffffffffffffffffffffffffffffffff166113ca61197c565b73ffffffffffffffffffffffffffffffffffffffff1614611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790613c84565b60405180910390fd5b61142a60006130c1565b565b600060056000848152602001908152602001600020905060008160010154141561148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290614153565b60405180910390fd5b6114936130b9565b73ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151b906141bf565b60405180910390fd5b600660008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115806115f957506000600660008360050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90614251565b60405180910390fd5b600760008260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482101580156116ac575060008214155b6116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e2906142e3565b60405180910390fd5b60008160040154905082826004018190555081600101548260050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16857f8b5c3e60125dcfa034fa05a3bc5936e91ef3ce11947807c64c8ea198aecaa271848760405161176f929190614303565b60405180910390a450505050565b6117856130b9565b73ffffffffffffffffffffffffffffffffffffffff166117a361197c565b73ffffffffffffffffffffffffffffffffffffffff16146117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f090613c84565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611880919061359b565b60405180910390a150565b6118936130b9565b73ffffffffffffffffffffffffffffffffffffffff166118b161197c565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613c84565b60405180910390fd5b6000811015801561193357506064620f4240600a6119259190613cd3565b61192f9190613d5c565b8111155b611972576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119699061439e565b60405180910390fd5b80600b8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60046020528060005260406000206000915054906101000a900460ff1681565b600a5481565b6119d36130b9565b73ffffffffffffffffffffffffffffffffffffffff166119f161197c565b73ffffffffffffffffffffffffffffffffffffffff1614611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e90613c84565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb255f2a756451f829ba88b8253b7768ce1ac0b7ba692c65d567363f434d4f21f81604051611ace919061359b565b60405180910390a150565b600081565b60056020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154908060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905087565b6000831415611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061440a565b60405180910390fd5b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c655750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90614476565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d27906144e2565b60405180910390fd5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111580611dbd57506000600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390614251565b60405180910390fd5b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548210158015611e4c575060008214155b611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e82906142e3565b60405180910390fd5b6001600e6000828254611e9e9190614502565b92505081905550600060056000600e5481526020019081526020016000209050600e548160000181905550838160010181905550818160020181905550858160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f266130b9565b8160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160040181905550848160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120c45760018214612049576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612040906145ca565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166342842e0e61206d6130b9565b30876040518463ffffffff1660e01b815260040161208d93929190613faf565b600060405180830381600087803b1580156120a757600080fd5b505af11580156120bb573d6000803e3d6000fd5b50505050612190565b600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561218f578573ffffffffffffffffffffffffffffffffffffffff1663f242432a61213a6130b9565b3087866040518563ffffffff1660e01b815260040161215c949392919061401d565b600060405180830381600087803b15801561217657600080fd5b505af115801561218a573d6000803e3d6000fd5b505050505b5b8573ffffffffffffffffffffffffffffffffffffffff166121af6130b9565b73ffffffffffffffffffffffffffffffffffffffff16857f3aaa280a8041ed5527c779fa4743a630db39846bb549ac7a52d2f9b78ef2fe4f85600e548a896040516121fd94939291906145ea565b60405180910390a4505050505050565b6122156130b9565b73ffffffffffffffffffffffffffffffffffffffff1661223361197c565b73ffffffffffffffffffffffffffffffffffffffff1614612289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228090613c84565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481101561230b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612302906146a1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b61235b6130b9565b73ffffffffffffffffffffffffffffffffffffffff1661237961197c565b73ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561243f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124369061470d565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f636dc55442e1c73ff1acc6b88f4522b3b047cd6b5b53076466fe6efc132b7d97816040516124c6919061359b565b60405180910390a150565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c8160e01b905095945050505050565b600b5481565b60066020528060005260406000206000915090505481565b6125326130b9565b73ffffffffffffffffffffffffffffffffffffffff1661255061197c565b73ffffffffffffffffffffffffffffffffffffffff16146125a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259d90613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d9061479f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60095481565b600260015414156126a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90613efd565b60405180910390fd5b60026001819055506000600560008381526020019081526020016000206040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600482015481526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050600081602001511415612842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283990614153565b60405180910390fd5b6000620f4240600a54836080015161285a9190613cd3565b6128649190613d5c565b9050806008546128749190614502565b6008819055506000620f4240600b5484608001516128929190613cd3565b61289c9190613d5c565b9050806009546128ac9190614502565b6009819055506000818385608001516128c591906147bf565b6128cf91906147bf565b905060008460c00151905084608001518173ffffffffffffffffffffffffffffffffffffffff166370a082316129036130b9565b6040518263ffffffff1660e01b815260040161291f919061359b565b602060405180830381865afa15801561293c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129609190614808565b10156129a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612998906148a7565b60405180910390fd5b84608001518173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e6129ca6130b9565b306040518363ffffffff1660e01b81526004016129e89291906148c7565b602060405180830381865afa158015612a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a299190614808565b1015612a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6190614988565b60405180910390fd5b612aa2612a756130b9565b8660600151848473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b6000841115612b0257612b01612ab66130b9565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b5b6000831115612b6257612b61612b166130b9565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858473ffffffffffffffffffffffffffffffffffffffff16613185909392919063ffffffff16565b5b600260008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c3b578460a0015173ffffffffffffffffffffffffffffffffffffffff166342842e0e30612be16130b9565b88602001516040518463ffffffff1660e01b8152600401612c0493929190613faf565b600060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b50505050612d17565b600360008660a0015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d16578460a0015173ffffffffffffffffffffffffffffffffffffffff1663f242432a30612cba6130b9565b886020015189604001516040518563ffffffff1660e01b8152600401612ce3949392919061401d565b600060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b505050505b5b84602001517f5ed2283a84be92aa3d96afceb486f7904c7a63a11cf51985e529e554440566b3878760a0015188604001518960600151612d556130b9565b8b60c001518c60800151604051612d7297969594939291906149a8565b60405180910390a260056000878152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560048201600090556005820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556006820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505050505050506001808190555050565b600063f23a6e6160e01b905095945050505050565b612e516130b9565b73ffffffffffffffffffffffffffffffffffffffff16612e6f61197c565b73ffffffffffffffffffffffffffffffffffffffff1614612ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebc90613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2c90614a89565b60405180910390fd5b612f3e816130c1565b50565b612f496130b9565b73ffffffffffffffffffffffffffffffffffffffff16612f6761197c565b73ffffffffffffffffffffffffffffffffffffffff1614612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490613c84565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f9e7e7de58452376347303ed83ad0a3680a82bcb8bfe7541fb27efba64adf6a81604051613044919061359b565b60405180910390a150565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613208846323b872dd60e01b8585856040516024016131a693929190613faf565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061320e565b50505050565b6000613270826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132d59092919063ffffffff16565b90506000815111156132d057808060200190518101906132909190614ad5565b6132cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c690614b74565b60405180910390fd5b5b505050565b60606132e484846000856132ed565b90509392505050565b606082471015613332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332990614c06565b60405180910390fd5b61333b85613401565b61337a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337190614c72565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516133a39190614d0c565b60006040518083038185875af1925050503d80600081146133e0576040519150601f19603f3d011682016040523d82523d6000602084013e6133e5565b606091505b50915091506133f5828286613424565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561343457829050613484565b6000835111156134475782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347b9190614d67565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134d48161349f565b81146134df57600080fd5b50565b6000813590506134f1816134cb565b92915050565b60006020828403121561350d5761350c613495565b5b600061351b848285016134e2565b91505092915050565b60008115159050919050565b61353981613524565b82525050565b60006020820190506135546000830184613530565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135858261355a565b9050919050565b6135958161357a565b82525050565b60006020820190506135b0600083018461358c565b92915050565b6000819050919050565b6135c9816135b6565b81146135d457600080fd5b50565b6000813590506135e6816135c0565b92915050565b60006020828403121561360257613601613495565b5b6000613610848285016135d7565b91505092915050565b6136228161357a565b811461362d57600080fd5b50565b60008135905061363f81613619565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136988261364f565b810181811067ffffffffffffffff821117156136b7576136b6613660565b5b80604052505050565b60006136ca61348b565b90506136d6828261368f565b919050565b600067ffffffffffffffff8211156136f6576136f5613660565b5b6136ff8261364f565b9050602081019050919050565b82818337600083830152505050565b600061372e613729846136db565b6136c0565b90508281526020810184848401111561374a5761374961364a565b5b61375584828561370c565b509392505050565b600082601f83011261377257613771613645565b5b813561378284826020860161371b565b91505092915050565b600080600080608085870312156137a5576137a4613495565b5b60006137b387828801613630565b94505060206137c487828801613630565b93505060406137d5878288016135d7565b925050606085013567ffffffffffffffff8111156137f6576137f561349a565b5b6138028782880161375d565b91505092959194509250565b6138178161349f565b82525050565b6000602082019050613832600083018461380e565b92915050565b6000806040838503121561384f5761384e613495565b5b600061385d85828601613630565b925050602061386e858286016135d7565b9150509250929050565b613881816135b6565b82525050565b600060208201905061389c6000830184613878565b92915050565b6000602082840312156138b8576138b7613495565b5b60006138c684828501613630565b91505092915050565b600080604083850312156138e6576138e5613495565b5b60006138f4858286016135d7565b9250506020613905858286016135d7565b9150509250929050565b600060e082019050613924600083018a613878565b6139316020830189613878565b61393e6040830188613878565b61394b606083018761358c565b6139586080830186613878565b61396560a083018561358c565b61397260c083018461358c565b98975050505050505050565b600080600080600060a0868803121561399a57613999613495565b5b60006139a888828901613630565b95505060206139b988828901613630565b94505060406139ca888289016135d7565b93505060606139db888289016135d7565b92505060806139ec888289016135d7565b9150509295509295909350565b600067ffffffffffffffff821115613a1457613a13613660565b5b602082029050602081019050919050565b600080fd5b6000613a3d613a38846139f9565b6136c0565b90508083825260208201905060208402830185811115613a6057613a5f613a25565b5b835b81811015613a895780613a7588826135d7565b845260208401935050602081019050613a62565b5050509392505050565b600082601f830112613aa857613aa7613645565b5b8135613ab8848260208601613a2a565b91505092915050565b600080600080600060a08688031215613add57613adc613495565b5b6000613aeb88828901613630565b9550506020613afc88828901613630565b945050604086013567ffffffffffffffff811115613b1d57613b1c61349a565b5b613b2988828901613a93565b935050606086013567ffffffffffffffff811115613b4a57613b4961349a565b5b613b5688828901613a93565b925050608086013567ffffffffffffffff811115613b7757613b7661349a565b5b613b838882890161375d565b9150509295509295909350565b600080600080600060a08688031215613bac57613bab613495565b5b6000613bba88828901613630565b9550506020613bcb88828901613630565b9450506040613bdc888289016135d7565b9350506060613bed888289016135d7565b925050608086013567ffffffffffffffff811115613c0e57613c0d61349a565b5b613c1a8882890161375d565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c6e602083613c27565b9150613c7982613c38565b602082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cde826135b6565b9150613ce9836135b6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d2257613d21613ca4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d67826135b6565b9150613d72836135b6565b925082613d8257613d81613d2d565b5b828204905092915050565b7f4e46544d61726b65743a205f7472616e73616374696f6e466565206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000613de9602f83613c27565b9150613df482613d8d565b604082019050919050565b60006020820190508181036000830152613e1881613ddc565b9050919050565b7f4e46544d61726b65743a206d696e4c696d69742063616e206e6f74206265206c60008201527f6172676572207468616e206d6178206c696d6974210000000000000000000000602082015250565b6000613e7b603583613c27565b9150613e8682613e1f565b604082019050919050565b60006020820190508181036000830152613eaa81613e6e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613ee7601f83613c27565b9150613ef282613eb1565b602082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f4e46544d61726b65743a2063616e63656c2063616c6c6572206973206e6f742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613f79602583613c27565b9150613f8482613f1d565b604082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b6000606082019050613fc4600083018661358c565b613fd1602083018561358c565b613fde6040830184613878565b949350505050565b600082825260208201905092915050565b50565b6000614007600083613fe6565b915061401282613ff7565b600082019050919050565b600060a082019050614032600083018761358c565b61403f602083018661358c565b61404c6040830185613878565b6140596060830184613878565b818103608083015261406a81613ffa565b905095945050505050565b7f4e46544d61726b65743a2066656520726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b60006140d1602f83613c27565b91506140dc82614075565b604082019050919050565b60006020820190508181036000830152614100816140c4565b9050919050565b7f4e46544d61726b65743a204e465420646f6573206e6f74206578697374000000600082015250565b600061413d601d83613c27565b915061414882614107565b602082019050919050565b6000602082019050818103600083015261416c81614130565b9050919050565b7f4e46544d61726b65743a2063616c6c6572206973206e6f74206f776e65720000600082015250565b60006141a9601e83613c27565b91506141b482614173565b602082019050919050565b600060208201905081810360008301526141d88161419c565b9050919050565b7f4e46544d61726b65743a204d6178696d756d207072696365206c696d6974206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b600061423b602783613c27565b9150614246826141df565b604082019050919050565b6000602082019050818103600083015261426a8161422e565b9050919050565b7f4e46544d61726b65743a2042656c6f7720746865206d696e696d756d2070726960008201527f6365206c696d6974000000000000000000000000000000000000000000000000602082015250565b60006142cd602883613c27565b91506142d882614271565b604082019050919050565b600060208201905081810360008301526142fc816142c0565b9050919050565b60006040820190506143186000830185613878565b6143256020830184613878565b9392505050565b7f4e46544d61726b65743a205f7472616e73616374696f6e546178206d7573742060008201527f3e3d203020616e64203c3d203130250000000000000000000000000000000000602082015250565b6000614388602f83613c27565b91506143938261432c565b604082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f4e46544d61726b65743a20746f6b656e49642063616e206e6f74206265203021600082015250565b60006143f4602083613c27565b91506143ff826143be565b602082019050919050565b60006020820190508181036000830152614423816143e7565b9050919050565b7f4e46544d61726b65743a20556e737570706f72746564204e4654000000000000600082015250565b6000614460601a83613c27565b915061446b8261442a565b602082019050919050565b6000602082019050818103600083015261448f81614453565b9050919050565b7f4e46544d61726b65743a20556e737570706f7274656420746f6b656e73000000600082015250565b60006144cc601d83613c27565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b600061450d826135b6565b9150614518836135b6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561454d5761454c613ca4565b5b828201905092915050565b7f4e46544d61726b65743a2045524337323120616d6f756e74206d75737420626560008201527f2031200000000000000000000000000000000000000000000000000000000000602082015250565b60006145b4602383613c27565b91506145bf82614558565b604082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b60006080820190506145ff6000830187613878565b61460c6020830186613878565b614619604083018561358c565b6146266060830184613878565b95945050505050565b7f4e46544d61726b65743a206d61784c696d69742063616e206e6f74206265206c60008201527f657373207468616e206d696e206c696d69742100000000000000000000000000602082015250565b600061468b603383613c27565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f4e46544d61726b65743a2045524332302061646472657373206973207a65726f600082015250565b60006146f7602083613c27565b9150614702826146c1565b602082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b7f4e46544d61726b65743a2074617820726563656976656420616464726573732060008201527f63616e206e6f74206265207a65726f0000000000000000000000000000000000602082015250565b6000614789602f83613c27565b91506147948261472d565b604082019050919050565b600060208201905081810360008301526147b88161477c565b9050919050565b60006147ca826135b6565b91506147d5836135b6565b9250828210156147e8576147e7613ca4565b5b828203905092915050565b600081519050614802816135c0565b92915050565b60006020828403121561481e5761481d613495565b5b600061482c848285016147f3565b91505092915050565b7f42454e46544d61726b65743a20627579657220646f65736e277420686176652060008201527f656e6f75676820746f6b656e20746f206275792074686973206974656d000000602082015250565b6000614891603d83613c27565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b60006040820190506148dc600083018561358c565b6148e9602083018461358c565b9392505050565b7f42454e46544d61726b65743a20627579657220646f65736e277420617070726f60008201527f7665206d61726b6574706c61636520746f207370656e64207061796d656e742060208201527f616d6f756e740000000000000000000000000000000000000000000000000000604082015250565b6000614972604683613c27565b915061497d826148f0565b606082019050919050565b600060208201905081810360008301526149a181614965565b9050919050565b600060e0820190506149bd600083018a613878565b6149ca602083018961358c565b6149d76040830188613878565b6149e4606083018761358c565b6149f1608083018661358c565b6149fe60a083018561358c565b614a0b60c0830184613878565b98975050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a73602683613c27565b9150614a7e82614a17565b604082019050919050565b60006020820190508181036000830152614aa281614a66565b9050919050565b614ab281613524565b8114614abd57600080fd5b50565b600081519050614acf81614aa9565b92915050565b600060208284031215614aeb57614aea613495565b5b6000614af984828501614ac0565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614b5e602a83613c27565b9150614b6982614b02565b604082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614bf0602683613c27565b9150614bfb82614b94565b604082019050919050565b60006020820190508181036000830152614c1f81614be3565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614c5c601d83613c27565b9150614c6782614c26565b602082019050919050565b60006020820190508181036000830152614c8b81614c4f565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015614cc6578082015181840152602081019050614cab565b83811115614cd5576000848401525b50505050565b6000614ce682614c92565b614cf08185614c9d565b9350614d00818560208601614ca8565b80840191505092915050565b6000614d188284614cdb565b915081905092915050565b600081519050919050565b6000614d3982614d23565b614d438185613c27565b9350614d53818560208601614ca8565b614d5c8161364f565b840191505092915050565b60006020820190508181036000830152614d818184614d2e565b90509291505056fea2646970667358221220767e3142852b2970e8379576d93a641733fc1f0366ccd8a11aad4df379d6a79264736f6c634300080a0033", "immutableReferences": {}, "generatedSources": [ { @@ -21812,9 +21812,9 @@ "name": "#utility.yul" } ], - "sourceMap": "559:10165:15:-:0;;;2123:3;2066:7;2110:1;:9;;;;:::i;:::-;2109:17;;;;:::i;:::-;2077:49;;2360:3;2066:7;2347:1;:9;;;;:::i;:::-;2346:17;;;;:::i;:::-;2314:49;;559:10165;;;;;;;;;;921:32:0;940:12;:10;;;:12;;:::i;:::-;921:18;;;:32;;:::i;:::-;1701:1:1;1806:7;:22;;;;559:10165:15;;640:96:12;693:7;719:10;712:17;;640:96;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;7:77:16:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:348;316:7;339:20;357:1;339:20;:::i;:::-;334:25;;373:20;391:1;373:20;:::i;:::-;368:25;;561:1;493:66;489:74;486:1;483:81;478:1;471:9;464:17;460:105;457:131;;;568:18;;:::i;:::-;457:131;616:1;613;609:9;598:20;;276:348;;;;:::o;630:180::-;678:77;675:1;668:88;775:4;772:1;765:15;799:4;796:1;789:15;816:185;856:1;873:20;891:1;873:20;:::i;:::-;868:25;;907:20;925:1;907:20;:::i;:::-;902:25;;946:1;936:35;;951:18;;:::i;:::-;936:35;993:1;990;986:9;981:14;;816:185;;;;:::o;559:10165:15:-;;;;;;;", - "deployedSourceMap": "559:10165:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;387:221:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2551:27:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9556:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;588:200:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9177:329:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2482:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;892:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2398:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2615:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1100:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8204:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7818:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6060:748;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9897:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1978:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;841:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2245:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;:::i;:::-;;6812:773:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7629:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10164:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;944:46:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2077:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8012:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2161:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;994;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2641:1474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8845:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8397:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2583:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;724:247:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2314:49:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10505:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2009:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4119:1937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;499:219:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8645:138:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;387:221:5;489:4;527:34;512:49;;;:11;:49;;;;:89;;;;565:36;589:11;565:23;:36::i;:::-;512:89;505:96;;387:221;;;:::o;2551:27:15:-;;;;;;;;;;;;;:::o;9556:286::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2207:1:15::1;9648:15;:38;;:88;;;;;2306:3;2066:7;2292:2;:10;;;;:::i;:::-;2291:18;;;;:::i;:::-;9698:15;:38;;9648:88;9633:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;9822:15;9805:14;:32;;;;9556:286:::0;:::o;588:200:10:-;726:6;751:30;;;744:37;;588:200;;;;;;:::o;9177:329:15:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9313:1:15::1;9283:16;:26;9300:8;9283:26;;;;;;;;;;;;;;;;:31;9279:180;;9353:16;:26;9370:8;9353:26;;;;;;;;;;;;;;;;9341:8;:38;;9324:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;9279:180;9493:8;9464:16;:26;9481:8;9464:26;;;;;;;;;;;;;;;:37;;;;9177:329:::0;;:::o;2482:64::-;2543:3;2066:7;2529:2;:10;;;;:::i;:::-;2528:18;;;;:::i;:::-;2482:64;:::o;892:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2398:47::-;2444:1;2398:47;:::o;2615:21::-;;;;:::o;1100:51::-;;;;;;;;;;;;;;;;;:::o;8204:149::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8306:5:15::1;8277:16;:26;8294:8;8277:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8322:26;8339:8;8322:26;;;;;;:::i;:::-;;;;;;;;8204:149:::0;:::o;7818:147::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7918:5:15::1;7890:15;:25;7906:8;7890:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;7934:26;7951:8;7934:26;;;;;;:::i;:::-;;;;;;;;7818:147:::0;:::o;6060:748::-;1744:1:1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;6170:12:15::1;:10;:12::i;:::-;6141:41;;:10;:19;6152:7;6141:19;;;;;;;;;;;:25;;;;;;;;;;;;:41;;;6126:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;6241:26;6270:10;:19;6281:7;6270:19;;;;;;;;;;;6241:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;6299:15;:35;6315:9;:18;;;6299:35;;;;;;;;;;;;;;;;;;;;;;;;;6295:406;;;6352:9;:18;;;6344:44;;;6406:4;6421:12;:10;:12::i;:::-;6443:9;:17;;;6344:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6295:406;;;6485:16;:36;6502:9;:18;;;6485:36;;;;;;;;;;;;;;;;;;;;;;;;;6481:220;;;6540:9;:18;;;6531:45;;;6594:4;6609:12;:10;:12::i;:::-;6631:9;:17;;;6658:9;:16;;;6531:163;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6481:220;6295:406;6713:10;:19;6724:7;6713:19;;;;;;;;;;;;6706:26:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6785:9;:17;;;6765:9;:18;;;6744:59;;6756:7;6744:59;;;;;;;;;;6120:688;1701:1:1::0;2628:7;:22;;;;6060:748:15;:::o;9897:217::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10010:1:15::1;9985:27;;:13;:27;;;;9970:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;10096:13;10081:12;;:28;;;;;;;;;;;;;;;;;;9897:217:::0;:::o;1978:27::-;;;;:::o;841:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;2245:64::-;2306:3;2066:7;2292:2;:10;;;;:::i;:::-;2291:18;;;;:::i;:::-;2245:64;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;6812:773:15:-;6880:26;6909:10;:19;6920:7;6909:19;;;;;;;;;;;6880:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6963:1;6942:9;:17;;;:22;;6934:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7031:12;:10;:12::i;:::-;7012:31;;:9;:15;;;:31;;;7004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7108:16;:36;7125:9;:18;;;7108:36;;;;;;;;;;;;;;;;7099:5;:45;;:98;;;;7196:1;7156:16;:36;7173:9;:18;;;7156:36;;;;;;;;;;;;;;;;:41;7099:98;7084:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;7282:16;:36;7299:9;:18;;;7282:36;;;;;;;;;;;;;;;;7273:5;:45;;:59;;;;;7331:1;7322:5;:10;;7273:59;7258:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;7394:16;7413:9;:15;;;7394:34;;7452:5;7434:9;:15;;:23;;;;;7528:9;:17;;;7502:9;:18;;;7468:112;;7487:7;7468:112;7553:8;7569:5;7468:112;;;;;;;:::i;:::-;;;;;;;;6874:711;;6812:773;;:::o;7629:140::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7726:4:15::1;7698:15;:25;7714:8;7698:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;7741:23;7755:8;7741:23;;;;;;:::i;:::-;;;;;;;;7629:140:::0;:::o;10164:286::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2444:1:15::1;10256:15;:38;;:88;;;;;2543:3;2066:7;2529:2;:10;;;;:::i;:::-;2528:18;;;;:::i;:::-;10306:15;:38;;10256:88;10241:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;10430:15;10413:14;:32;;;;10164:286:::0;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;944:46:15:-;;;;;;;;;;;;;;;;;;;;;;:::o;2077:49::-;;;;:::o;8012:142::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8111:4:15::1;8082:16;:26;8099:8;8082:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8126:23;8140:8;8126:23;;;;;;:::i;:::-;;;;;;;;8012:142:::0;:::o;2161:47::-;2207:1;2161:47;:::o;994:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2641:1474::-;2797:1;2786:7;:12;;2778:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2856:15;:25;2872:8;2856:25;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;2885:16;:26;2902:8;2885:26;;;;;;;;;;;;;;;;;;;;;;;;;2856:55;2841:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;2967:14;:24;2982:8;2967:24;;;;;;;;;;;;;;;;;;;;;;;;;2959:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3055:16;:26;3072:8;3055:26;;;;;;;;;;;;;;;;3046:5;:35;;:70;;;;3115:1;3085:16;:26;3102:8;3085:26;;;;;;;;;;;;;;;;:31;3046:70;3031:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;3201:16;:26;3218:8;3201:26;;;;;;;;;;;;;;;;3192:5;:35;;:49;;;;;3240:1;3231:5;:10;;3192:49;3177:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;3313:1;3303:6;;:11;;;;;;;:::i;:::-;;;;;;;;3320:27;3350:10;:18;3361:6;;3350:18;;;;;;;;;;;3320:48;;3394:6;;3374:9;:17;;:26;;;;3426:7;3406:9;:17;;:27;;;;3458:6;3439:9;:16;;:25;;;;3491:8;3470:9;:18;;;:29;;;;;;;;;;;;;;;;;;3523:12;:10;:12::i;:::-;3505:9;:15;;;:30;;;;;;;;;;;;;;;;;;3559:5;3541:9;:15;;:23;;;;3591:8;3570:9;:18;;;:29;;;;;;;;;;;;;;;;;;3609:15;:25;3625:8;3609:25;;;;;;;;;;;;;;;;;;;;;;;;;3605:371;;;3662:1;3652:6;:11;3644:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;3719:8;3711:34;;;3746:12;:10;:12::i;:::-;3768:4;3775:7;3711:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3605:371;;;3800:16;:26;3817:8;3800:26;;;;;;;;;;;;;;;;;;;;;;;;;3796:180;;;3845:8;3836:35;;;3881:12;:10;:12::i;:::-;3911:4;3926:7;3943:6;3836:133;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3796:180;3605:371;4039:8;3987:123;;4019:12;:10;:12::i;:::-;3987:123;;4004:7;3987:123;4055:6;4069;;4083:8;4099:5;3987:123;;;;;;;;;:::i;:::-;;;;;;;;2772:1343;2641:1474;;;;;:::o;8845:270::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8974:16:15::1;:26;8991:8;8974:26;;;;;;;;;;;;;;;;8962:8;:38;;8947:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;9102:8;9073:16;:26;9090:8;9073:26;;;;;;;;;;;;;;;:37;;;;8845:270:::0;;:::o;8397:201::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8487:1:15::1;8470:19;;:5;:19;;;;8462:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8556:4;8532:14;:21;8547:5;8532:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;8571:22;8587:5;8571:22;;;;;;:::i;:::-;;;;;;;;8397:201:::0;:::o;2583:27::-;;;;;;;;;;;;;:::o;724:247:4:-;903:6;928:36;;;921:43;;724:247;;;;;;;:::o;2314:49:15:-;;;;:::o;1045:51::-;;;;;;;;;;;;;;;;;:::o;10505:217::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10618:1:15::1;10593:27;;:13;:27;;;;10578:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;10704:13;10689:12;;:28;;;;;;;;;;;;;;;;;;10505:217:::0;:::o;2009:27::-;;;;:::o;4119:1937::-;1744:1:1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;4177:26:15::1;4206:10;:19;4217:7;4206:19;;;;;;;;;;;4177:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;4260:1;4239:9;:17;;;:22;;4231:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4301:23;2066:7;4346:14;;4328:9;:15;;;:32;;;;:::i;:::-;4327:42;;;;:::i;:::-;4301:68;;4405:15;4390:12;;:30;;;;:::i;:::-;4375:12;:45;;;;4426:23;2066:7;4471:14;;4453:9;:15;;;:32;;;;:::i;:::-;4452:42;;;;:::i;:::-;4426:68;;4530:15;4515:12;;:30;;;;:::i;:::-;4500:12;:45;;;;4551:15;4605;4587;4569:9;:15;;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;4551:69;;4626:22;4658:9;:18;;;4626:51;;4741:9;:15;;;4698;:25;;;4724:12;:10;:12::i;:::-;4698:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;4683:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;4912:9;:15;;;4854;:25;;;4880:12;:10;:12::i;:::-;4902:4;4854:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;4839:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:72;5052:12;:10;:12::i;:::-;5066:9;:15;;;5083:7;5019:15;:32;;;;:72;;;;;;:::i;:::-;5119:1;5101:15;:19;5097:149;;;5130:109;5172:12;:10;:12::i;:::-;5194;;;;;;;;;;;5216:15;5130;:32;;;;:109;;;;;;:::i;:::-;5097:149;5273:1;5255:15;:19;5251:149;;;5284:109;5326:12;:10;:12::i;:::-;5348;;;;;;;;;;;5370:15;5284;:32;;;;:109;;;;;;:::i;:::-;5251:149;5410:15;:35;5426:9;:18;;;5410:35;;;;;;;;;;;;;;;;;;;;;;;;;5406:406;;;5463:9;:18;;;5455:44;;;5517:4;5532:12;:10;:12::i;:::-;5554:9;:17;;;5455:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5406:406;;;5596:16;:36;5613:9;:18;;;5596:36;;;;;;;;;;;;;;;;;;;;;;;;;5592:220;;;5651:9;:18;;;5642:45;;;5705:4;5720:12;:10;:12::i;:::-;5742:9;:17;;;5769:9;:16;;;5642:163;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5592:220;5406:406;5839:9;:17;;;5823:196;5864:7;5879:9;:18;;;5905:9;:16;;;5929:9;:15;;;5952:12;:10;:12::i;:::-;5972:9;:18;;;5998:9;:15;;;5823:196;;;;;;;;;;;;:::i;:::-;;;;;;;;6032:10;:19;6043:7;6032:19;;;;;;;;;;;;6025:26:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4171:1885;;;;;1701:1:1::0;2628:7;:22;;;;4119:1937:15;:::o;499:219:4:-;655:6;680:31;;;673:38;;499:219;;;;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;8645:138:15:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8737:5:15::1;8713:14;:21;8728:5;8713:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8753:25;8772:5;8753:25;;;;;;:::i;:::-;;;;;;;;8645:138:::0;:::o;829:155:13:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:12:-;693:7;719:10;712:17;;640:96;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;912:241:7:-;1050:96;1070:5;1100:27;;;1129:4;1135:2;1139:5;1077:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:19;:96::i;:::-;912:241;;;;:::o;3207:706::-;3626:23;3652:69;3680:4;3652:69;;;;;;;;;;;;;;;;;3660:5;3652:27;;;;:69;;;;;:::i;:::-;3626:95;;3755:1;3735:10;:17;:21;3731:176;;;3830:10;3819:30;;;;;;;;;;;;:::i;:::-;3811:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3731:176;3277:636;3207:706;;:::o;3861:223:11:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:18;5247:6;5236:10;:18::i;:::-;5228:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;;;;4948:499;;;;;;:::o;1175:320::-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;7561:692::-;7707:12;7735:7;7731:516;;;7765:10;7758:17;;;;7731:516;7896:1;7876:10;:17;:21;7872:365;;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;;;;;;;;;;:::i;:::-;;;;;;;;7561:692;;;;;;:::o;7:75:16:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:118::-;1839:24;1857:5;1839:24;:::i;:::-;1834:3;1827:37;1752:118;;:::o;1876:222::-;1969:4;2007:2;1996:9;1992:18;1984:26;;2020:71;2088:1;2077:9;2073:17;2064:6;2020:71;:::i;:::-;1876:222;;;;:::o;2104:77::-;2141:7;2170:5;2159:16;;2104:77;;;:::o;2187:122::-;2260:24;2278:5;2260:24;:::i;:::-;2253:5;2250:35;2240:63;;2299:1;2296;2289:12;2240:63;2187:122;:::o;2315:139::-;2361:5;2399:6;2386:20;2377:29;;2415:33;2442:5;2415:33;:::i;:::-;2315:139;;;;:::o;2460:329::-;2519:6;2568:2;2556:9;2547:7;2543:23;2539:32;2536:119;;;2574:79;;:::i;:::-;2536:119;2694:1;2719:53;2764:7;2755:6;2744:9;2740:22;2719:53;:::i;:::-;2709:63;;2665:117;2460:329;;;;:::o;2795:122::-;2868:24;2886:5;2868:24;:::i;:::-;2861:5;2858:35;2848:63;;2907:1;2904;2897:12;2848:63;2795:122;:::o;2923:139::-;2969:5;3007:6;2994:20;2985:29;;3023:33;3050:5;3023:33;:::i;:::-;2923:139;;;;:::o;3068:117::-;3177:1;3174;3167:12;3191:117;3300:1;3297;3290:12;3314:102;3355:6;3406:2;3402:7;3397:2;3390:5;3386:14;3382:28;3372:38;;3314:102;;;:::o;3422:180::-;3470:77;3467:1;3460:88;3567:4;3564:1;3557:15;3591:4;3588:1;3581:15;3608:281;3691:27;3713:4;3691:27;:::i;:::-;3683:6;3679:40;3821:6;3809:10;3806:22;3785:18;3773:10;3770:34;3767:62;3764:88;;;3832:18;;:::i;:::-;3764:88;3872:10;3868:2;3861:22;3651:238;3608:281;;:::o;3895:129::-;3929:6;3956:20;;:::i;:::-;3946:30;;3985:33;4013:4;4005:6;3985:33;:::i;:::-;3895:129;;;:::o;4030:307::-;4091:4;4181:18;4173:6;4170:30;4167:56;;;4203:18;;:::i;:::-;4167:56;4241:29;4263:6;4241:29;:::i;:::-;4233:37;;4325:4;4319;4315:15;4307:23;;4030:307;;;:::o;4343:154::-;4427:6;4422:3;4417;4404:30;4489:1;4480:6;4475:3;4471:16;4464:27;4343:154;;;:::o;4503:410::-;4580:5;4605:65;4621:48;4662:6;4621:48;:::i;:::-;4605:65;:::i;:::-;4596:74;;4693:6;4686:5;4679:21;4731:4;4724:5;4720:16;4769:3;4760:6;4755:3;4751:16;4748:25;4745:112;;;4776:79;;:::i;:::-;4745:112;4866:41;4900:6;4895:3;4890;4866:41;:::i;:::-;4586:327;4503:410;;;;;:::o;4932:338::-;4987:5;5036:3;5029:4;5021:6;5017:17;5013:27;5003:122;;5044:79;;:::i;:::-;5003:122;5161:6;5148:20;5186:78;5260:3;5252:6;5245:4;5237:6;5233:17;5186:78;:::i;:::-;5177:87;;4993:277;4932:338;;;;:::o;5276:943::-;5371:6;5379;5387;5395;5444:3;5432:9;5423:7;5419:23;5415:33;5412:120;;;5451:79;;:::i;:::-;5412:120;5571:1;5596:53;5641:7;5632:6;5621:9;5617:22;5596:53;:::i;:::-;5586:63;;5542:117;5698:2;5724:53;5769:7;5760:6;5749:9;5745:22;5724:53;:::i;:::-;5714:63;;5669:118;5826:2;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5797:118;5982:2;5971:9;5967:18;5954:32;6013:18;6005:6;6002:30;5999:117;;;6035:79;;:::i;:::-;5999:117;6140:62;6194:7;6185:6;6174:9;6170:22;6140:62;:::i;:::-;6130:72;;5925:287;5276:943;;;;;;;:::o;6225:115::-;6310:23;6327:5;6310:23;:::i;:::-;6305:3;6298:36;6225:115;;:::o;6346:218::-;6437:4;6475:2;6464:9;6460:18;6452:26;;6488:69;6554:1;6543:9;6539:17;6530:6;6488:69;:::i;:::-;6346:218;;;;:::o;6570:474::-;6638:6;6646;6695:2;6683:9;6674:7;6670:23;6666:32;6663:119;;;6701:79;;:::i;:::-;6663:119;6821:1;6846:53;6891:7;6882:6;6871:9;6867:22;6846:53;:::i;:::-;6836:63;;6792:117;6948:2;6974:53;7019:7;7010:6;6999:9;6995:22;6974:53;:::i;:::-;6964:63;;6919:118;6570:474;;;;;:::o;7050:118::-;7137:24;7155:5;7137:24;:::i;:::-;7132:3;7125:37;7050:118;;:::o;7174:222::-;7267:4;7305:2;7294:9;7290:18;7282:26;;7318:71;7386:1;7375:9;7371:17;7362:6;7318:71;:::i;:::-;7174:222;;;;:::o;7402:329::-;7461:6;7510:2;7498:9;7489:7;7485:23;7481:32;7478:119;;;7516:79;;:::i;:::-;7478:119;7636:1;7661:53;7706:7;7697:6;7686:9;7682:22;7661:53;:::i;:::-;7651:63;;7607:117;7402:329;;;;:::o;7737:474::-;7805:6;7813;7862:2;7850:9;7841:7;7837:23;7833:32;7830:119;;;7868:79;;:::i;:::-;7830:119;7988:1;8013:53;8058:7;8049:6;8038:9;8034:22;8013:53;:::i;:::-;8003:63;;7959:117;8115:2;8141:53;8186:7;8177:6;8166:9;8162:22;8141:53;:::i;:::-;8131:63;;8086:118;7737:474;;;;;:::o;8217:886::-;8478:4;8516:3;8505:9;8501:19;8493:27;;8530:71;8598:1;8587:9;8583:17;8574:6;8530:71;:::i;:::-;8611:72;8679:2;8668:9;8664:18;8655:6;8611:72;:::i;:::-;8693;8761:2;8750:9;8746:18;8737:6;8693:72;:::i;:::-;8775;8843:2;8832:9;8828:18;8819:6;8775:72;:::i;:::-;8857:73;8925:3;8914:9;8910:19;8901:6;8857:73;:::i;:::-;8940;9008:3;8997:9;8993:19;8984:6;8940:73;:::i;:::-;9023;9091:3;9080:9;9076:19;9067:6;9023:73;:::i;:::-;8217:886;;;;;;;;;;:::o;9109:911::-;9204:6;9212;9220;9228;9236;9285:3;9273:9;9264:7;9260:23;9256:33;9253:120;;;9292:79;;:::i;:::-;9253:120;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9667:2;9693:53;9738:7;9729:6;9718:9;9714:22;9693:53;:::i;:::-;9683:63;;9638:118;9795:2;9821:53;9866:7;9857:6;9846:9;9842:22;9821:53;:::i;:::-;9811:63;;9766:118;9923:3;9950:53;9995:7;9986:6;9975:9;9971:22;9950:53;:::i;:::-;9940:63;;9894:119;9109:911;;;;;;;;:::o;10026:311::-;10103:4;10193:18;10185:6;10182:30;10179:56;;;10215:18;;:::i;:::-;10179:56;10265:4;10257:6;10253:17;10245:25;;10325:4;10319;10315:15;10307:23;;10026:311;;;:::o;10343:117::-;10452:1;10449;10442:12;10483:710;10579:5;10604:81;10620:64;10677:6;10620:64;:::i;:::-;10604:81;:::i;:::-;10595:90;;10705:5;10734:6;10727:5;10720:21;10768:4;10761:5;10757:16;10750:23;;10821:4;10813:6;10809:17;10801:6;10797:30;10850:3;10842:6;10839:15;10836:122;;;10869:79;;:::i;:::-;10836:122;10984:6;10967:220;11001:6;10996:3;10993:15;10967:220;;;11076:3;11105:37;11138:3;11126:10;11105:37;:::i;:::-;11100:3;11093:50;11172:4;11167:3;11163:14;11156:21;;11043:144;11027:4;11022:3;11018:14;11011:21;;10967:220;;;10971:21;10585:608;;10483:710;;;;;:::o;11216:370::-;11287:5;11336:3;11329:4;11321:6;11317:17;11313:27;11303:122;;11344:79;;:::i;:::-;11303:122;11461:6;11448:20;11486:94;11576:3;11568:6;11561:4;11553:6;11549:17;11486:94;:::i;:::-;11477:103;;11293:293;11216:370;;;;:::o;11592:1509::-;11746:6;11754;11762;11770;11778;11827:3;11815:9;11806:7;11802:23;11798:33;11795:120;;;11834:79;;:::i;:::-;11795:120;11954:1;11979:53;12024:7;12015:6;12004:9;12000:22;11979:53;:::i;:::-;11969:63;;11925:117;12081:2;12107:53;12152:7;12143:6;12132:9;12128:22;12107:53;:::i;:::-;12097:63;;12052:118;12237:2;12226:9;12222:18;12209:32;12268:18;12260:6;12257:30;12254:117;;;12290:79;;:::i;:::-;12254:117;12395:78;12465:7;12456:6;12445:9;12441:22;12395:78;:::i;:::-;12385:88;;12180:303;12550:2;12539:9;12535:18;12522:32;12581:18;12573:6;12570:30;12567:117;;;12603:79;;:::i;:::-;12567:117;12708:78;12778:7;12769:6;12758:9;12754:22;12708:78;:::i;:::-;12698:88;;12493:303;12863:3;12852:9;12848:19;12835:33;12895:18;12887:6;12884:30;12881:117;;;12917:79;;:::i;:::-;12881:117;13022:62;13076:7;13067:6;13056:9;13052:22;13022:62;:::i;:::-;13012:72;;12806:288;11592:1509;;;;;;;;:::o;13107:1089::-;13211:6;13219;13227;13235;13243;13292:3;13280:9;13271:7;13267:23;13263:33;13260:120;;;13299:79;;:::i;:::-;13260:120;13419:1;13444:53;13489:7;13480:6;13469:9;13465:22;13444:53;:::i;:::-;13434:63;;13390:117;13546:2;13572:53;13617:7;13608:6;13597:9;13593:22;13572:53;:::i;:::-;13562:63;;13517:118;13674:2;13700:53;13745:7;13736:6;13725:9;13721:22;13700:53;:::i;:::-;13690:63;;13645:118;13802:2;13828:53;13873:7;13864:6;13853:9;13849:22;13828:53;:::i;:::-;13818:63;;13773:118;13958:3;13947:9;13943:19;13930:33;13990:18;13982:6;13979:30;13976:117;;;14012:79;;:::i;:::-;13976:117;14117:62;14171:7;14162:6;14151:9;14147:22;14117:62;:::i;:::-;14107:72;;13901:288;13107:1089;;;;;;;;:::o;14202:169::-;14286:11;14320:6;14315:3;14308:19;14360:4;14355:3;14351:14;14336:29;;14202:169;;;;:::o;14377:182::-;14517:34;14513:1;14505:6;14501:14;14494:58;14377:182;:::o;14565:366::-;14707:3;14728:67;14792:2;14787:3;14728:67;:::i;:::-;14721:74;;14804:93;14893:3;14804:93;:::i;:::-;14922:2;14917:3;14913:12;14906:19;;14565:366;;;:::o;14937:419::-;15103:4;15141:2;15130:9;15126:18;15118:26;;15190:9;15184:4;15180:20;15176:1;15165:9;15161:17;15154:47;15218:131;15344:4;15218:131;:::i;:::-;15210:139;;14937:419;;;:::o;15362:180::-;15410:77;15407:1;15400:88;15507:4;15504:1;15497:15;15531:4;15528:1;15521:15;15548:348;15588:7;15611:20;15629:1;15611:20;:::i;:::-;15606:25;;15645:20;15663:1;15645:20;:::i;:::-;15640:25;;15833:1;15765:66;15761:74;15758:1;15755:81;15750:1;15743:9;15736:17;15732:105;15729:131;;;15840:18;;:::i;:::-;15729:131;15888:1;15885;15881:9;15870:20;;15548:348;;;;:::o;15902:180::-;15950:77;15947:1;15940:88;16047:4;16044:1;16037:15;16071:4;16068:1;16061:15;16088:185;16128:1;16145:20;16163:1;16145:20;:::i;:::-;16140:25;;16179:20;16197:1;16179:20;:::i;:::-;16174:25;;16218:1;16208:35;;16223:18;;:::i;:::-;16208:35;16265:1;16262;16258:9;16253:14;;16088:185;;;;:::o;16279:234::-;16419:34;16415:1;16407:6;16403:14;16396:58;16488:17;16483:2;16475:6;16471:15;16464:42;16279:234;:::o;16519:366::-;16661:3;16682:67;16746:2;16741:3;16682:67;:::i;:::-;16675:74;;16758:93;16847:3;16758:93;:::i;:::-;16876:2;16871:3;16867:12;16860:19;;16519:366;;;:::o;16891:419::-;17057:4;17095:2;17084:9;17080:18;17072:26;;17144:9;17138:4;17134:20;17130:1;17119:9;17115:17;17108:47;17172:131;17298:4;17172:131;:::i;:::-;17164:139;;16891:419;;;:::o;17316:240::-;17456:34;17452:1;17444:6;17440:14;17433:58;17525:23;17520:2;17512:6;17508:15;17501:48;17316:240;:::o;17562:366::-;17704:3;17725:67;17789:2;17784:3;17725:67;:::i;:::-;17718:74;;17801:93;17890:3;17801:93;:::i;:::-;17919:2;17914:3;17910:12;17903:19;;17562:366;;;:::o;17934:419::-;18100:4;18138:2;18127:9;18123:18;18115:26;;18187:9;18181:4;18177:20;18173:1;18162:9;18158:17;18151:47;18215:131;18341:4;18215:131;:::i;:::-;18207:139;;17934:419;;;:::o;18359:181::-;18499:33;18495:1;18487:6;18483:14;18476:57;18359:181;:::o;18546:366::-;18688:3;18709:67;18773:2;18768:3;18709:67;:::i;:::-;18702:74;;18785:93;18874:3;18785:93;:::i;:::-;18903:2;18898:3;18894:12;18887:19;;18546:366;;;:::o;18918:419::-;19084:4;19122:2;19111:9;19107:18;19099:26;;19171:9;19165:4;19161:20;19157:1;19146:9;19142:17;19135:47;19199:131;19325:4;19199:131;:::i;:::-;19191:139;;18918:419;;;:::o;19343:224::-;19483:34;19479:1;19471:6;19467:14;19460:58;19552:7;19547:2;19539:6;19535:15;19528:32;19343:224;:::o;19573:366::-;19715:3;19736:67;19800:2;19795:3;19736:67;:::i;:::-;19729:74;;19812:93;19901:3;19812:93;:::i;:::-;19930:2;19925:3;19921:12;19914:19;;19573:366;;;:::o;19945:419::-;20111:4;20149:2;20138:9;20134:18;20126:26;;20198:9;20192:4;20188:20;20184:1;20173:9;20169:17;20162:47;20226:131;20352:4;20226:131;:::i;:::-;20218:139;;19945:419;;;:::o;20370:442::-;20519:4;20557:2;20546:9;20542:18;20534:26;;20570:71;20638:1;20627:9;20623:17;20614:6;20570:71;:::i;:::-;20651:72;20719:2;20708:9;20704:18;20695:6;20651:72;:::i;:::-;20733;20801:2;20790:9;20786:18;20777:6;20733:72;:::i;:::-;20370:442;;;;;;:::o;20818:168::-;20901:11;20935:6;20930:3;20923:19;20975:4;20970:3;20966:14;20951:29;;20818:168;;;;:::o;20992:114::-;;:::o;21112:362::-;21253:3;21274:65;21337:1;21332:3;21274:65;:::i;:::-;21267:72;;21348:93;21437:3;21348:93;:::i;:::-;21466:1;21461:3;21457:11;21450:18;;21112:362;;;:::o;21480:859::-;21757:4;21795:3;21784:9;21780:19;21772:27;;21809:71;21877:1;21866:9;21862:17;21853:6;21809:71;:::i;:::-;21890:72;21958:2;21947:9;21943:18;21934:6;21890:72;:::i;:::-;21972;22040:2;22029:9;22025:18;22016:6;21972:72;:::i;:::-;22054;22122:2;22111:9;22107:18;22098:6;22054:72;:::i;:::-;22174:9;22168:4;22164:20;22158:3;22147:9;22143:19;22136:49;22202:130;22327:4;22202:130;:::i;:::-;22194:138;;21480:859;;;;;;;:::o;22345:234::-;22485:34;22481:1;22473:6;22469:14;22462:58;22554:17;22549:2;22541:6;22537:15;22530:42;22345:234;:::o;22585:366::-;22727:3;22748:67;22812:2;22807:3;22748:67;:::i;:::-;22741:74;;22824:93;22913:3;22824:93;:::i;:::-;22942:2;22937:3;22933:12;22926:19;;22585:366;;;:::o;22957:419::-;23123:4;23161:2;23150:9;23146:18;23138:26;;23210:9;23204:4;23200:20;23196:1;23185:9;23181:17;23174:47;23238:131;23364:4;23238:131;:::i;:::-;23230:139;;22957:419;;;:::o;23382:179::-;23522:31;23518:1;23510:6;23506:14;23499:55;23382:179;:::o;23567:366::-;23709:3;23730:67;23794:2;23789:3;23730:67;:::i;:::-;23723:74;;23806:93;23895:3;23806:93;:::i;:::-;23924:2;23919:3;23915:12;23908:19;;23567:366;;;:::o;23939:419::-;24105:4;24143:2;24132:9;24128:18;24120:26;;24192:9;24186:4;24182:20;24178:1;24167:9;24163:17;24156:47;24220:131;24346:4;24220:131;:::i;:::-;24212:139;;23939:419;;;:::o;24364:180::-;24504:32;24500:1;24492:6;24488:14;24481:56;24364:180;:::o;24550:366::-;24692:3;24713:67;24777:2;24772:3;24713:67;:::i;:::-;24706:74;;24789:93;24878:3;24789:93;:::i;:::-;24907:2;24902:3;24898:12;24891:19;;24550:366;;;:::o;24922:419::-;25088:4;25126:2;25115:9;25111:18;25103:26;;25175:9;25169:4;25165:20;25161:1;25150:9;25146:17;25139:47;25203:131;25329:4;25203:131;:::i;:::-;25195:139;;24922:419;;;:::o;25347:226::-;25487:34;25483:1;25475:6;25471:14;25464:58;25556:9;25551:2;25543:6;25539:15;25532:34;25347:226;:::o;25579:366::-;25721:3;25742:67;25806:2;25801:3;25742:67;:::i;:::-;25735:74;;25818:93;25907:3;25818:93;:::i;:::-;25936:2;25931:3;25927:12;25920:19;;25579:366;;;:::o;25951:419::-;26117:4;26155:2;26144:9;26140:18;26132:26;;26204:9;26198:4;26194:20;26190:1;26179:9;26175:17;26168:47;26232:131;26358:4;26232:131;:::i;:::-;26224:139;;25951:419;;;:::o;26376:227::-;26516:34;26512:1;26504:6;26500:14;26493:58;26585:10;26580:2;26572:6;26568:15;26561:35;26376:227;:::o;26609:366::-;26751:3;26772:67;26836:2;26831:3;26772:67;:::i;:::-;26765:74;;26848:93;26937:3;26848:93;:::i;:::-;26966:2;26961:3;26957:12;26950:19;;26609:366;;;:::o;26981:419::-;27147:4;27185:2;27174:9;27170:18;27162:26;;27234:9;27228:4;27224:20;27220:1;27209:9;27205:17;27198:47;27262:131;27388:4;27262:131;:::i;:::-;27254:139;;26981:419;;;:::o;27406:332::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27578:71;27646:1;27635:9;27631:17;27622:6;27578:71;:::i;:::-;27659:72;27727:2;27716:9;27712:18;27703:6;27659:72;:::i;:::-;27406:332;;;;;:::o;27744:234::-;27884:34;27880:1;27872:6;27868:14;27861:58;27953:17;27948:2;27940:6;27936:15;27929:42;27744:234;:::o;27984:366::-;28126:3;28147:67;28211:2;28206:3;28147:67;:::i;:::-;28140:74;;28223:93;28312:3;28223:93;:::i;:::-;28341:2;28336:3;28332:12;28325:19;;27984:366;;;:::o;28356:419::-;28522:4;28560:2;28549:9;28545:18;28537:26;;28609:9;28603:4;28599:20;28595:1;28584:9;28580:17;28573:47;28637:131;28763:4;28637:131;:::i;:::-;28629:139;;28356:419;;;:::o;28781:182::-;28921:34;28917:1;28909:6;28905:14;28898:58;28781:182;:::o;28969:366::-;29111:3;29132:67;29196:2;29191:3;29132:67;:::i;:::-;29125:74;;29208:93;29297:3;29208:93;:::i;:::-;29326:2;29321:3;29317:12;29310:19;;28969:366;;;:::o;29341:419::-;29507:4;29545:2;29534:9;29530:18;29522:26;;29594:9;29588:4;29584:20;29580:1;29569:9;29565:17;29558:47;29622:131;29748:4;29622:131;:::i;:::-;29614:139;;29341:419;;;:::o;29766:176::-;29906:28;29902:1;29894:6;29890:14;29883:52;29766:176;:::o;29948:366::-;30090:3;30111:67;30175:2;30170:3;30111:67;:::i;:::-;30104:74;;30187:93;30276:3;30187:93;:::i;:::-;30305:2;30300:3;30296:12;30289:19;;29948:366;;;:::o;30320:419::-;30486:4;30524:2;30513:9;30509:18;30501:26;;30573:9;30567:4;30563:20;30559:1;30548:9;30544:17;30537:47;30601:131;30727:4;30601:131;:::i;:::-;30593:139;;30320:419;;;:::o;30745:179::-;30885:31;30881:1;30873:6;30869:14;30862:55;30745:179;:::o;30930:366::-;31072:3;31093:67;31157:2;31152:3;31093:67;:::i;:::-;31086:74;;31169:93;31258:3;31169:93;:::i;:::-;31287:2;31282:3;31278:12;31271:19;;30930:366;;;:::o;31302:419::-;31468:4;31506:2;31495:9;31491:18;31483:26;;31555:9;31549:4;31545:20;31541:1;31530:9;31526:17;31519:47;31583:131;31709:4;31583:131;:::i;:::-;31575:139;;31302:419;;;:::o;31727:305::-;31767:3;31786:20;31804:1;31786:20;:::i;:::-;31781:25;;31820:20;31838:1;31820:20;:::i;:::-;31815:25;;31974:1;31906:66;31902:74;31899:1;31896:81;31893:107;;;31980:18;;:::i;:::-;31893:107;32024:1;32021;32017:9;32010:16;;31727:305;;;;:::o;32038:222::-;32178:34;32174:1;32166:6;32162:14;32155:58;32247:5;32242:2;32234:6;32230:15;32223:30;32038:222;:::o;32266:366::-;32408:3;32429:67;32493:2;32488:3;32429:67;:::i;:::-;32422:74;;32505:93;32594:3;32505:93;:::i;:::-;32623:2;32618:3;32614:12;32607:19;;32266:366;;;:::o;32638:419::-;32804:4;32842:2;32831:9;32827:18;32819:26;;32891:9;32885:4;32881:20;32877:1;32866:9;32862:17;32855:47;32919:131;33045:4;32919:131;:::i;:::-;32911:139;;32638:419;;;:::o;33063:553::-;33240:4;33278:3;33267:9;33263:19;33255:27;;33292:71;33360:1;33349:9;33345:17;33336:6;33292:71;:::i;:::-;33373:72;33441:2;33430:9;33426:18;33417:6;33373:72;:::i;:::-;33455;33523:2;33512:9;33508:18;33499:6;33455:72;:::i;:::-;33537;33605:2;33594:9;33590:18;33581:6;33537:72;:::i;:::-;33063:553;;;;;;;:::o;33622:238::-;33762:34;33758:1;33750:6;33746:14;33739:58;33831:21;33826:2;33818:6;33814:15;33807:46;33622:238;:::o;33866:366::-;34008:3;34029:67;34093:2;34088:3;34029:67;:::i;:::-;34022:74;;34105:93;34194:3;34105:93;:::i;:::-;34223:2;34218:3;34214:12;34207:19;;33866:366;;;:::o;34238:419::-;34404:4;34442:2;34431:9;34427:18;34419:26;;34491:9;34485:4;34481:20;34477:1;34466:9;34462:17;34455:47;34519:131;34645:4;34519:131;:::i;:::-;34511:139;;34238:419;;;:::o;34663:182::-;34803:34;34799:1;34791:6;34787:14;34780:58;34663:182;:::o;34851:366::-;34993:3;35014:67;35078:2;35073:3;35014:67;:::i;:::-;35007:74;;35090:93;35179:3;35090:93;:::i;:::-;35208:2;35203:3;35199:12;35192:19;;34851:366;;;:::o;35223:419::-;35389:4;35427:2;35416:9;35412:18;35404:26;;35476:9;35470:4;35466:20;35462:1;35451:9;35447:17;35440:47;35504:131;35630:4;35504:131;:::i;:::-;35496:139;;35223:419;;;:::o;35648:234::-;35788:34;35784:1;35776:6;35772:14;35765:58;35857:17;35852:2;35844:6;35840:15;35833:42;35648:234;:::o;35888:366::-;36030:3;36051:67;36115:2;36110:3;36051:67;:::i;:::-;36044:74;;36127:93;36216:3;36127:93;:::i;:::-;36245:2;36240:3;36236:12;36229:19;;35888:366;;;:::o;36260:419::-;36426:4;36464:2;36453:9;36449:18;36441:26;;36513:9;36507:4;36503:20;36499:1;36488:9;36484:17;36477:47;36541:131;36667:4;36541:131;:::i;:::-;36533:139;;36260:419;;;:::o;36685:191::-;36725:4;36745:20;36763:1;36745:20;:::i;:::-;36740:25;;36779:20;36797:1;36779:20;:::i;:::-;36774:25;;36818:1;36815;36812:8;36809:34;;;36823:18;;:::i;:::-;36809:34;36868:1;36865;36861:9;36853:17;;36685:191;;;;:::o;36882:143::-;36939:5;36970:6;36964:13;36955:22;;36986:33;37013:5;36986:33;:::i;:::-;36882:143;;;;:::o;37031:351::-;37101:6;37150:2;37138:9;37129:7;37125:23;37121:32;37118:119;;;37156:79;;:::i;:::-;37118:119;37276:1;37301:64;37357:7;37348:6;37337:9;37333:22;37301:64;:::i;:::-;37291:74;;37247:128;37031:351;;;;:::o;37388:248::-;37528:34;37524:1;37516:6;37512:14;37505:58;37597:31;37592:2;37584:6;37580:15;37573:56;37388:248;:::o;37642:366::-;37784:3;37805:67;37869:2;37864:3;37805:67;:::i;:::-;37798:74;;37881:93;37970:3;37881:93;:::i;:::-;37999:2;37994:3;37990:12;37983:19;;37642:366;;;:::o;38014:419::-;38180:4;38218:2;38207:9;38203:18;38195:26;;38267:9;38261:4;38257:20;38253:1;38242:9;38238:17;38231:47;38295:131;38421:4;38295:131;:::i;:::-;38287:139;;38014:419;;;:::o;38439:332::-;38560:4;38598:2;38587:9;38583:18;38575:26;;38611:71;38679:1;38668:9;38664:17;38655:6;38611:71;:::i;:::-;38692:72;38760:2;38749:9;38745:18;38736:6;38692:72;:::i;:::-;38439:332;;;;;:::o;38777:294::-;38917:34;38913:1;38905:6;38901:14;38894:58;38986:34;38981:2;38973:6;38969:15;38962:59;39055:8;39050:2;39042:6;39038:15;39031:33;38777:294;:::o;39077:366::-;39219:3;39240:67;39304:2;39299:3;39240:67;:::i;:::-;39233:74;;39316:93;39405:3;39316:93;:::i;:::-;39434:2;39429:3;39425:12;39418:19;;39077:366;;;:::o;39449:419::-;39615:4;39653:2;39642:9;39638:18;39630:26;;39702:9;39696:4;39692:20;39688:1;39677:9;39673:17;39666:47;39730:131;39856:4;39730:131;:::i;:::-;39722:139;;39449:419;;;:::o;39874:886::-;40135:4;40173:3;40162:9;40158:19;40150:27;;40187:71;40255:1;40244:9;40240:17;40231:6;40187:71;:::i;:::-;40268:72;40336:2;40325:9;40321:18;40312:6;40268:72;:::i;:::-;40350;40418:2;40407:9;40403:18;40394:6;40350:72;:::i;:::-;40432;40500:2;40489:9;40485:18;40476:6;40432:72;:::i;:::-;40514:73;40582:3;40571:9;40567:19;40558:6;40514:73;:::i;:::-;40597;40665:3;40654:9;40650:19;40641:6;40597:73;:::i;:::-;40680;40748:3;40737:9;40733:19;40724:6;40680:73;:::i;:::-;39874:886;;;;;;;;;;:::o;40766:225::-;40906:34;40902:1;40894:6;40890:14;40883:58;40975:8;40970:2;40962:6;40958:15;40951:33;40766:225;:::o;40997:366::-;41139:3;41160:67;41224:2;41219:3;41160:67;:::i;:::-;41153:74;;41236:93;41325:3;41236:93;:::i;:::-;41354:2;41349:3;41345:12;41338:19;;40997:366;;;:::o;41369:419::-;41535:4;41573:2;41562:9;41558:18;41550:26;;41622:9;41616:4;41612:20;41608:1;41597:9;41593:17;41586:47;41650:131;41776:4;41650:131;:::i;:::-;41642:139;;41369:419;;;:::o;41794:116::-;41864:21;41879:5;41864:21;:::i;:::-;41857:5;41854:32;41844:60;;41900:1;41897;41890:12;41844:60;41794:116;:::o;41916:137::-;41970:5;42001:6;41995:13;41986:22;;42017:30;42041:5;42017:30;:::i;:::-;41916:137;;;;:::o;42059:345::-;42126:6;42175:2;42163:9;42154:7;42150:23;42146:32;42143:119;;;42181:79;;:::i;:::-;42143:119;42301:1;42326:61;42379:7;42370:6;42359:9;42355:22;42326:61;:::i;:::-;42316:71;;42272:125;42059:345;;;;:::o;42410:229::-;42550:34;42546:1;42538:6;42534:14;42527:58;42619:12;42614:2;42606:6;42602:15;42595:37;42410:229;:::o;42645:366::-;42787:3;42808:67;42872:2;42867:3;42808:67;:::i;:::-;42801:74;;42884:93;42973:3;42884:93;:::i;:::-;43002:2;42997:3;42993:12;42986:19;;42645:366;;;:::o;43017:419::-;43183:4;43221:2;43210:9;43206:18;43198:26;;43270:9;43264:4;43260:20;43256:1;43245:9;43241:17;43234:47;43298:131;43424:4;43298:131;:::i;:::-;43290:139;;43017:419;;;:::o;43442:225::-;43582:34;43578:1;43570:6;43566:14;43559:58;43651:8;43646:2;43638:6;43634:15;43627:33;43442:225;:::o;43673:366::-;43815:3;43836:67;43900:2;43895:3;43836:67;:::i;:::-;43829:74;;43912:93;44001:3;43912:93;:::i;:::-;44030:2;44025:3;44021:12;44014:19;;43673:366;;;:::o;44045:419::-;44211:4;44249:2;44238:9;44234:18;44226:26;;44298:9;44292:4;44288:20;44284:1;44273:9;44269:17;44262:47;44326:131;44452:4;44326:131;:::i;:::-;44318:139;;44045:419;;;:::o;44470:179::-;44610:31;44606:1;44598:6;44594:14;44587:55;44470:179;:::o;44655:366::-;44797:3;44818:67;44882:2;44877:3;44818:67;:::i;:::-;44811:74;;44894:93;44983:3;44894:93;:::i;:::-;45012:2;45007:3;45003:12;44996:19;;44655:366;;;:::o;45027:419::-;45193:4;45231:2;45220:9;45216:18;45208:26;;45280:9;45274:4;45270:20;45266:1;45255:9;45251:17;45244:47;45308:131;45434:4;45308:131;:::i;:::-;45300:139;;45027:419;;;:::o;45452:98::-;45503:6;45537:5;45531:12;45521:22;;45452:98;;;:::o;45556:147::-;45657:11;45694:3;45679:18;;45556:147;;;;:::o;45709:307::-;45777:1;45787:113;45801:6;45798:1;45795:13;45787:113;;;45886:1;45881:3;45877:11;45871:18;45867:1;45862:3;45858:11;45851:39;45823:2;45820:1;45816:10;45811:15;;45787:113;;;45918:6;45915:1;45912:13;45909:101;;;45998:1;45989:6;45984:3;45980:16;45973:27;45909:101;45758:258;45709:307;;;:::o;46022:373::-;46126:3;46154:38;46186:5;46154:38;:::i;:::-;46208:88;46289:6;46284:3;46208:88;:::i;:::-;46201:95;;46305:52;46350:6;46345:3;46338:4;46331:5;46327:16;46305:52;:::i;:::-;46382:6;46377:3;46373:16;46366:23;;46130:265;46022:373;;;;:::o;46401:271::-;46531:3;46553:93;46642:3;46633:6;46553:93;:::i;:::-;46546:100;;46663:3;46656:10;;46401:271;;;;:::o;46678:99::-;46730:6;46764:5;46758:12;46748:22;;46678:99;;;:::o;46783:364::-;46871:3;46899:39;46932:5;46899:39;:::i;:::-;46954:71;47018:6;47013:3;46954:71;:::i;:::-;46947:78;;47034:52;47079:6;47074:3;47067:4;47060:5;47056:16;47034:52;:::i;:::-;47111:29;47133:6;47111:29;:::i;:::-;47106:3;47102:39;47095:46;;46875:272;46783:364;;;;:::o;47153:313::-;47266:4;47304:2;47293:9;47289:18;47281:26;;47353:9;47347:4;47343:20;47339:1;47328:9;47324:17;47317:47;47381:78;47454:4;47445:6;47381:78;:::i;:::-;47373:86;;47153:313;;;;:::o", - "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract BENftMarket is Ownable, ReentrancyGuard, ERC1155Holder, ERC721Holder {\n using SafeERC20 for IERC20;\n\n struct OrderInfo {\n uint256 orderId;\n uint256 tokenId;\n uint256 amount;\n address owner;\n uint256 price;\n address nftToken;\n address currency;\n }\n mapping(address => bool) public erc721Supported;\n mapping(address => bool) public erc1155Supported;\n mapping(address => bool) public erc20Supported;\n mapping(uint256 => OrderInfo) public orderInfos;\n mapping(address => uint256) public nftPriceMaxLimit;\n mapping(address => uint256) public nftPriceMinLimit;\n\n event SellOrder(\n uint256 indexed tokenId,\n address indexed owner,\n address indexed nftToken,\n uint256 amount,\n uint256 orderId,\n address currency,\n uint256 price\n );\n\n event CancelOrder(\n uint256 indexed orderId,\n address indexed nftToken,\n uint256 indexed tokenId\n );\n\n event PriceUpdate(\n uint256 indexed orderId,\n address indexed nftToken,\n uint256 indexed tokenId,\n uint256 priceOld,\n uint256 price\n );\n\n event BuyOrder(\n uint256 indexed tokenId,\n uint256 orderId,\n address nftToken,\n uint256 amount,\n address seller,\n address buyer,\n address erc20,\n uint256 price\n );\n\n event AddNFTSuppout(address nftToken);\n event RemoveNFTSuppout(address nftToken);\n event AddERC20Suppout(address erc20);\n event RemoveERC20Suppout(address erc20);\n\n uint256 public tranFeeTotal;\n uint256 public tranTaxTotal;\n\n uint256 constant ROUND = 1000000;\n uint256 public transactionFee = (3 * ROUND) / 100;\n // min transaction fee is: 0\n uint256 public constant MIN_TRANSACTION_FEE = 0;\n // max transaction fee is: 10%\n uint256 public constant MAX_TRANSACTION_FEE = (10 * ROUND) / 100;\n\n uint256 public transactionTax = (1 * ROUND) / 100;\n // min transaction tax is: 0\n uint256 public constant MIN_TRANSACTION_TAX = 0;\n // max transaction tax is: 10%\n uint256 public constant MAX_TRANSACTION_TAX = (10 * ROUND) / 100;\n\n address public feeToAddress;\n\n address public taxToAddress;\n\n uint256 public incrId;\n\n function sell(\n address nftToken,\n address currency,\n uint256 tokenId,\n uint256 price,\n uint256 amount\n ) external {\n require(tokenId != 0, \"NFTMarket: tokenId can not be 0!\");\n require(\n erc721Supported[nftToken] || erc1155Supported[nftToken],\n \"NFTMarket: Unsupported NFT\"\n );\n require(erc20Supported[currency], \"NFTMarket: Unsupported tokens\");\n require(\n price <= nftPriceMaxLimit[nftToken] || nftPriceMaxLimit[nftToken] == 0,\n \"NFTMarket: Maximum price limit exceeded\"\n );\n require(\n price >= nftPriceMinLimit[nftToken] && price != 0,\n \"NFTMarket: Below the minimum price limit\"\n );\n incrId += 1;\n OrderInfo storage orderInfo = orderInfos[incrId];\n orderInfo.orderId = incrId;\n orderInfo.tokenId = tokenId;\n orderInfo.amount = amount;\n orderInfo.nftToken = nftToken;\n orderInfo.owner = _msgSender();\n orderInfo.price = price;\n orderInfo.currency = currency;\n if (erc721Supported[nftToken]) {\n require(amount == 1, \"NFTMarket: ERC721 amount must be 1 \");\n IERC721(nftToken).safeTransferFrom(_msgSender(), address(this), tokenId);\n } else if (erc1155Supported[nftToken]) {\n IERC1155(nftToken).safeTransferFrom(\n _msgSender(),\n address(this),\n tokenId,\n amount,\n \"\"\n );\n }\n\n emit SellOrder(\n tokenId,\n _msgSender(),\n nftToken,\n amount,\n incrId,\n currency,\n price\n );\n }\n\n function buy(uint256 orderId) external nonReentrant {\n OrderInfo memory orderInfo = orderInfos[orderId];\n require(orderInfo.tokenId != 0, \"NFTMarket: NFT does not exist\");\n uint256 _transactionFee = (orderInfo.price * transactionFee) / ROUND;\n tranFeeTotal = tranFeeTotal + _transactionFee;\n uint256 _transactionTax = (orderInfo.price * transactionTax) / ROUND;\n tranTaxTotal = tranTaxTotal + _transactionTax;\n uint256 _amount = orderInfo.price - _transactionFee - _transactionTax;\n IERC20 paymentContract = IERC20(orderInfo.currency);\n require(\n paymentContract.balanceOf(_msgSender()) >= orderInfo.price,\n \"BENFTMarket: buyer doesn't have enough token to buy this item\"\n );\n require(\n paymentContract.allowance(_msgSender(), address(this)) >= orderInfo.price,\n \"BENFTMarket: buyer doesn't approve marketplace to spend payment amount\"\n );\n paymentContract.safeTransferFrom(_msgSender(), orderInfo.owner, _amount);\n if (_transactionFee > 0) {\n paymentContract.safeTransferFrom(\n _msgSender(),\n feeToAddress,\n _transactionFee\n );\n }\n if (_transactionTax > 0) {\n paymentContract.safeTransferFrom(\n _msgSender(),\n taxToAddress,\n _transactionTax\n );\n }\n\n if (erc721Supported[orderInfo.nftToken]) {\n IERC721(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId\n );\n } else if (erc1155Supported[orderInfo.nftToken]) {\n IERC1155(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId,\n orderInfo.amount,\n \"\"\n );\n }\n\n emit BuyOrder(\n orderInfo.tokenId,\n orderId,\n orderInfo.nftToken,\n orderInfo.amount,\n orderInfo.owner,\n _msgSender(),\n orderInfo.currency,\n orderInfo.price\n );\n delete orderInfos[orderId];\n }\n\n function cancelOrder(uint256 orderId) external nonReentrant {\n require(\n orderInfos[orderId].owner == _msgSender(),\n \"NFTMarket: cancel caller is not owner\"\n );\n OrderInfo memory orderInfo = orderInfos[orderId];\n if (erc721Supported[orderInfo.nftToken]) {\n IERC721(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId\n );\n } else if (erc1155Supported[orderInfo.nftToken]) {\n IERC1155(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId,\n orderInfo.amount,\n \"\"\n );\n }\n delete orderInfos[orderId];\n\n emit CancelOrder(orderId, orderInfo.nftToken, orderInfo.tokenId);\n }\n\n function updatePrice(uint256 orderId, uint256 price) external {\n OrderInfo memory orderInfo = orderInfos[orderId];\n require(orderInfo.tokenId != 0, \"NFTMarket: NFT does not exist\");\n require(orderInfo.owner == _msgSender(), \"NFTMarket: caller is not owner\");\n require(\n price <= nftPriceMaxLimit[orderInfo.nftToken] ||\n nftPriceMaxLimit[orderInfo.nftToken] == 0,\n \"NFTMarket: Maximum price limit exceeded\"\n );\n require(\n price >= nftPriceMinLimit[orderInfo.nftToken] && price != 0,\n \"NFTMarket: Below the minimum price limit\"\n );\n uint256 priceOld = orderInfo.price;\n orderInfo.price = price;\n emit PriceUpdate(\n orderId,\n orderInfo.nftToken,\n orderInfo.tokenId,\n priceOld,\n price\n );\n }\n\n /**\n * @dev Add ERC20 support\n */\n function addERC721Support(address nftToken) external onlyOwner {\n erc721Supported[nftToken] = true;\n emit AddNFTSuppout(nftToken);\n }\n\n /**\n * @dev Remove 721 NFT support\n */\n function removeERC721Support(address nftToken) external onlyOwner {\n erc721Supported[nftToken] = false;\n emit RemoveNFTSuppout(nftToken);\n }\n\n /**\n * @dev Add 1155 NFT support\n */\n function addERC1155Support(address nftToken) external onlyOwner {\n erc1155Supported[nftToken] = true;\n emit AddNFTSuppout(nftToken);\n }\n\n /**\n * @dev Remove 1155 NFT support\n */\n function removeERC1155Support(address nftToken) external onlyOwner {\n erc1155Supported[nftToken] = false;\n emit RemoveNFTSuppout(nftToken);\n }\n\n /**\n * @dev Add ERC20 support\n */\n function addERC20Support(address erc20) external onlyOwner {\n require(erc20 != address(0), \"NFTMarket: ERC20 address is zero\");\n erc20Supported[erc20] = true;\n emit AddERC20Suppout(erc20);\n }\n\n /**\n * @dev Remove ERC20 support\n */\n function removeERC20Support(address erc20) external onlyOwner {\n erc20Supported[erc20] = false;\n emit RemoveERC20Suppout(erc20);\n }\n\n /**\n * @dev Set the maximum price limit for NFT\n */\n function setNFTPriceMaxLimit(\n address nftToken,\n uint256 maxLimit\n ) external onlyOwner {\n require(\n maxLimit >= nftPriceMinLimit[nftToken],\n \"NFTMarket: maxLimit can not be less than min limit!\"\n );\n nftPriceMaxLimit[nftToken] = maxLimit;\n }\n\n /**\n * @dev Set the minimum price limit for NFT\n */\n function setNFTPriceMinLimit(\n address nftToken,\n uint256 minLimit\n ) external onlyOwner {\n if (nftPriceMaxLimit[nftToken] != 0) {\n require(\n minLimit <= nftPriceMaxLimit[nftToken],\n \"NFTMarket: minLimit can not be larger than max limit!\"\n );\n }\n nftPriceMinLimit[nftToken] = minLimit;\n }\n\n /**\n * @dev Set the transaction fee\n */\n function setTransactionFee(uint256 _transactionFee) external onlyOwner {\n require(\n _transactionFee >= MIN_TRANSACTION_FEE &&\n _transactionFee <= MAX_TRANSACTION_FEE,\n \"NFTMarket: _transactionFee must >= 0 and <= 10%\"\n );\n transactionFee = _transactionFee;\n }\n\n /**\n * @dev Set the fee received address\n */\n function setFeeToAddress(address _feeToAddress) external onlyOwner {\n require(\n _feeToAddress != address(0),\n \"NFTMarket: fee received address can not be zero\"\n );\n feeToAddress = _feeToAddress;\n }\n\n /**\n * @dev Set the transaction tax\n */\n function setTransactionTax(uint256 _transactionTax) external onlyOwner {\n require(\n _transactionTax >= MIN_TRANSACTION_TAX &&\n _transactionTax <= MAX_TRANSACTION_TAX,\n \"NFTMarket: _transactionTax must >= 0 and <= 10%\"\n );\n transactionTax = _transactionTax;\n }\n\n /**\n * @dev Set the tax received address\n */\n function setTaxToAddress(address _taxToAddress) external onlyOwner {\n require(\n _taxToAddress != address(0),\n \"NFTMarket: tax received address can not be zero\"\n );\n taxToAddress = _taxToAddress;\n }\n}\n", + "sourceMap": "559:10166:15:-:0;;;2123:3;2066:7;2110:1;:9;;;;:::i;:::-;2109:17;;;;:::i;:::-;2077:49;;2360:3;2066:7;2347:1;:9;;;;:::i;:::-;2346:17;;;;:::i;:::-;2314:49;;559:10166;;;;;;;;;;921:32:0;940:12;:10;;;:12;;:::i;:::-;921:18;;;:32;;:::i;:::-;1701:1:1;1806:7;:22;;;;559:10166:15;;640:96:12;693:7;719:10;712:17;;640:96;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;7:77:16:-;44:7;73:5;62:16;;7:77;;;:::o;90:180::-;138:77;135:1;128:88;235:4;232:1;225:15;259:4;256:1;249:15;276:348;316:7;339:20;357:1;339:20;:::i;:::-;334:25;;373:20;391:1;373:20;:::i;:::-;368:25;;561:1;493:66;489:74;486:1;483:81;478:1;471:9;464:17;460:105;457:131;;;568:18;;:::i;:::-;457:131;616:1;613;609:9;598:20;;276:348;;;;:::o;630:180::-;678:77;675:1;668:88;775:4;772:1;765:15;799:4;796:1;789:15;816:185;856:1;873:20;891:1;873:20;:::i;:::-;868:25;;907:20;925:1;907:20;:::i;:::-;902:25;;946:1;936:35;;951:18;;:::i;:::-;936:35;993:1;990;986:9;981:14;;816:185;;;;:::o;559:10166:15:-;;;;;;;", + "deployedSourceMap": "559:10166:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;387:221:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2551:27:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9557:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;588:200:10;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9178:329:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2482:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;892:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2398:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2615:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1100:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8205:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7819:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6060:748;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9898:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1978:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;841:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2245:64;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;:::i;:::-;;6812:774:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7630:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10165:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;944:46:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2077:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8013:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2161:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;994;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2641:1474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8846:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8398:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2583:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;724:247:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2314:49:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10506:217;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2009:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4119:1937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;499:219:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8646:138:15;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;387:221:5;489:4;527:34;512:49;;;:11;:49;;;;:89;;;;565:36;589:11;565:23;:36::i;:::-;512:89;505:96;;387:221;;;:::o;2551:27:15:-;;;;;;;;;;;;;:::o;9557:286::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2207:1:15::1;9649:15;:38;;:88;;;;;2306:3;2066:7;2292:2;:10;;;;:::i;:::-;2291:18;;;;:::i;:::-;9699:15;:38;;9649:88;9634:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;9823:15;9806:14;:32;;;;9557:286:::0;:::o;588:200:10:-;726:6;751:30;;;744:37;;588:200;;;;;;:::o;9178:329:15:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9314:1:15::1;9284:16;:26;9301:8;9284:26;;;;;;;;;;;;;;;;:31;9280:180;;9354:16;:26;9371:8;9354:26;;;;;;;;;;;;;;;;9342:8;:38;;9325:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;9280:180;9494:8;9465:16;:26;9482:8;9465:26;;;;;;;;;;;;;;;:37;;;;9178:329:::0;;:::o;2482:64::-;2543:3;2066:7;2529:2;:10;;;;:::i;:::-;2528:18;;;;:::i;:::-;2482:64;:::o;892:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2398:47::-;2444:1;2398:47;:::o;2615:21::-;;;;:::o;1100:51::-;;;;;;;;;;;;;;;;;:::o;8205:149::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8307:5:15::1;8278:16;:26;8295:8;8278:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8323:26;8340:8;8323:26;;;;;;:::i;:::-;;;;;;;;8205:149:::0;:::o;7819:147::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7919:5:15::1;7891:15;:25;7907:8;7891:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;7935:26;7952:8;7935:26;;;;;;:::i;:::-;;;;;;;;7819:147:::0;:::o;6060:748::-;1744:1:1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;6170:12:15::1;:10;:12::i;:::-;6141:41;;:10;:19;6152:7;6141:19;;;;;;;;;;;:25;;;;;;;;;;;;:41;;;6126:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;6241:26;6270:10;:19;6281:7;6270:19;;;;;;;;;;;6241:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;6299:15;:35;6315:9;:18;;;6299:35;;;;;;;;;;;;;;;;;;;;;;;;;6295:406;;;6352:9;:18;;;6344:44;;;6406:4;6421:12;:10;:12::i;:::-;6443:9;:17;;;6344:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6295:406;;;6485:16;:36;6502:9;:18;;;6485:36;;;;;;;;;;;;;;;;;;;;;;;;;6481:220;;;6540:9;:18;;;6531:45;;;6594:4;6609:12;:10;:12::i;:::-;6631:9;:17;;;6658:9;:16;;;6531:163;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6481:220;6295:406;6713:10;:19;6724:7;6713:19;;;;;;;;;;;;6706:26:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6785:9;:17;;;6765:9;:18;;;6744:59;;6756:7;6744:59;;;;;;;;;;6120:688;1701:1:1::0;2628:7;:22;;;;6060:748:15;:::o;9898:217::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10011:1:15::1;9986:27;;:13;:27;;;;9971:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;10097:13;10082:12;;:28;;;;;;;;;;;;;;;;;;9898:217:::0;:::o;1978:27::-;;;;:::o;841:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;2245:64::-;2306:3;2066:7;2292:2;:10;;;;:::i;:::-;2291:18;;;;:::i;:::-;2245:64;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;6812:774:15:-;6880:27;6910:10;:19;6921:7;6910:19;;;;;;;;;;;6880:49;;6964:1;6943:9;:17;;;:22;;6935:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7032:12;:10;:12::i;:::-;7013:31;;:9;:15;;;;;;;;;;;;:31;;;7005:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7109:16;:36;7126:9;:18;;;;;;;;;;;;7109:36;;;;;;;;;;;;;;;;7100:5;:45;;:98;;;;7197:1;7157:16;:36;7174:9;:18;;;;;;;;;;;;7157:36;;;;;;;;;;;;;;;;:41;7100:98;7085:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;7283:16;:36;7300:9;:18;;;;;;;;;;;;7283:36;;;;;;;;;;;;;;;;7274:5;:45;;:59;;;;;7332:1;7323:5;:10;;7274:59;7259:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;7395:16;7414:9;:15;;;7395:34;;7453:5;7435:9;:15;;:23;;;;7529:9;:17;;;7503:9;:18;;;;;;;;;;;;7469:112;;7488:7;7469:112;7554:8;7570:5;7469:112;;;;;;;:::i;:::-;;;;;;;;6874:712;;6812:774;;:::o;7630:140::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7727:4:15::1;7699:15;:25;7715:8;7699:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;7742:23;7756:8;7742:23;;;;;;:::i;:::-;;;;;;;;7630:140:::0;:::o;10165:286::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2444:1:15::1;10257:15;:38;;:88;;;;;2543:3;2066:7;2529:2;:10;;;;:::i;:::-;2528:18;;;;:::i;:::-;10307:15;:38;;10257:88;10242:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;10431:15;10414:14;:32;;;;10165:286:::0;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;944:46:15:-;;;;;;;;;;;;;;;;;;;;;;:::o;2077:49::-;;;;:::o;8013:142::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8112:4:15::1;8083:16;:26;8100:8;8083:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;8127:23;8141:8;8127:23;;;;;;:::i;:::-;;;;;;;;8013:142:::0;:::o;2161:47::-;2207:1;2161:47;:::o;994:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2641:1474::-;2797:1;2786:7;:12;;2778:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2856:15;:25;2872:8;2856:25;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;2885:16;:26;2902:8;2885:26;;;;;;;;;;;;;;;;;;;;;;;;;2856:55;2841:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;2967:14;:24;2982:8;2967:24;;;;;;;;;;;;;;;;;;;;;;;;;2959:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3055:16;:26;3072:8;3055:26;;;;;;;;;;;;;;;;3046:5;:35;;:70;;;;3115:1;3085:16;:26;3102:8;3085:26;;;;;;;;;;;;;;;;:31;3046:70;3031:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;3201:16;:26;3218:8;3201:26;;;;;;;;;;;;;;;;3192:5;:35;;:49;;;;;3240:1;3231:5;:10;;3192:49;3177:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;3313:1;3303:6;;:11;;;;;;;:::i;:::-;;;;;;;;3320:27;3350:10;:18;3361:6;;3350:18;;;;;;;;;;;3320:48;;3394:6;;3374:9;:17;;:26;;;;3426:7;3406:9;:17;;:27;;;;3458:6;3439:9;:16;;:25;;;;3491:8;3470:9;:18;;;:29;;;;;;;;;;;;;;;;;;3523:12;:10;:12::i;:::-;3505:9;:15;;;:30;;;;;;;;;;;;;;;;;;3559:5;3541:9;:15;;:23;;;;3591:8;3570:9;:18;;;:29;;;;;;;;;;;;;;;;;;3609:15;:25;3625:8;3609:25;;;;;;;;;;;;;;;;;;;;;;;;;3605:371;;;3662:1;3652:6;:11;3644:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;3719:8;3711:34;;;3746:12;:10;:12::i;:::-;3768:4;3775:7;3711:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3605:371;;;3800:16;:26;3817:8;3800:26;;;;;;;;;;;;;;;;;;;;;;;;;3796:180;;;3845:8;3836:35;;;3881:12;:10;:12::i;:::-;3911:4;3926:7;3943:6;3836:133;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3796:180;3605:371;4039:8;3987:123;;4019:12;:10;:12::i;:::-;3987:123;;4004:7;3987:123;4055:6;4069;;4083:8;4099:5;3987:123;;;;;;;;;:::i;:::-;;;;;;;;2772:1343;2641:1474;;;;;:::o;8846:270::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8975:16:15::1;:26;8992:8;8975:26;;;;;;;;;;;;;;;;8963:8;:38;;8948:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;9103:8;9074:16;:26;9091:8;9074:26;;;;;;;;;;;;;;;:37;;;;8846:270:::0;;:::o;8398:201::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8488:1:15::1;8471:19;;:5;:19;;;;8463:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8557:4;8533:14;:21;8548:5;8533:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;8572:22;8588:5;8572:22;;;;;;:::i;:::-;;;;;;;;8398:201:::0;:::o;2583:27::-;;;;;;;;;;;;;:::o;724:247:4:-;903:6;928:36;;;921:43;;724:247;;;;;;;:::o;2314:49:15:-;;;;:::o;1045:51::-;;;;;;;;;;;;;;;;;:::o;10506:217::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10619:1:15::1;10594:27;;:13;:27;;;;10579:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;10705:13;10690:12;;:28;;;;;;;;;;;;;;;;;;10506:217:::0;:::o;2009:27::-;;;;:::o;4119:1937::-;1744:1:1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;4177:26:15::1;4206:10;:19;4217:7;4206:19;;;;;;;;;;;4177:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;4260:1;4239:9;:17;;;:22;;4231:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4301:23;2066:7;4346:14;;4328:9;:15;;;:32;;;;:::i;:::-;4327:42;;;;:::i;:::-;4301:68;;4405:15;4390:12;;:30;;;;:::i;:::-;4375:12;:45;;;;4426:23;2066:7;4471:14;;4453:9;:15;;;:32;;;;:::i;:::-;4452:42;;;;:::i;:::-;4426:68;;4530:15;4515:12;;:30;;;;:::i;:::-;4500:12;:45;;;;4551:15;4605;4587;4569:9;:15;;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;4551:69;;4626:22;4658:9;:18;;;4626:51;;4741:9;:15;;;4698;:25;;;4724:12;:10;:12::i;:::-;4698:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;4683:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;4912:9;:15;;;4854;:25;;;4880:12;:10;:12::i;:::-;4902:4;4854:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:73;;4839:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:72;5052:12;:10;:12::i;:::-;5066:9;:15;;;5083:7;5019:15;:32;;;;:72;;;;;;:::i;:::-;5119:1;5101:15;:19;5097:149;;;5130:109;5172:12;:10;:12::i;:::-;5194;;;;;;;;;;;5216:15;5130;:32;;;;:109;;;;;;:::i;:::-;5097:149;5273:1;5255:15;:19;5251:149;;;5284:109;5326:12;:10;:12::i;:::-;5348;;;;;;;;;;;5370:15;5284;:32;;;;:109;;;;;;:::i;:::-;5251:149;5410:15;:35;5426:9;:18;;;5410:35;;;;;;;;;;;;;;;;;;;;;;;;;5406:406;;;5463:9;:18;;;5455:44;;;5517:4;5532:12;:10;:12::i;:::-;5554:9;:17;;;5455:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5406:406;;;5596:16;:36;5613:9;:18;;;5596:36;;;;;;;;;;;;;;;;;;;;;;;;;5592:220;;;5651:9;:18;;;5642:45;;;5705:4;5720:12;:10;:12::i;:::-;5742:9;:17;;;5769:9;:16;;;5642:163;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;5592:220;5406:406;5839:9;:17;;;5823:196;5864:7;5879:9;:18;;;5905:9;:16;;;5929:9;:15;;;5952:12;:10;:12::i;:::-;5972:9;:18;;;5998:9;:15;;;5823:196;;;;;;;;;;;;:::i;:::-;;;;;;;;6032:10;:19;6043:7;6032:19;;;;;;;;;;;;6025:26:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4171:1885;;;;;1701:1:1::0;2628:7;:22;;;;4119:1937:15;:::o;499:219:4:-;655:6;680:31;;;673:38;;499:219;;;;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;8646:138:15:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8738:5:15::1;8714:14;:21;8729:5;8714:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8754:25;8773:5;8754:25;;;;;;:::i;:::-;;;;;;;;8646:138:::0;:::o;829:155:13:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:12:-;693:7;719:10;712:17;;640:96;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;912:241:7:-;1050:96;1070:5;1100:27;;;1129:4;1135:2;1139:5;1077:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:19;:96::i;:::-;912:241;;;;:::o;3207:706::-;3626:23;3652:69;3680:4;3652:69;;;;;;;;;;;;;;;;;3660:5;3652:27;;;;:69;;;;;:::i;:::-;3626:95;;3755:1;3735:10;:17;:21;3731:176;;;3830:10;3819:30;;;;;;;;;;;;:::i;:::-;3811:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3731:176;3277:636;3207:706;;:::o;3861:223:11:-;3994:12;4025:52;4047:6;4055:4;4061:1;4064:12;4025:21;:52::i;:::-;4018:59;;3861:223;;;;;:::o;4948:499::-;5113:12;5170:5;5145:21;:30;;5137:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5236:18;5247:6;5236:10;:18::i;:::-;5228:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5300:12;5314:23;5341:6;:11;;5360:5;5367:4;5341:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5299:73;;;;5389:51;5406:7;5415:10;5427:12;5389:16;:51::i;:::-;5382:58;;;;4948:499;;;;;;:::o;1175:320::-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;7561:692::-;7707:12;7735:7;7731:516;;;7765:10;7758:17;;;;7731:516;7896:1;7876:10;:17;:21;7872:365;;;8070:10;8064:17;8130:15;8117:10;8113:2;8109:19;8102:44;7872:365;8209:12;8202:20;;;;;;;;;;;:::i;:::-;;;;;;;;7561:692;;;;;;:::o;7:75:16:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:118::-;1839:24;1857:5;1839:24;:::i;:::-;1834:3;1827:37;1752:118;;:::o;1876:222::-;1969:4;2007:2;1996:9;1992:18;1984:26;;2020:71;2088:1;2077:9;2073:17;2064:6;2020:71;:::i;:::-;1876:222;;;;:::o;2104:77::-;2141:7;2170:5;2159:16;;2104:77;;;:::o;2187:122::-;2260:24;2278:5;2260:24;:::i;:::-;2253:5;2250:35;2240:63;;2299:1;2296;2289:12;2240:63;2187:122;:::o;2315:139::-;2361:5;2399:6;2386:20;2377:29;;2415:33;2442:5;2415:33;:::i;:::-;2315:139;;;;:::o;2460:329::-;2519:6;2568:2;2556:9;2547:7;2543:23;2539:32;2536:119;;;2574:79;;:::i;:::-;2536:119;2694:1;2719:53;2764:7;2755:6;2744:9;2740:22;2719:53;:::i;:::-;2709:63;;2665:117;2460:329;;;;:::o;2795:122::-;2868:24;2886:5;2868:24;:::i;:::-;2861:5;2858:35;2848:63;;2907:1;2904;2897:12;2848:63;2795:122;:::o;2923:139::-;2969:5;3007:6;2994:20;2985:29;;3023:33;3050:5;3023:33;:::i;:::-;2923:139;;;;:::o;3068:117::-;3177:1;3174;3167:12;3191:117;3300:1;3297;3290:12;3314:102;3355:6;3406:2;3402:7;3397:2;3390:5;3386:14;3382:28;3372:38;;3314:102;;;:::o;3422:180::-;3470:77;3467:1;3460:88;3567:4;3564:1;3557:15;3591:4;3588:1;3581:15;3608:281;3691:27;3713:4;3691:27;:::i;:::-;3683:6;3679:40;3821:6;3809:10;3806:22;3785:18;3773:10;3770:34;3767:62;3764:88;;;3832:18;;:::i;:::-;3764:88;3872:10;3868:2;3861:22;3651:238;3608:281;;:::o;3895:129::-;3929:6;3956:20;;:::i;:::-;3946:30;;3985:33;4013:4;4005:6;3985:33;:::i;:::-;3895:129;;;:::o;4030:307::-;4091:4;4181:18;4173:6;4170:30;4167:56;;;4203:18;;:::i;:::-;4167:56;4241:29;4263:6;4241:29;:::i;:::-;4233:37;;4325:4;4319;4315:15;4307:23;;4030:307;;;:::o;4343:154::-;4427:6;4422:3;4417;4404:30;4489:1;4480:6;4475:3;4471:16;4464:27;4343:154;;;:::o;4503:410::-;4580:5;4605:65;4621:48;4662:6;4621:48;:::i;:::-;4605:65;:::i;:::-;4596:74;;4693:6;4686:5;4679:21;4731:4;4724:5;4720:16;4769:3;4760:6;4755:3;4751:16;4748:25;4745:112;;;4776:79;;:::i;:::-;4745:112;4866:41;4900:6;4895:3;4890;4866:41;:::i;:::-;4586:327;4503:410;;;;;:::o;4932:338::-;4987:5;5036:3;5029:4;5021:6;5017:17;5013:27;5003:122;;5044:79;;:::i;:::-;5003:122;5161:6;5148:20;5186:78;5260:3;5252:6;5245:4;5237:6;5233:17;5186:78;:::i;:::-;5177:87;;4993:277;4932:338;;;;:::o;5276:943::-;5371:6;5379;5387;5395;5444:3;5432:9;5423:7;5419:23;5415:33;5412:120;;;5451:79;;:::i;:::-;5412:120;5571:1;5596:53;5641:7;5632:6;5621:9;5617:22;5596:53;:::i;:::-;5586:63;;5542:117;5698:2;5724:53;5769:7;5760:6;5749:9;5745:22;5724:53;:::i;:::-;5714:63;;5669:118;5826:2;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5797:118;5982:2;5971:9;5967:18;5954:32;6013:18;6005:6;6002:30;5999:117;;;6035:79;;:::i;:::-;5999:117;6140:62;6194:7;6185:6;6174:9;6170:22;6140:62;:::i;:::-;6130:72;;5925:287;5276:943;;;;;;;:::o;6225:115::-;6310:23;6327:5;6310:23;:::i;:::-;6305:3;6298:36;6225:115;;:::o;6346:218::-;6437:4;6475:2;6464:9;6460:18;6452:26;;6488:69;6554:1;6543:9;6539:17;6530:6;6488:69;:::i;:::-;6346:218;;;;:::o;6570:474::-;6638:6;6646;6695:2;6683:9;6674:7;6670:23;6666:32;6663:119;;;6701:79;;:::i;:::-;6663:119;6821:1;6846:53;6891:7;6882:6;6871:9;6867:22;6846:53;:::i;:::-;6836:63;;6792:117;6948:2;6974:53;7019:7;7010:6;6999:9;6995:22;6974:53;:::i;:::-;6964:63;;6919:118;6570:474;;;;;:::o;7050:118::-;7137:24;7155:5;7137:24;:::i;:::-;7132:3;7125:37;7050:118;;:::o;7174:222::-;7267:4;7305:2;7294:9;7290:18;7282:26;;7318:71;7386:1;7375:9;7371:17;7362:6;7318:71;:::i;:::-;7174:222;;;;:::o;7402:329::-;7461:6;7510:2;7498:9;7489:7;7485:23;7481:32;7478:119;;;7516:79;;:::i;:::-;7478:119;7636:1;7661:53;7706:7;7697:6;7686:9;7682:22;7661:53;:::i;:::-;7651:63;;7607:117;7402:329;;;;:::o;7737:474::-;7805:6;7813;7862:2;7850:9;7841:7;7837:23;7833:32;7830:119;;;7868:79;;:::i;:::-;7830:119;7988:1;8013:53;8058:7;8049:6;8038:9;8034:22;8013:53;:::i;:::-;8003:63;;7959:117;8115:2;8141:53;8186:7;8177:6;8166:9;8162:22;8141:53;:::i;:::-;8131:63;;8086:118;7737:474;;;;;:::o;8217:886::-;8478:4;8516:3;8505:9;8501:19;8493:27;;8530:71;8598:1;8587:9;8583:17;8574:6;8530:71;:::i;:::-;8611:72;8679:2;8668:9;8664:18;8655:6;8611:72;:::i;:::-;8693;8761:2;8750:9;8746:18;8737:6;8693:72;:::i;:::-;8775;8843:2;8832:9;8828:18;8819:6;8775:72;:::i;:::-;8857:73;8925:3;8914:9;8910:19;8901:6;8857:73;:::i;:::-;8940;9008:3;8997:9;8993:19;8984:6;8940:73;:::i;:::-;9023;9091:3;9080:9;9076:19;9067:6;9023:73;:::i;:::-;8217:886;;;;;;;;;;:::o;9109:911::-;9204:6;9212;9220;9228;9236;9285:3;9273:9;9264:7;9260:23;9256:33;9253:120;;;9292:79;;:::i;:::-;9253:120;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9667:2;9693:53;9738:7;9729:6;9718:9;9714:22;9693:53;:::i;:::-;9683:63;;9638:118;9795:2;9821:53;9866:7;9857:6;9846:9;9842:22;9821:53;:::i;:::-;9811:63;;9766:118;9923:3;9950:53;9995:7;9986:6;9975:9;9971:22;9950:53;:::i;:::-;9940:63;;9894:119;9109:911;;;;;;;;:::o;10026:311::-;10103:4;10193:18;10185:6;10182:30;10179:56;;;10215:18;;:::i;:::-;10179:56;10265:4;10257:6;10253:17;10245:25;;10325:4;10319;10315:15;10307:23;;10026:311;;;:::o;10343:117::-;10452:1;10449;10442:12;10483:710;10579:5;10604:81;10620:64;10677:6;10620:64;:::i;:::-;10604:81;:::i;:::-;10595:90;;10705:5;10734:6;10727:5;10720:21;10768:4;10761:5;10757:16;10750:23;;10821:4;10813:6;10809:17;10801:6;10797:30;10850:3;10842:6;10839:15;10836:122;;;10869:79;;:::i;:::-;10836:122;10984:6;10967:220;11001:6;10996:3;10993:15;10967:220;;;11076:3;11105:37;11138:3;11126:10;11105:37;:::i;:::-;11100:3;11093:50;11172:4;11167:3;11163:14;11156:21;;11043:144;11027:4;11022:3;11018:14;11011:21;;10967:220;;;10971:21;10585:608;;10483:710;;;;;:::o;11216:370::-;11287:5;11336:3;11329:4;11321:6;11317:17;11313:27;11303:122;;11344:79;;:::i;:::-;11303:122;11461:6;11448:20;11486:94;11576:3;11568:6;11561:4;11553:6;11549:17;11486:94;:::i;:::-;11477:103;;11293:293;11216:370;;;;:::o;11592:1509::-;11746:6;11754;11762;11770;11778;11827:3;11815:9;11806:7;11802:23;11798:33;11795:120;;;11834:79;;:::i;:::-;11795:120;11954:1;11979:53;12024:7;12015:6;12004:9;12000:22;11979:53;:::i;:::-;11969:63;;11925:117;12081:2;12107:53;12152:7;12143:6;12132:9;12128:22;12107:53;:::i;:::-;12097:63;;12052:118;12237:2;12226:9;12222:18;12209:32;12268:18;12260:6;12257:30;12254:117;;;12290:79;;:::i;:::-;12254:117;12395:78;12465:7;12456:6;12445:9;12441:22;12395:78;:::i;:::-;12385:88;;12180:303;12550:2;12539:9;12535:18;12522:32;12581:18;12573:6;12570:30;12567:117;;;12603:79;;:::i;:::-;12567:117;12708:78;12778:7;12769:6;12758:9;12754:22;12708:78;:::i;:::-;12698:88;;12493:303;12863:3;12852:9;12848:19;12835:33;12895:18;12887:6;12884:30;12881:117;;;12917:79;;:::i;:::-;12881:117;13022:62;13076:7;13067:6;13056:9;13052:22;13022:62;:::i;:::-;13012:72;;12806:288;11592:1509;;;;;;;;:::o;13107:1089::-;13211:6;13219;13227;13235;13243;13292:3;13280:9;13271:7;13267:23;13263:33;13260:120;;;13299:79;;:::i;:::-;13260:120;13419:1;13444:53;13489:7;13480:6;13469:9;13465:22;13444:53;:::i;:::-;13434:63;;13390:117;13546:2;13572:53;13617:7;13608:6;13597:9;13593:22;13572:53;:::i;:::-;13562:63;;13517:118;13674:2;13700:53;13745:7;13736:6;13725:9;13721:22;13700:53;:::i;:::-;13690:63;;13645:118;13802:2;13828:53;13873:7;13864:6;13853:9;13849:22;13828:53;:::i;:::-;13818:63;;13773:118;13958:3;13947:9;13943:19;13930:33;13990:18;13982:6;13979:30;13976:117;;;14012:79;;:::i;:::-;13976:117;14117:62;14171:7;14162:6;14151:9;14147:22;14117:62;:::i;:::-;14107:72;;13901:288;13107:1089;;;;;;;;:::o;14202:169::-;14286:11;14320:6;14315:3;14308:19;14360:4;14355:3;14351:14;14336:29;;14202:169;;;;:::o;14377:182::-;14517:34;14513:1;14505:6;14501:14;14494:58;14377:182;:::o;14565:366::-;14707:3;14728:67;14792:2;14787:3;14728:67;:::i;:::-;14721:74;;14804:93;14893:3;14804:93;:::i;:::-;14922:2;14917:3;14913:12;14906:19;;14565:366;;;:::o;14937:419::-;15103:4;15141:2;15130:9;15126:18;15118:26;;15190:9;15184:4;15180:20;15176:1;15165:9;15161:17;15154:47;15218:131;15344:4;15218:131;:::i;:::-;15210:139;;14937:419;;;:::o;15362:180::-;15410:77;15407:1;15400:88;15507:4;15504:1;15497:15;15531:4;15528:1;15521:15;15548:348;15588:7;15611:20;15629:1;15611:20;:::i;:::-;15606:25;;15645:20;15663:1;15645:20;:::i;:::-;15640:25;;15833:1;15765:66;15761:74;15758:1;15755:81;15750:1;15743:9;15736:17;15732:105;15729:131;;;15840:18;;:::i;:::-;15729:131;15888:1;15885;15881:9;15870:20;;15548:348;;;;:::o;15902:180::-;15950:77;15947:1;15940:88;16047:4;16044:1;16037:15;16071:4;16068:1;16061:15;16088:185;16128:1;16145:20;16163:1;16145:20;:::i;:::-;16140:25;;16179:20;16197:1;16179:20;:::i;:::-;16174:25;;16218:1;16208:35;;16223:18;;:::i;:::-;16208:35;16265:1;16262;16258:9;16253:14;;16088:185;;;;:::o;16279:234::-;16419:34;16415:1;16407:6;16403:14;16396:58;16488:17;16483:2;16475:6;16471:15;16464:42;16279:234;:::o;16519:366::-;16661:3;16682:67;16746:2;16741:3;16682:67;:::i;:::-;16675:74;;16758:93;16847:3;16758:93;:::i;:::-;16876:2;16871:3;16867:12;16860:19;;16519:366;;;:::o;16891:419::-;17057:4;17095:2;17084:9;17080:18;17072:26;;17144:9;17138:4;17134:20;17130:1;17119:9;17115:17;17108:47;17172:131;17298:4;17172:131;:::i;:::-;17164:139;;16891:419;;;:::o;17316:240::-;17456:34;17452:1;17444:6;17440:14;17433:58;17525:23;17520:2;17512:6;17508:15;17501:48;17316:240;:::o;17562:366::-;17704:3;17725:67;17789:2;17784:3;17725:67;:::i;:::-;17718:74;;17801:93;17890:3;17801:93;:::i;:::-;17919:2;17914:3;17910:12;17903:19;;17562:366;;;:::o;17934:419::-;18100:4;18138:2;18127:9;18123:18;18115:26;;18187:9;18181:4;18177:20;18173:1;18162:9;18158:17;18151:47;18215:131;18341:4;18215:131;:::i;:::-;18207:139;;17934:419;;;:::o;18359:181::-;18499:33;18495:1;18487:6;18483:14;18476:57;18359:181;:::o;18546:366::-;18688:3;18709:67;18773:2;18768:3;18709:67;:::i;:::-;18702:74;;18785:93;18874:3;18785:93;:::i;:::-;18903:2;18898:3;18894:12;18887:19;;18546:366;;;:::o;18918:419::-;19084:4;19122:2;19111:9;19107:18;19099:26;;19171:9;19165:4;19161:20;19157:1;19146:9;19142:17;19135:47;19199:131;19325:4;19199:131;:::i;:::-;19191:139;;18918:419;;;:::o;19343:224::-;19483:34;19479:1;19471:6;19467:14;19460:58;19552:7;19547:2;19539:6;19535:15;19528:32;19343:224;:::o;19573:366::-;19715:3;19736:67;19800:2;19795:3;19736:67;:::i;:::-;19729:74;;19812:93;19901:3;19812:93;:::i;:::-;19930:2;19925:3;19921:12;19914:19;;19573:366;;;:::o;19945:419::-;20111:4;20149:2;20138:9;20134:18;20126:26;;20198:9;20192:4;20188:20;20184:1;20173:9;20169:17;20162:47;20226:131;20352:4;20226:131;:::i;:::-;20218:139;;19945:419;;;:::o;20370:442::-;20519:4;20557:2;20546:9;20542:18;20534:26;;20570:71;20638:1;20627:9;20623:17;20614:6;20570:71;:::i;:::-;20651:72;20719:2;20708:9;20704:18;20695:6;20651:72;:::i;:::-;20733;20801:2;20790:9;20786:18;20777:6;20733:72;:::i;:::-;20370:442;;;;;;:::o;20818:168::-;20901:11;20935:6;20930:3;20923:19;20975:4;20970:3;20966:14;20951:29;;20818:168;;;;:::o;20992:114::-;;:::o;21112:362::-;21253:3;21274:65;21337:1;21332:3;21274:65;:::i;:::-;21267:72;;21348:93;21437:3;21348:93;:::i;:::-;21466:1;21461:3;21457:11;21450:18;;21112:362;;;:::o;21480:859::-;21757:4;21795:3;21784:9;21780:19;21772:27;;21809:71;21877:1;21866:9;21862:17;21853:6;21809:71;:::i;:::-;21890:72;21958:2;21947:9;21943:18;21934:6;21890:72;:::i;:::-;21972;22040:2;22029:9;22025:18;22016:6;21972:72;:::i;:::-;22054;22122:2;22111:9;22107:18;22098:6;22054:72;:::i;:::-;22174:9;22168:4;22164:20;22158:3;22147:9;22143:19;22136:49;22202:130;22327:4;22202:130;:::i;:::-;22194:138;;21480:859;;;;;;;:::o;22345:234::-;22485:34;22481:1;22473:6;22469:14;22462:58;22554:17;22549:2;22541:6;22537:15;22530:42;22345:234;:::o;22585:366::-;22727:3;22748:67;22812:2;22807:3;22748:67;:::i;:::-;22741:74;;22824:93;22913:3;22824:93;:::i;:::-;22942:2;22937:3;22933:12;22926:19;;22585:366;;;:::o;22957:419::-;23123:4;23161:2;23150:9;23146:18;23138:26;;23210:9;23204:4;23200:20;23196:1;23185:9;23181:17;23174:47;23238:131;23364:4;23238:131;:::i;:::-;23230:139;;22957:419;;;:::o;23382:179::-;23522:31;23518:1;23510:6;23506:14;23499:55;23382:179;:::o;23567:366::-;23709:3;23730:67;23794:2;23789:3;23730:67;:::i;:::-;23723:74;;23806:93;23895:3;23806:93;:::i;:::-;23924:2;23919:3;23915:12;23908:19;;23567:366;;;:::o;23939:419::-;24105:4;24143:2;24132:9;24128:18;24120:26;;24192:9;24186:4;24182:20;24178:1;24167:9;24163:17;24156:47;24220:131;24346:4;24220:131;:::i;:::-;24212:139;;23939:419;;;:::o;24364:180::-;24504:32;24500:1;24492:6;24488:14;24481:56;24364:180;:::o;24550:366::-;24692:3;24713:67;24777:2;24772:3;24713:67;:::i;:::-;24706:74;;24789:93;24878:3;24789:93;:::i;:::-;24907:2;24902:3;24898:12;24891:19;;24550:366;;;:::o;24922:419::-;25088:4;25126:2;25115:9;25111:18;25103:26;;25175:9;25169:4;25165:20;25161:1;25150:9;25146:17;25139:47;25203:131;25329:4;25203:131;:::i;:::-;25195:139;;24922:419;;;:::o;25347:226::-;25487:34;25483:1;25475:6;25471:14;25464:58;25556:9;25551:2;25543:6;25539:15;25532:34;25347:226;:::o;25579:366::-;25721:3;25742:67;25806:2;25801:3;25742:67;:::i;:::-;25735:74;;25818:93;25907:3;25818:93;:::i;:::-;25936:2;25931:3;25927:12;25920:19;;25579:366;;;:::o;25951:419::-;26117:4;26155:2;26144:9;26140:18;26132:26;;26204:9;26198:4;26194:20;26190:1;26179:9;26175:17;26168:47;26232:131;26358:4;26232:131;:::i;:::-;26224:139;;25951:419;;;:::o;26376:227::-;26516:34;26512:1;26504:6;26500:14;26493:58;26585:10;26580:2;26572:6;26568:15;26561:35;26376:227;:::o;26609:366::-;26751:3;26772:67;26836:2;26831:3;26772:67;:::i;:::-;26765:74;;26848:93;26937:3;26848:93;:::i;:::-;26966:2;26961:3;26957:12;26950:19;;26609:366;;;:::o;26981:419::-;27147:4;27185:2;27174:9;27170:18;27162:26;;27234:9;27228:4;27224:20;27220:1;27209:9;27205:17;27198:47;27262:131;27388:4;27262:131;:::i;:::-;27254:139;;26981:419;;;:::o;27406:332::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27578:71;27646:1;27635:9;27631:17;27622:6;27578:71;:::i;:::-;27659:72;27727:2;27716:9;27712:18;27703:6;27659:72;:::i;:::-;27406:332;;;;;:::o;27744:234::-;27884:34;27880:1;27872:6;27868:14;27861:58;27953:17;27948:2;27940:6;27936:15;27929:42;27744:234;:::o;27984:366::-;28126:3;28147:67;28211:2;28206:3;28147:67;:::i;:::-;28140:74;;28223:93;28312:3;28223:93;:::i;:::-;28341:2;28336:3;28332:12;28325:19;;27984:366;;;:::o;28356:419::-;28522:4;28560:2;28549:9;28545:18;28537:26;;28609:9;28603:4;28599:20;28595:1;28584:9;28580:17;28573:47;28637:131;28763:4;28637:131;:::i;:::-;28629:139;;28356:419;;;:::o;28781:182::-;28921:34;28917:1;28909:6;28905:14;28898:58;28781:182;:::o;28969:366::-;29111:3;29132:67;29196:2;29191:3;29132:67;:::i;:::-;29125:74;;29208:93;29297:3;29208:93;:::i;:::-;29326:2;29321:3;29317:12;29310:19;;28969:366;;;:::o;29341:419::-;29507:4;29545:2;29534:9;29530:18;29522:26;;29594:9;29588:4;29584:20;29580:1;29569:9;29565:17;29558:47;29622:131;29748:4;29622:131;:::i;:::-;29614:139;;29341:419;;;:::o;29766:176::-;29906:28;29902:1;29894:6;29890:14;29883:52;29766:176;:::o;29948:366::-;30090:3;30111:67;30175:2;30170:3;30111:67;:::i;:::-;30104:74;;30187:93;30276:3;30187:93;:::i;:::-;30305:2;30300:3;30296:12;30289:19;;29948:366;;;:::o;30320:419::-;30486:4;30524:2;30513:9;30509:18;30501:26;;30573:9;30567:4;30563:20;30559:1;30548:9;30544:17;30537:47;30601:131;30727:4;30601:131;:::i;:::-;30593:139;;30320:419;;;:::o;30745:179::-;30885:31;30881:1;30873:6;30869:14;30862:55;30745:179;:::o;30930:366::-;31072:3;31093:67;31157:2;31152:3;31093:67;:::i;:::-;31086:74;;31169:93;31258:3;31169:93;:::i;:::-;31287:2;31282:3;31278:12;31271:19;;30930:366;;;:::o;31302:419::-;31468:4;31506:2;31495:9;31491:18;31483:26;;31555:9;31549:4;31545:20;31541:1;31530:9;31526:17;31519:47;31583:131;31709:4;31583:131;:::i;:::-;31575:139;;31302:419;;;:::o;31727:305::-;31767:3;31786:20;31804:1;31786:20;:::i;:::-;31781:25;;31820:20;31838:1;31820:20;:::i;:::-;31815:25;;31974:1;31906:66;31902:74;31899:1;31896:81;31893:107;;;31980:18;;:::i;:::-;31893:107;32024:1;32021;32017:9;32010:16;;31727:305;;;;:::o;32038:222::-;32178:34;32174:1;32166:6;32162:14;32155:58;32247:5;32242:2;32234:6;32230:15;32223:30;32038:222;:::o;32266:366::-;32408:3;32429:67;32493:2;32488:3;32429:67;:::i;:::-;32422:74;;32505:93;32594:3;32505:93;:::i;:::-;32623:2;32618:3;32614:12;32607:19;;32266:366;;;:::o;32638:419::-;32804:4;32842:2;32831:9;32827:18;32819:26;;32891:9;32885:4;32881:20;32877:1;32866:9;32862:17;32855:47;32919:131;33045:4;32919:131;:::i;:::-;32911:139;;32638:419;;;:::o;33063:553::-;33240:4;33278:3;33267:9;33263:19;33255:27;;33292:71;33360:1;33349:9;33345:17;33336:6;33292:71;:::i;:::-;33373:72;33441:2;33430:9;33426:18;33417:6;33373:72;:::i;:::-;33455;33523:2;33512:9;33508:18;33499:6;33455:72;:::i;:::-;33537;33605:2;33594:9;33590:18;33581:6;33537:72;:::i;:::-;33063:553;;;;;;;:::o;33622:238::-;33762:34;33758:1;33750:6;33746:14;33739:58;33831:21;33826:2;33818:6;33814:15;33807:46;33622:238;:::o;33866:366::-;34008:3;34029:67;34093:2;34088:3;34029:67;:::i;:::-;34022:74;;34105:93;34194:3;34105:93;:::i;:::-;34223:2;34218:3;34214:12;34207:19;;33866:366;;;:::o;34238:419::-;34404:4;34442:2;34431:9;34427:18;34419:26;;34491:9;34485:4;34481:20;34477:1;34466:9;34462:17;34455:47;34519:131;34645:4;34519:131;:::i;:::-;34511:139;;34238:419;;;:::o;34663:182::-;34803:34;34799:1;34791:6;34787:14;34780:58;34663:182;:::o;34851:366::-;34993:3;35014:67;35078:2;35073:3;35014:67;:::i;:::-;35007:74;;35090:93;35179:3;35090:93;:::i;:::-;35208:2;35203:3;35199:12;35192:19;;34851:366;;;:::o;35223:419::-;35389:4;35427:2;35416:9;35412:18;35404:26;;35476:9;35470:4;35466:20;35462:1;35451:9;35447:17;35440:47;35504:131;35630:4;35504:131;:::i;:::-;35496:139;;35223:419;;;:::o;35648:234::-;35788:34;35784:1;35776:6;35772:14;35765:58;35857:17;35852:2;35844:6;35840:15;35833:42;35648:234;:::o;35888:366::-;36030:3;36051:67;36115:2;36110:3;36051:67;:::i;:::-;36044:74;;36127:93;36216:3;36127:93;:::i;:::-;36245:2;36240:3;36236:12;36229:19;;35888:366;;;:::o;36260:419::-;36426:4;36464:2;36453:9;36449:18;36441:26;;36513:9;36507:4;36503:20;36499:1;36488:9;36484:17;36477:47;36541:131;36667:4;36541:131;:::i;:::-;36533:139;;36260:419;;;:::o;36685:191::-;36725:4;36745:20;36763:1;36745:20;:::i;:::-;36740:25;;36779:20;36797:1;36779:20;:::i;:::-;36774:25;;36818:1;36815;36812:8;36809:34;;;36823:18;;:::i;:::-;36809:34;36868:1;36865;36861:9;36853:17;;36685:191;;;;:::o;36882:143::-;36939:5;36970:6;36964:13;36955:22;;36986:33;37013:5;36986:33;:::i;:::-;36882:143;;;;:::o;37031:351::-;37101:6;37150:2;37138:9;37129:7;37125:23;37121:32;37118:119;;;37156:79;;:::i;:::-;37118:119;37276:1;37301:64;37357:7;37348:6;37337:9;37333:22;37301:64;:::i;:::-;37291:74;;37247:128;37031:351;;;;:::o;37388:248::-;37528:34;37524:1;37516:6;37512:14;37505:58;37597:31;37592:2;37584:6;37580:15;37573:56;37388:248;:::o;37642:366::-;37784:3;37805:67;37869:2;37864:3;37805:67;:::i;:::-;37798:74;;37881:93;37970:3;37881:93;:::i;:::-;37999:2;37994:3;37990:12;37983:19;;37642:366;;;:::o;38014:419::-;38180:4;38218:2;38207:9;38203:18;38195:26;;38267:9;38261:4;38257:20;38253:1;38242:9;38238:17;38231:47;38295:131;38421:4;38295:131;:::i;:::-;38287:139;;38014:419;;;:::o;38439:332::-;38560:4;38598:2;38587:9;38583:18;38575:26;;38611:71;38679:1;38668:9;38664:17;38655:6;38611:71;:::i;:::-;38692:72;38760:2;38749:9;38745:18;38736:6;38692:72;:::i;:::-;38439:332;;;;;:::o;38777:294::-;38917:34;38913:1;38905:6;38901:14;38894:58;38986:34;38981:2;38973:6;38969:15;38962:59;39055:8;39050:2;39042:6;39038:15;39031:33;38777:294;:::o;39077:366::-;39219:3;39240:67;39304:2;39299:3;39240:67;:::i;:::-;39233:74;;39316:93;39405:3;39316:93;:::i;:::-;39434:2;39429:3;39425:12;39418:19;;39077:366;;;:::o;39449:419::-;39615:4;39653:2;39642:9;39638:18;39630:26;;39702:9;39696:4;39692:20;39688:1;39677:9;39673:17;39666:47;39730:131;39856:4;39730:131;:::i;:::-;39722:139;;39449:419;;;:::o;39874:886::-;40135:4;40173:3;40162:9;40158:19;40150:27;;40187:71;40255:1;40244:9;40240:17;40231:6;40187:71;:::i;:::-;40268:72;40336:2;40325:9;40321:18;40312:6;40268:72;:::i;:::-;40350;40418:2;40407:9;40403:18;40394:6;40350:72;:::i;:::-;40432;40500:2;40489:9;40485:18;40476:6;40432:72;:::i;:::-;40514:73;40582:3;40571:9;40567:19;40558:6;40514:73;:::i;:::-;40597;40665:3;40654:9;40650:19;40641:6;40597:73;:::i;:::-;40680;40748:3;40737:9;40733:19;40724:6;40680:73;:::i;:::-;39874:886;;;;;;;;;;:::o;40766:225::-;40906:34;40902:1;40894:6;40890:14;40883:58;40975:8;40970:2;40962:6;40958:15;40951:33;40766:225;:::o;40997:366::-;41139:3;41160:67;41224:2;41219:3;41160:67;:::i;:::-;41153:74;;41236:93;41325:3;41236:93;:::i;:::-;41354:2;41349:3;41345:12;41338:19;;40997:366;;;:::o;41369:419::-;41535:4;41573:2;41562:9;41558:18;41550:26;;41622:9;41616:4;41612:20;41608:1;41597:9;41593:17;41586:47;41650:131;41776:4;41650:131;:::i;:::-;41642:139;;41369:419;;;:::o;41794:116::-;41864:21;41879:5;41864:21;:::i;:::-;41857:5;41854:32;41844:60;;41900:1;41897;41890:12;41844:60;41794:116;:::o;41916:137::-;41970:5;42001:6;41995:13;41986:22;;42017:30;42041:5;42017:30;:::i;:::-;41916:137;;;;:::o;42059:345::-;42126:6;42175:2;42163:9;42154:7;42150:23;42146:32;42143:119;;;42181:79;;:::i;:::-;42143:119;42301:1;42326:61;42379:7;42370:6;42359:9;42355:22;42326:61;:::i;:::-;42316:71;;42272:125;42059:345;;;;:::o;42410:229::-;42550:34;42546:1;42538:6;42534:14;42527:58;42619:12;42614:2;42606:6;42602:15;42595:37;42410:229;:::o;42645:366::-;42787:3;42808:67;42872:2;42867:3;42808:67;:::i;:::-;42801:74;;42884:93;42973:3;42884:93;:::i;:::-;43002:2;42997:3;42993:12;42986:19;;42645:366;;;:::o;43017:419::-;43183:4;43221:2;43210:9;43206:18;43198:26;;43270:9;43264:4;43260:20;43256:1;43245:9;43241:17;43234:47;43298:131;43424:4;43298:131;:::i;:::-;43290:139;;43017:419;;;:::o;43442:225::-;43582:34;43578:1;43570:6;43566:14;43559:58;43651:8;43646:2;43638:6;43634:15;43627:33;43442:225;:::o;43673:366::-;43815:3;43836:67;43900:2;43895:3;43836:67;:::i;:::-;43829:74;;43912:93;44001:3;43912:93;:::i;:::-;44030:2;44025:3;44021:12;44014:19;;43673:366;;;:::o;44045:419::-;44211:4;44249:2;44238:9;44234:18;44226:26;;44298:9;44292:4;44288:20;44284:1;44273:9;44269:17;44262:47;44326:131;44452:4;44326:131;:::i;:::-;44318:139;;44045:419;;;:::o;44470:179::-;44610:31;44606:1;44598:6;44594:14;44587:55;44470:179;:::o;44655:366::-;44797:3;44818:67;44882:2;44877:3;44818:67;:::i;:::-;44811:74;;44894:93;44983:3;44894:93;:::i;:::-;45012:2;45007:3;45003:12;44996:19;;44655:366;;;:::o;45027:419::-;45193:4;45231:2;45220:9;45216:18;45208:26;;45280:9;45274:4;45270:20;45266:1;45255:9;45251:17;45244:47;45308:131;45434:4;45308:131;:::i;:::-;45300:139;;45027:419;;;:::o;45452:98::-;45503:6;45537:5;45531:12;45521:22;;45452:98;;;:::o;45556:147::-;45657:11;45694:3;45679:18;;45556:147;;;;:::o;45709:307::-;45777:1;45787:113;45801:6;45798:1;45795:13;45787:113;;;45886:1;45881:3;45877:11;45871:18;45867:1;45862:3;45858:11;45851:39;45823:2;45820:1;45816:10;45811:15;;45787:113;;;45918:6;45915:1;45912:13;45909:101;;;45998:1;45989:6;45984:3;45980:16;45973:27;45909:101;45758:258;45709:307;;;:::o;46022:373::-;46126:3;46154:38;46186:5;46154:38;:::i;:::-;46208:88;46289:6;46284:3;46208:88;:::i;:::-;46201:95;;46305:52;46350:6;46345:3;46338:4;46331:5;46327:16;46305:52;:::i;:::-;46382:6;46377:3;46373:16;46366:23;;46130:265;46022:373;;;;:::o;46401:271::-;46531:3;46553:93;46642:3;46633:6;46553:93;:::i;:::-;46546:100;;46663:3;46656:10;;46401:271;;;;:::o;46678:99::-;46730:6;46764:5;46758:12;46748:22;;46678:99;;;:::o;46783:364::-;46871:3;46899:39;46932:5;46899:39;:::i;:::-;46954:71;47018:6;47013:3;46954:71;:::i;:::-;46947:78;;47034:52;47079:6;47074:3;47067:4;47060:5;47056:16;47034:52;:::i;:::-;47111:29;47133:6;47111:29;:::i;:::-;47106:3;47102:39;47095:46;;46875:272;46783:364;;;;:::o;47153:313::-;47266:4;47304:2;47293:9;47289:18;47281:26;;47353:9;47347:4;47343:20;47339:1;47328:9;47324:17;47317:47;47381:78;47454:4;47445:6;47381:78;:::i;:::-;47373:86;;47153:313;;;;:::o", + "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.8.10;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\n\ncontract BENftMarket is Ownable, ReentrancyGuard, ERC1155Holder, ERC721Holder {\n using SafeERC20 for IERC20;\n\n struct OrderInfo {\n uint256 orderId;\n uint256 tokenId;\n uint256 amount;\n address owner;\n uint256 price;\n address nftToken;\n address currency;\n }\n mapping(address => bool) public erc721Supported;\n mapping(address => bool) public erc1155Supported;\n mapping(address => bool) public erc20Supported;\n mapping(uint256 => OrderInfo) public orderInfos;\n mapping(address => uint256) public nftPriceMaxLimit;\n mapping(address => uint256) public nftPriceMinLimit;\n\n event SellOrder(\n uint256 indexed tokenId,\n address indexed owner,\n address indexed nftToken,\n uint256 amount,\n uint256 orderId,\n address currency,\n uint256 price\n );\n\n event CancelOrder(\n uint256 indexed orderId,\n address indexed nftToken,\n uint256 indexed tokenId\n );\n\n event PriceUpdate(\n uint256 indexed orderId,\n address indexed nftToken,\n uint256 indexed tokenId,\n uint256 priceOld,\n uint256 price\n );\n\n event BuyOrder(\n uint256 indexed tokenId,\n uint256 orderId,\n address nftToken,\n uint256 amount,\n address seller,\n address buyer,\n address erc20,\n uint256 price\n );\n\n event AddNFTSuppout(address nftToken);\n event RemoveNFTSuppout(address nftToken);\n event AddERC20Suppout(address erc20);\n event RemoveERC20Suppout(address erc20);\n\n uint256 public tranFeeTotal;\n uint256 public tranTaxTotal;\n\n uint256 constant ROUND = 1000000;\n uint256 public transactionFee = (3 * ROUND) / 100;\n // min transaction fee is: 0\n uint256 public constant MIN_TRANSACTION_FEE = 0;\n // max transaction fee is: 10%\n uint256 public constant MAX_TRANSACTION_FEE = (10 * ROUND) / 100;\n\n uint256 public transactionTax = (1 * ROUND) / 100;\n // min transaction tax is: 0\n uint256 public constant MIN_TRANSACTION_TAX = 0;\n // max transaction tax is: 10%\n uint256 public constant MAX_TRANSACTION_TAX = (10 * ROUND) / 100;\n\n address public feeToAddress;\n\n address public taxToAddress;\n\n uint256 public incrId;\n\n function sell(\n address nftToken,\n address currency,\n uint256 tokenId,\n uint256 price,\n uint256 amount\n ) external {\n require(tokenId != 0, \"NFTMarket: tokenId can not be 0!\");\n require(\n erc721Supported[nftToken] || erc1155Supported[nftToken],\n \"NFTMarket: Unsupported NFT\"\n );\n require(erc20Supported[currency], \"NFTMarket: Unsupported tokens\");\n require(\n price <= nftPriceMaxLimit[nftToken] || nftPriceMaxLimit[nftToken] == 0,\n \"NFTMarket: Maximum price limit exceeded\"\n );\n require(\n price >= nftPriceMinLimit[nftToken] && price != 0,\n \"NFTMarket: Below the minimum price limit\"\n );\n incrId += 1;\n OrderInfo storage orderInfo = orderInfos[incrId];\n orderInfo.orderId = incrId;\n orderInfo.tokenId = tokenId;\n orderInfo.amount = amount;\n orderInfo.nftToken = nftToken;\n orderInfo.owner = _msgSender();\n orderInfo.price = price;\n orderInfo.currency = currency;\n if (erc721Supported[nftToken]) {\n require(amount == 1, \"NFTMarket: ERC721 amount must be 1 \");\n IERC721(nftToken).safeTransferFrom(_msgSender(), address(this), tokenId);\n } else if (erc1155Supported[nftToken]) {\n IERC1155(nftToken).safeTransferFrom(\n _msgSender(),\n address(this),\n tokenId,\n amount,\n \"\"\n );\n }\n\n emit SellOrder(\n tokenId,\n _msgSender(),\n nftToken,\n amount,\n incrId,\n currency,\n price\n );\n }\n\n function buy(uint256 orderId) external nonReentrant {\n OrderInfo memory orderInfo = orderInfos[orderId];\n require(orderInfo.tokenId != 0, \"NFTMarket: NFT does not exist\");\n uint256 _transactionFee = (orderInfo.price * transactionFee) / ROUND;\n tranFeeTotal = tranFeeTotal + _transactionFee;\n uint256 _transactionTax = (orderInfo.price * transactionTax) / ROUND;\n tranTaxTotal = tranTaxTotal + _transactionTax;\n uint256 _amount = orderInfo.price - _transactionFee - _transactionTax;\n IERC20 paymentContract = IERC20(orderInfo.currency);\n require(\n paymentContract.balanceOf(_msgSender()) >= orderInfo.price,\n \"BENFTMarket: buyer doesn't have enough token to buy this item\"\n );\n require(\n paymentContract.allowance(_msgSender(), address(this)) >= orderInfo.price,\n \"BENFTMarket: buyer doesn't approve marketplace to spend payment amount\"\n );\n paymentContract.safeTransferFrom(_msgSender(), orderInfo.owner, _amount);\n if (_transactionFee > 0) {\n paymentContract.safeTransferFrom(\n _msgSender(),\n feeToAddress,\n _transactionFee\n );\n }\n if (_transactionTax > 0) {\n paymentContract.safeTransferFrom(\n _msgSender(),\n taxToAddress,\n _transactionTax\n );\n }\n\n if (erc721Supported[orderInfo.nftToken]) {\n IERC721(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId\n );\n } else if (erc1155Supported[orderInfo.nftToken]) {\n IERC1155(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId,\n orderInfo.amount,\n \"\"\n );\n }\n\n emit BuyOrder(\n orderInfo.tokenId,\n orderId,\n orderInfo.nftToken,\n orderInfo.amount,\n orderInfo.owner,\n _msgSender(),\n orderInfo.currency,\n orderInfo.price\n );\n delete orderInfos[orderId];\n }\n\n function cancelOrder(uint256 orderId) external nonReentrant {\n require(\n orderInfos[orderId].owner == _msgSender(),\n \"NFTMarket: cancel caller is not owner\"\n );\n OrderInfo memory orderInfo = orderInfos[orderId];\n if (erc721Supported[orderInfo.nftToken]) {\n IERC721(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId\n );\n } else if (erc1155Supported[orderInfo.nftToken]) {\n IERC1155(orderInfo.nftToken).safeTransferFrom(\n address(this),\n _msgSender(),\n orderInfo.tokenId,\n orderInfo.amount,\n \"\"\n );\n }\n delete orderInfos[orderId];\n\n emit CancelOrder(orderId, orderInfo.nftToken, orderInfo.tokenId);\n }\n\n function updatePrice(uint256 orderId, uint256 price) external {\n OrderInfo storage orderInfo = orderInfos[orderId];\n require(orderInfo.tokenId != 0, \"NFTMarket: NFT does not exist\");\n require(orderInfo.owner == _msgSender(), \"NFTMarket: caller is not owner\");\n require(\n price <= nftPriceMaxLimit[orderInfo.nftToken] ||\n nftPriceMaxLimit[orderInfo.nftToken] == 0,\n \"NFTMarket: Maximum price limit exceeded\"\n );\n require(\n price >= nftPriceMinLimit[orderInfo.nftToken] && price != 0,\n \"NFTMarket: Below the minimum price limit\"\n );\n uint256 priceOld = orderInfo.price;\n orderInfo.price = price;\n emit PriceUpdate(\n orderId,\n orderInfo.nftToken,\n orderInfo.tokenId,\n priceOld,\n price\n );\n }\n\n /**\n * @dev Add ERC20 support\n */\n function addERC721Support(address nftToken) external onlyOwner {\n erc721Supported[nftToken] = true;\n emit AddNFTSuppout(nftToken);\n }\n\n /**\n * @dev Remove 721 NFT support\n */\n function removeERC721Support(address nftToken) external onlyOwner {\n erc721Supported[nftToken] = false;\n emit RemoveNFTSuppout(nftToken);\n }\n\n /**\n * @dev Add 1155 NFT support\n */\n function addERC1155Support(address nftToken) external onlyOwner {\n erc1155Supported[nftToken] = true;\n emit AddNFTSuppout(nftToken);\n }\n\n /**\n * @dev Remove 1155 NFT support\n */\n function removeERC1155Support(address nftToken) external onlyOwner {\n erc1155Supported[nftToken] = false;\n emit RemoveNFTSuppout(nftToken);\n }\n\n /**\n * @dev Add ERC20 support\n */\n function addERC20Support(address erc20) external onlyOwner {\n require(erc20 != address(0), \"NFTMarket: ERC20 address is zero\");\n erc20Supported[erc20] = true;\n emit AddERC20Suppout(erc20);\n }\n\n /**\n * @dev Remove ERC20 support\n */\n function removeERC20Support(address erc20) external onlyOwner {\n erc20Supported[erc20] = false;\n emit RemoveERC20Suppout(erc20);\n }\n\n /**\n * @dev Set the maximum price limit for NFT\n */\n function setNFTPriceMaxLimit(\n address nftToken,\n uint256 maxLimit\n ) external onlyOwner {\n require(\n maxLimit >= nftPriceMinLimit[nftToken],\n \"NFTMarket: maxLimit can not be less than min limit!\"\n );\n nftPriceMaxLimit[nftToken] = maxLimit;\n }\n\n /**\n * @dev Set the minimum price limit for NFT\n */\n function setNFTPriceMinLimit(\n address nftToken,\n uint256 minLimit\n ) external onlyOwner {\n if (nftPriceMaxLimit[nftToken] != 0) {\n require(\n minLimit <= nftPriceMaxLimit[nftToken],\n \"NFTMarket: minLimit can not be larger than max limit!\"\n );\n }\n nftPriceMinLimit[nftToken] = minLimit;\n }\n\n /**\n * @dev Set the transaction fee\n */\n function setTransactionFee(uint256 _transactionFee) external onlyOwner {\n require(\n _transactionFee >= MIN_TRANSACTION_FEE &&\n _transactionFee <= MAX_TRANSACTION_FEE,\n \"NFTMarket: _transactionFee must >= 0 and <= 10%\"\n );\n transactionFee = _transactionFee;\n }\n\n /**\n * @dev Set the fee received address\n */\n function setFeeToAddress(address _feeToAddress) external onlyOwner {\n require(\n _feeToAddress != address(0),\n \"NFTMarket: fee received address can not be zero\"\n );\n feeToAddress = _feeToAddress;\n }\n\n /**\n * @dev Set the transaction tax\n */\n function setTransactionTax(uint256 _transactionTax) external onlyOwner {\n require(\n _transactionTax >= MIN_TRANSACTION_TAX &&\n _transactionTax <= MAX_TRANSACTION_TAX,\n \"NFTMarket: _transactionTax must >= 0 and <= 10%\"\n );\n transactionTax = _transactionTax;\n }\n\n /**\n * @dev Set the tax received address\n */\n function setTaxToAddress(address _taxToAddress) external onlyOwner {\n require(\n _taxToAddress != address(0),\n \"NFTMarket: tax received address can not be zero\"\n );\n taxToAddress = _taxToAddress;\n }\n}\n", "sourcePath": "/Users/zhl/Documents/workspace/crypto/becrypto/contracts/market/BENftMarket.sol", "ast": { "absolutePath": "project:/contracts/market/BENftMarket.sol", @@ -30506,7 +30506,7 @@ "body": { "id": 1941, "nodeType": "Block", - "src": "6874:711:15", + "src": "6874:712:15", "statements": [ { "assignments": [ @@ -30518,14 +30518,14 @@ "id": 1867, "mutability": "mutable", "name": "orderInfo", - "nameLocation": "6897:9:15", + "nameLocation": "6898:9:15", "nodeType": "VariableDeclaration", "scope": 1941, - "src": "6880:26:15", + "src": "6880:27:15", "stateVariable": false, - "storageLocation": "memory", + "storageLocation": "storage", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", "typeString": "struct BENftMarket.OrderInfo" }, "typeName": { @@ -30556,7 +30556,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1262, - "src": "6909:10:15", + "src": "6910:10:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_uint256_$_t_struct$_OrderInfo_$1245_storage_$", "typeString": "mapping(uint256 => struct BENftMarket.OrderInfo storage ref)" @@ -30569,7 +30569,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1860, - "src": "6920:7:15", + "src": "6921:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -30580,14 +30580,14 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "6909:19:15", + "src": "6910:19:15", "typeDescriptions": { "typeIdentifier": "t_struct$_OrderInfo_$1245_storage", "typeString": "struct BENftMarket.OrderInfo storage ref" } }, "nodeType": "VariableDeclarationStatement", - "src": "6880:48:15" + "src": "6880:49:15" }, { "expression": { @@ -30609,10 +30609,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "6942:9:15", + "src": "6943:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1874, @@ -30623,7 +30623,7 @@ "memberName": "tokenId", "nodeType": "MemberAccess", "referencedDeclaration": 1234, - "src": "6942:17:15", + "src": "6943:17:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -30640,14 +30640,14 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "6963:1:15", + "src": "6964:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, - "src": "6942:22:15", + "src": "6943:22:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -30662,7 +30662,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "6966:31:15", + "src": "6967:31:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_91996d5e26724312118a80c49d609267cf3d8859d05119c382cfda0b8758f400", "typeString": "literal_string \"NFTMarket: NFT does not exist\"" @@ -30689,7 +30689,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "6934:7:15", + "src": "6935:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -30703,7 +30703,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "6934:64:15", + "src": "6935:64:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -30712,7 +30712,7 @@ }, "id": 1879, "nodeType": "ExpressionStatement", - "src": "6934:64:15" + "src": "6935:64:15" }, { "expression": { @@ -30734,10 +30734,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7012:9:15", + "src": "7013:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1882, @@ -30748,7 +30748,7 @@ "memberName": "owner", "nodeType": "MemberAccess", "referencedDeclaration": 1238, - "src": "7012:15:15", + "src": "7013:15:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -30765,7 +30765,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1162, - "src": "7031:10:15", + "src": "7032:10:15", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", "typeString": "function () view returns (address)" @@ -30779,14 +30779,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7031:12:15", + "src": "7032:12:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "7012:31:15", + "src": "7013:31:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -30801,7 +30801,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "7045:32:15", + "src": "7046:32:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_19812bba446941be332c58af40b198944559ee4ff950fbaaca44d932fa502a47", "typeString": "literal_string \"NFTMarket: caller is not owner\"" @@ -30828,7 +30828,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "7004:7:15", + "src": "7005:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -30842,7 +30842,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7004:74:15", + "src": "7005:74:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -30851,7 +30851,7 @@ }, "id": 1888, "nodeType": "ExpressionStatement", - "src": "7004:74:15" + "src": "7005:74:15" }, { "expression": { @@ -30882,7 +30882,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1862, - "src": "7099:5:15", + "src": "7100:5:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -30897,7 +30897,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1266, - "src": "7108:16:15", + "src": "7109:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -30911,10 +30911,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7125:9:15", + "src": "7126:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1893, @@ -30925,7 +30925,7 @@ "memberName": "nftToken", "nodeType": "MemberAccess", "referencedDeclaration": 1242, - "src": "7125:18:15", + "src": "7126:18:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -30936,13 +30936,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7108:36:15", + "src": "7109:36:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7099:45:15", + "src": "7100:45:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -30967,7 +30967,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1266, - "src": "7156:16:15", + "src": "7157:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -30981,10 +30981,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7173:9:15", + "src": "7174:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1898, @@ -30995,7 +30995,7 @@ "memberName": "nftToken", "nodeType": "MemberAccess", "referencedDeclaration": 1242, - "src": "7173:18:15", + "src": "7174:18:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31006,7 +31006,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7156:36:15", + "src": "7157:36:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31023,20 +31023,20 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "7196:1:15", + "src": "7197:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, - "src": "7156:41:15", + "src": "7157:41:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7099:98:15", + "src": "7100:98:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31051,7 +31051,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "7205:41:15", + "src": "7206:41:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_4cb6df112f38a5e8930a5993583968b49c106f624e768bc7f965587788a9ba13", "typeString": "literal_string \"NFTMarket: Maximum price limit exceeded\"" @@ -31078,7 +31078,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "7084:7:15", + "src": "7085:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -31092,7 +31092,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7084:168:15", + "src": "7085:168:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -31101,7 +31101,7 @@ }, "id": 1905, "nodeType": "ExpressionStatement", - "src": "7084:168:15" + "src": "7085:168:15" }, { "expression": { @@ -31132,7 +31132,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1862, - "src": "7273:5:15", + "src": "7274:5:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31147,7 +31147,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1270, - "src": "7282:16:15", + "src": "7283:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -31161,10 +31161,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7299:9:15", + "src": "7300:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1910, @@ -31175,7 +31175,7 @@ "memberName": "nftToken", "nodeType": "MemberAccess", "referencedDeclaration": 1242, - "src": "7299:18:15", + "src": "7300:18:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31186,13 +31186,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7282:36:15", + "src": "7283:36:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7273:45:15", + "src": "7274:45:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31216,7 +31216,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1862, - "src": "7322:5:15", + "src": "7323:5:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31233,20 +31233,20 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "7331:1:15", + "src": "7332:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, - "src": "7322:10:15", + "src": "7323:10:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "7273:59:15", + "src": "7274:59:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31261,7 +31261,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "7340:42:15", + "src": "7341:42:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_744b4ba124daa910620675d926ec89aeeb4da774fb91c8cbe522d0cf48a3f6cf", "typeString": "literal_string \"NFTMarket: Below the minimum price limit\"" @@ -31288,7 +31288,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "7258:7:15", + "src": "7259:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -31302,7 +31302,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7258:130:15", + "src": "7259:130:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -31311,7 +31311,7 @@ }, "id": 1919, "nodeType": "ExpressionStatement", - "src": "7258:130:15" + "src": "7259:130:15" }, { "assignments": [ @@ -31323,10 +31323,10 @@ "id": 1921, "mutability": "mutable", "name": "priceOld", - "nameLocation": "7402:8:15", + "nameLocation": "7403:8:15", "nodeType": "VariableDeclaration", "scope": 1941, - "src": "7394:16:15", + "src": "7395:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -31337,7 +31337,7 @@ "id": 1920, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "7394:7:15", + "src": "7395:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31354,10 +31354,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7413:9:15", + "src": "7414:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1923, @@ -31368,14 +31368,14 @@ "memberName": "price", "nodeType": "MemberAccess", "referencedDeclaration": 1240, - "src": "7413:15:15", + "src": "7414:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "7394:34:15" + "src": "7395:34:15" }, { "expression": { @@ -31391,10 +31391,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7434:9:15", + "src": "7435:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1927, @@ -31405,7 +31405,7 @@ "memberName": "price", "nodeType": "MemberAccess", "referencedDeclaration": 1240, - "src": "7434:15:15", + "src": "7435:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31419,13 +31419,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1862, - "src": "7452:5:15", + "src": "7453:5:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7434:23:15", + "src": "7435:23:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31433,7 +31433,7 @@ }, "id": 1930, "nodeType": "ExpressionStatement", - "src": "7434:23:15" + "src": "7435:23:15" }, { "eventCall": { @@ -31444,7 +31444,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1860, - "src": "7487:7:15", + "src": "7488:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31457,10 +31457,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7502:9:15", + "src": "7503:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1934, @@ -31471,7 +31471,7 @@ "memberName": "nftToken", "nodeType": "MemberAccess", "referencedDeclaration": 1242, - "src": "7502:18:15", + "src": "7503:18:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31484,10 +31484,10 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1867, - "src": "7528:9:15", + "src": "7529:9:15", "typeDescriptions": { - "typeIdentifier": "t_struct$_OrderInfo_$1245_memory_ptr", - "typeString": "struct BENftMarket.OrderInfo memory" + "typeIdentifier": "t_struct$_OrderInfo_$1245_storage_ptr", + "typeString": "struct BENftMarket.OrderInfo storage pointer" } }, "id": 1936, @@ -31498,7 +31498,7 @@ "memberName": "tokenId", "nodeType": "MemberAccess", "referencedDeclaration": 1234, - "src": "7528:17:15", + "src": "7529:17:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31510,7 +31510,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1921, - "src": "7553:8:15", + "src": "7554:8:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31522,7 +31522,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1862, - "src": "7569:5:15", + "src": "7570:5:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -31557,7 +31557,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1306, - "src": "7468:11:15", + "src": "7469:11:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$", "typeString": "function (uint256,address,uint256,uint256,uint256)" @@ -31571,7 +31571,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7468:112:15", + "src": "7469:112:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -31580,7 +31580,7 @@ }, "id": 1940, "nodeType": "EmitStatement", - "src": "7463:117:15" + "src": "7464:117:15" } ] }, @@ -31660,7 +31660,7 @@ "src": "6874:0:15" }, "scope": 2220, - "src": "6812:773:15", + "src": "6812:774:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -31669,7 +31669,7 @@ "body": { "id": 1960, "nodeType": "Block", - "src": "7692:77:15", + "src": "7693:77:15", "statements": [ { "expression": { @@ -31685,7 +31685,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1249, - "src": "7698:15:15", + "src": "7699:15:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -31698,7 +31698,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1945, - "src": "7714:8:15", + "src": "7715:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31709,7 +31709,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7698:25:15", + "src": "7699:25:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31726,14 +31726,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "7726:4:15", + "src": "7727:4:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, - "src": "7698:32:15", + "src": "7699:32:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31741,7 +31741,7 @@ }, "id": 1955, "nodeType": "ExpressionStatement", - "src": "7698:32:15" + "src": "7699:32:15" }, { "eventCall": { @@ -31752,7 +31752,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1945, - "src": "7755:8:15", + "src": "7756:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31771,7 +31771,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1328, - "src": "7741:13:15", + "src": "7742:13:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -31785,7 +31785,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7741:23:15", + "src": "7742:23:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -31794,14 +31794,14 @@ }, "id": 1959, "nodeType": "EmitStatement", - "src": "7736:28:15" + "src": "7737:28:15" } ] }, "documentation": { "id": 1943, "nodeType": "StructuredDocumentation", - "src": "7589:37:15", + "src": "7590:37:15", "text": " @dev Add ERC20 support" }, "functionSelector": "86847c70", @@ -31817,14 +31817,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "7682:9:15" + "src": "7683:9:15" }, "nodeType": "ModifierInvocation", - "src": "7682:9:15" + "src": "7683:9:15" } ], "name": "addERC721Support", - "nameLocation": "7638:16:15", + "nameLocation": "7639:16:15", "nodeType": "FunctionDefinition", "parameters": { "id": 1946, @@ -31835,10 +31835,10 @@ "id": 1945, "mutability": "mutable", "name": "nftToken", - "nameLocation": "7663:8:15", + "nameLocation": "7664:8:15", "nodeType": "VariableDeclaration", "scope": 1961, - "src": "7655:16:15", + "src": "7656:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -31849,7 +31849,7 @@ "id": 1944, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7655:7:15", + "src": "7656:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -31859,16 +31859,16 @@ "visibility": "internal" } ], - "src": "7654:18:15" + "src": "7655:18:15" }, "returnParameters": { "id": 1949, "nodeType": "ParameterList", "parameters": [], - "src": "7692:0:15" + "src": "7693:0:15" }, "scope": 2220, - "src": "7629:140:15", + "src": "7630:140:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -31877,7 +31877,7 @@ "body": { "id": 1979, "nodeType": "Block", - "src": "7884:81:15", + "src": "7885:81:15", "statements": [ { "expression": { @@ -31893,7 +31893,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1249, - "src": "7890:15:15", + "src": "7891:15:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -31906,7 +31906,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1964, - "src": "7906:8:15", + "src": "7907:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31917,7 +31917,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "7890:25:15", + "src": "7891:25:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31934,14 +31934,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "7918:5:15", + "src": "7919:5:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, - "src": "7890:33:15", + "src": "7891:33:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -31949,7 +31949,7 @@ }, "id": 1974, "nodeType": "ExpressionStatement", - "src": "7890:33:15" + "src": "7891:33:15" }, { "eventCall": { @@ -31960,7 +31960,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1964, - "src": "7951:8:15", + "src": "7952:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -31979,7 +31979,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1332, - "src": "7934:16:15", + "src": "7935:16:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -31993,7 +31993,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7934:26:15", + "src": "7935:26:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32002,14 +32002,14 @@ }, "id": 1978, "nodeType": "EmitStatement", - "src": "7929:31:15" + "src": "7930:31:15" } ] }, "documentation": { "id": 1962, "nodeType": "StructuredDocumentation", - "src": "7773:42:15", + "src": "7774:42:15", "text": " @dev Remove 721 NFT support" }, "functionSelector": "498886ac", @@ -32025,14 +32025,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "7874:9:15" + "src": "7875:9:15" }, "nodeType": "ModifierInvocation", - "src": "7874:9:15" + "src": "7875:9:15" } ], "name": "removeERC721Support", - "nameLocation": "7827:19:15", + "nameLocation": "7828:19:15", "nodeType": "FunctionDefinition", "parameters": { "id": 1965, @@ -32043,10 +32043,10 @@ "id": 1964, "mutability": "mutable", "name": "nftToken", - "nameLocation": "7855:8:15", + "nameLocation": "7856:8:15", "nodeType": "VariableDeclaration", "scope": 1980, - "src": "7847:16:15", + "src": "7848:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -32057,7 +32057,7 @@ "id": 1963, "name": "address", "nodeType": "ElementaryTypeName", - "src": "7847:7:15", + "src": "7848:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -32067,16 +32067,16 @@ "visibility": "internal" } ], - "src": "7846:18:15" + "src": "7847:18:15" }, "returnParameters": { "id": 1968, "nodeType": "ParameterList", "parameters": [], - "src": "7884:0:15" + "src": "7885:0:15" }, "scope": 2220, - "src": "7818:147:15", + "src": "7819:147:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -32085,7 +32085,7 @@ "body": { "id": 1998, "nodeType": "Block", - "src": "8076:78:15", + "src": "8077:78:15", "statements": [ { "expression": { @@ -32101,7 +32101,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1253, - "src": "8082:16:15", + "src": "8083:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -32114,7 +32114,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1983, - "src": "8099:8:15", + "src": "8100:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32125,7 +32125,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "8082:26:15", + "src": "8083:26:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32142,14 +32142,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8111:4:15", + "src": "8112:4:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, - "src": "8082:33:15", + "src": "8083:33:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32157,7 +32157,7 @@ }, "id": 1993, "nodeType": "ExpressionStatement", - "src": "8082:33:15" + "src": "8083:33:15" }, { "eventCall": { @@ -32168,7 +32168,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1983, - "src": "8140:8:15", + "src": "8141:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32187,7 +32187,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1328, - "src": "8126:13:15", + "src": "8127:13:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -32201,7 +32201,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8126:23:15", + "src": "8127:23:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32210,14 +32210,14 @@ }, "id": 1997, "nodeType": "EmitStatement", - "src": "8121:28:15" + "src": "8122:28:15" } ] }, "documentation": { "id": 1981, "nodeType": "StructuredDocumentation", - "src": "7969:40:15", + "src": "7970:40:15", "text": " @dev Add 1155 NFT support" }, "functionSelector": "a5f95558", @@ -32233,14 +32233,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "8066:9:15" + "src": "8067:9:15" }, "nodeType": "ModifierInvocation", - "src": "8066:9:15" + "src": "8067:9:15" } ], "name": "addERC1155Support", - "nameLocation": "8021:17:15", + "nameLocation": "8022:17:15", "nodeType": "FunctionDefinition", "parameters": { "id": 1984, @@ -32251,10 +32251,10 @@ "id": 1983, "mutability": "mutable", "name": "nftToken", - "nameLocation": "8047:8:15", + "nameLocation": "8048:8:15", "nodeType": "VariableDeclaration", "scope": 1999, - "src": "8039:16:15", + "src": "8040:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -32265,7 +32265,7 @@ "id": 1982, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8039:7:15", + "src": "8040:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -32275,16 +32275,16 @@ "visibility": "internal" } ], - "src": "8038:18:15" + "src": "8039:18:15" }, "returnParameters": { "id": 1987, "nodeType": "ParameterList", "parameters": [], - "src": "8076:0:15" + "src": "8077:0:15" }, "scope": 2220, - "src": "8012:142:15", + "src": "8013:142:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -32293,7 +32293,7 @@ "body": { "id": 2017, "nodeType": "Block", - "src": "8271:82:15", + "src": "8272:82:15", "statements": [ { "expression": { @@ -32309,7 +32309,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1253, - "src": "8277:16:15", + "src": "8278:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -32322,7 +32322,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2002, - "src": "8294:8:15", + "src": "8295:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32333,7 +32333,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "8277:26:15", + "src": "8278:26:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32350,14 +32350,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8306:5:15", + "src": "8307:5:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, - "src": "8277:34:15", + "src": "8278:34:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32365,7 +32365,7 @@ }, "id": 2012, "nodeType": "ExpressionStatement", - "src": "8277:34:15" + "src": "8278:34:15" }, { "eventCall": { @@ -32376,7 +32376,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2002, - "src": "8339:8:15", + "src": "8340:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32395,7 +32395,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1332, - "src": "8322:16:15", + "src": "8323:16:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -32409,7 +32409,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8322:26:15", + "src": "8323:26:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32418,14 +32418,14 @@ }, "id": 2016, "nodeType": "EmitStatement", - "src": "8317:31:15" + "src": "8318:31:15" } ] }, "documentation": { "id": 2000, "nodeType": "StructuredDocumentation", - "src": "8158:43:15", + "src": "8159:43:15", "text": " @dev Remove 1155 NFT support" }, "functionSelector": "40a28c56", @@ -32441,14 +32441,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "8261:9:15" + "src": "8262:9:15" }, "nodeType": "ModifierInvocation", - "src": "8261:9:15" + "src": "8262:9:15" } ], "name": "removeERC1155Support", - "nameLocation": "8213:20:15", + "nameLocation": "8214:20:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2003, @@ -32459,10 +32459,10 @@ "id": 2002, "mutability": "mutable", "name": "nftToken", - "nameLocation": "8242:8:15", + "nameLocation": "8243:8:15", "nodeType": "VariableDeclaration", "scope": 2018, - "src": "8234:16:15", + "src": "8235:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -32473,7 +32473,7 @@ "id": 2001, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8234:7:15", + "src": "8235:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -32483,16 +32483,16 @@ "visibility": "internal" } ], - "src": "8233:18:15" + "src": "8234:18:15" }, "returnParameters": { "id": 2006, "nodeType": "ParameterList", "parameters": [], - "src": "8271:0:15" + "src": "8272:0:15" }, "scope": 2220, - "src": "8204:149:15", + "src": "8205:149:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -32501,7 +32501,7 @@ "body": { "id": 2046, "nodeType": "Block", - "src": "8456:142:15", + "src": "8457:142:15", "statements": [ { "expression": { @@ -32522,7 +32522,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2021, - "src": "8470:5:15", + "src": "8471:5:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32541,7 +32541,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8487:1:15", + "src": "8488:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -32562,7 +32562,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "8479:7:15", + "src": "8480:7:15", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -32571,7 +32571,7 @@ "id": 2028, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8479:7:15", + "src": "8480:7:15", "typeDescriptions": {} } }, @@ -32583,14 +32583,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8479:10:15", + "src": "8480:10:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "8470:19:15", + "src": "8471:19:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32605,7 +32605,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8491:34:15", + "src": "8492:34:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_807fb10079fb7874d810a3894d618e9fb6b2c9b5fb4e2459717209a06ea12cd4", "typeString": "literal_string \"NFTMarket: ERC20 address is zero\"" @@ -32632,7 +32632,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "8462:7:15", + "src": "8463:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -32646,7 +32646,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8462:64:15", + "src": "8463:64:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32655,7 +32655,7 @@ }, "id": 2035, "nodeType": "ExpressionStatement", - "src": "8462:64:15" + "src": "8463:64:15" }, { "expression": { @@ -32671,7 +32671,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1257, - "src": "8532:14:15", + "src": "8533:14:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -32684,7 +32684,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2021, - "src": "8547:5:15", + "src": "8548:5:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32695,7 +32695,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "8532:21:15", + "src": "8533:21:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32712,14 +32712,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8556:4:15", + "src": "8557:4:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "true" }, - "src": "8532:28:15", + "src": "8533:28:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32727,7 +32727,7 @@ }, "id": 2041, "nodeType": "ExpressionStatement", - "src": "8532:28:15" + "src": "8533:28:15" }, { "eventCall": { @@ -32738,7 +32738,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2021, - "src": "8587:5:15", + "src": "8588:5:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32757,7 +32757,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1336, - "src": "8571:15:15", + "src": "8572:15:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -32771,7 +32771,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8571:22:15", + "src": "8572:22:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32780,14 +32780,14 @@ }, "id": 2045, "nodeType": "EmitStatement", - "src": "8566:27:15" + "src": "8567:27:15" } ] }, "documentation": { "id": 2019, "nodeType": "StructuredDocumentation", - "src": "8357:37:15", + "src": "8358:37:15", "text": " @dev Add ERC20 support" }, "functionSelector": "b9d2df61", @@ -32803,14 +32803,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "8446:9:15" + "src": "8447:9:15" }, "nodeType": "ModifierInvocation", - "src": "8446:9:15" + "src": "8447:9:15" } ], "name": "addERC20Support", - "nameLocation": "8406:15:15", + "nameLocation": "8407:15:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2022, @@ -32821,10 +32821,10 @@ "id": 2021, "mutability": "mutable", "name": "erc20", - "nameLocation": "8430:5:15", + "nameLocation": "8431:5:15", "nodeType": "VariableDeclaration", "scope": 2047, - "src": "8422:13:15", + "src": "8423:13:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -32835,7 +32835,7 @@ "id": 2020, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8422:7:15", + "src": "8423:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -32845,16 +32845,16 @@ "visibility": "internal" } ], - "src": "8421:15:15" + "src": "8422:15:15" }, "returnParameters": { "id": 2025, "nodeType": "ParameterList", "parameters": [], - "src": "8456:0:15" + "src": "8457:0:15" }, "scope": 2220, - "src": "8397:201:15", + "src": "8398:201:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -32863,7 +32863,7 @@ "body": { "id": 2065, "nodeType": "Block", - "src": "8707:76:15", + "src": "8708:76:15", "statements": [ { "expression": { @@ -32879,7 +32879,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1257, - "src": "8713:14:15", + "src": "8714:14:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_bool_$", "typeString": "mapping(address => bool)" @@ -32892,7 +32892,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2050, - "src": "8728:5:15", + "src": "8729:5:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32903,7 +32903,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "8713:21:15", + "src": "8714:21:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32920,14 +32920,14 @@ "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8737:5:15", + "src": "8738:5:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" }, "value": "false" }, - "src": "8713:29:15", + "src": "8714:29:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -32935,7 +32935,7 @@ }, "id": 2060, "nodeType": "ExpressionStatement", - "src": "8713:29:15" + "src": "8714:29:15" }, { "eventCall": { @@ -32946,7 +32946,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2050, - "src": "8772:5:15", + "src": "8773:5:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -32965,7 +32965,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1340, - "src": "8753:18:15", + "src": "8754:18:15", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" @@ -32979,7 +32979,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8753:25:15", + "src": "8754:25:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -32988,14 +32988,14 @@ }, "id": 2064, "nodeType": "EmitStatement", - "src": "8748:30:15" + "src": "8749:30:15" } ] }, "documentation": { "id": 2048, "nodeType": "StructuredDocumentation", - "src": "8602:40:15", + "src": "8603:40:15", "text": " @dev Remove ERC20 support" }, "functionSelector": "fdf397ee", @@ -33011,14 +33011,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "8697:9:15" + "src": "8698:9:15" }, "nodeType": "ModifierInvocation", - "src": "8697:9:15" + "src": "8698:9:15" } ], "name": "removeERC20Support", - "nameLocation": "8654:18:15", + "nameLocation": "8655:18:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2051, @@ -33029,10 +33029,10 @@ "id": 2050, "mutability": "mutable", "name": "erc20", - "nameLocation": "8681:5:15", + "nameLocation": "8682:5:15", "nodeType": "VariableDeclaration", "scope": 2066, - "src": "8673:13:15", + "src": "8674:13:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -33043,7 +33043,7 @@ "id": 2049, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8673:7:15", + "src": "8674:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -33053,16 +33053,16 @@ "visibility": "internal" } ], - "src": "8672:15:15" + "src": "8673:15:15" }, "returnParameters": { "id": 2054, "nodeType": "ParameterList", "parameters": [], - "src": "8707:0:15" + "src": "8708:0:15" }, "scope": 2220, - "src": "8645:138:15", + "src": "8646:138:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -33071,7 +33071,7 @@ "body": { "id": 2091, "nodeType": "Block", - "src": "8941:174:15", + "src": "8942:174:15", "statements": [ { "expression": { @@ -33092,7 +33092,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2071, - "src": "8962:8:15", + "src": "8963:8:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33107,7 +33107,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1270, - "src": "8974:16:15", + "src": "8975:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -33120,7 +33120,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2069, - "src": "8991:8:15", + "src": "8992:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33131,13 +33131,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8974:26:15", + "src": "8975:26:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "8962:38:15", + "src": "8963:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -33152,7 +33152,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9008:53:15", + "src": "9009:53:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_1c08654cc37f003c56b475ad00ed98bf68bd23b2805ed7a765ec62d7a0287862", "typeString": "literal_string \"NFTMarket: maxLimit can not be less than min limit!\"" @@ -33179,7 +33179,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "8947:7:15", + "src": "8948:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -33193,7 +33193,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8947:120:15", + "src": "8948:120:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -33202,7 +33202,7 @@ }, "id": 2084, "nodeType": "ExpressionStatement", - "src": "8947:120:15" + "src": "8948:120:15" }, { "expression": { @@ -33218,7 +33218,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1266, - "src": "9073:16:15", + "src": "9074:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -33231,7 +33231,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2069, - "src": "9090:8:15", + "src": "9091:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33242,7 +33242,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "9073:26:15", + "src": "9074:26:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33256,13 +33256,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2071, - "src": "9102:8:15", + "src": "9103:8:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9073:37:15", + "src": "9074:37:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33270,14 +33270,14 @@ }, "id": 2090, "nodeType": "ExpressionStatement", - "src": "9073:37:15" + "src": "9074:37:15" } ] }, "documentation": { "id": 2067, "nodeType": "StructuredDocumentation", - "src": "8787:55:15", + "src": "8788:55:15", "text": " @dev Set the maximum price limit for NFT" }, "functionSelector": "b9c214a1", @@ -33293,14 +33293,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "8931:9:15" + "src": "8932:9:15" }, "nodeType": "ModifierInvocation", - "src": "8931:9:15" + "src": "8932:9:15" } ], "name": "setNFTPriceMaxLimit", - "nameLocation": "8854:19:15", + "nameLocation": "8855:19:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2072, @@ -33311,10 +33311,10 @@ "id": 2069, "mutability": "mutable", "name": "nftToken", - "nameLocation": "8887:8:15", + "nameLocation": "8888:8:15", "nodeType": "VariableDeclaration", "scope": 2092, - "src": "8879:16:15", + "src": "8880:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -33325,7 +33325,7 @@ "id": 2068, "name": "address", "nodeType": "ElementaryTypeName", - "src": "8879:7:15", + "src": "8880:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -33339,10 +33339,10 @@ "id": 2071, "mutability": "mutable", "name": "maxLimit", - "nameLocation": "8909:8:15", + "nameLocation": "8910:8:15", "nodeType": "VariableDeclaration", "scope": 2092, - "src": "8901:16:15", + "src": "8902:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -33353,7 +33353,7 @@ "id": 2070, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "8901:7:15", + "src": "8902:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33362,16 +33362,16 @@ "visibility": "internal" } ], - "src": "8873:48:15" + "src": "8874:48:15" }, "returnParameters": { "id": 2075, "nodeType": "ParameterList", "parameters": [], - "src": "8941:0:15" + "src": "8942:0:15" }, "scope": 2220, - "src": "8845:270:15", + "src": "8846:270:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -33380,7 +33380,7 @@ "body": { "id": 2124, "nodeType": "Block", - "src": "9273:233:15", + "src": "9274:233:15", "statements": [ { "condition": { @@ -33400,7 +33400,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1266, - "src": "9283:16:15", + "src": "9284:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -33413,7 +33413,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2095, - "src": "9300:8:15", + "src": "9301:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33424,7 +33424,7 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9283:26:15", + "src": "9284:26:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33441,14 +33441,14 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "9313:1:15", + "src": "9314:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" }, "value": "0" }, - "src": "9283:31:15", + "src": "9284:31:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -33456,11 +33456,11 @@ }, "id": 2117, "nodeType": "IfStatement", - "src": "9279:180:15", + "src": "9280:180:15", "trueBody": { "id": 2116, "nodeType": "Block", - "src": "9316:143:15", + "src": "9317:143:15", "statements": [ { "expression": { @@ -33481,7 +33481,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2097, - "src": "9341:8:15", + "src": "9342:8:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33496,7 +33496,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1266, - "src": "9353:16:15", + "src": "9354:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -33509,7 +33509,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2095, - "src": "9370:8:15", + "src": "9371:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33520,13 +33520,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9353:26:15", + "src": "9354:26:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9341:38:15", + "src": "9342:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -33541,7 +33541,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9389:55:15", + "src": "9390:55:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_8d707352005b7a9792af61210bacc67770e71e7c95420f16fc3df5d5eb059e74", "typeString": "literal_string \"NFTMarket: minLimit can not be larger than max limit!\"" @@ -33568,7 +33568,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "9324:7:15", + "src": "9325:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -33582,7 +33582,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9324:128:15", + "src": "9325:128:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -33591,7 +33591,7 @@ }, "id": 2115, "nodeType": "ExpressionStatement", - "src": "9324:128:15" + "src": "9325:128:15" } ] } @@ -33610,7 +33610,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1270, - "src": "9464:16:15", + "src": "9465:16:15", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", "typeString": "mapping(address => uint256)" @@ -33623,7 +33623,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2095, - "src": "9481:8:15", + "src": "9482:8:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -33634,7 +33634,7 @@ "isPure": false, "lValueRequested": true, "nodeType": "IndexAccess", - "src": "9464:26:15", + "src": "9465:26:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33648,13 +33648,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2097, - "src": "9493:8:15", + "src": "9494:8:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9464:37:15", + "src": "9465:37:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33662,14 +33662,14 @@ }, "id": 2123, "nodeType": "ExpressionStatement", - "src": "9464:37:15" + "src": "9465:37:15" } ] }, "documentation": { "id": 2093, "nodeType": "StructuredDocumentation", - "src": "9119:55:15", + "src": "9120:55:15", "text": " @dev Set the minimum price limit for NFT" }, "functionSelector": "28400cf3", @@ -33685,14 +33685,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "9263:9:15" + "src": "9264:9:15" }, "nodeType": "ModifierInvocation", - "src": "9263:9:15" + "src": "9264:9:15" } ], "name": "setNFTPriceMinLimit", - "nameLocation": "9186:19:15", + "nameLocation": "9187:19:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2098, @@ -33703,10 +33703,10 @@ "id": 2095, "mutability": "mutable", "name": "nftToken", - "nameLocation": "9219:8:15", + "nameLocation": "9220:8:15", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "9211:16:15", + "src": "9212:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -33717,7 +33717,7 @@ "id": 2094, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9211:7:15", + "src": "9212:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -33731,10 +33731,10 @@ "id": 2097, "mutability": "mutable", "name": "minLimit", - "nameLocation": "9241:8:15", + "nameLocation": "9242:8:15", "nodeType": "VariableDeclaration", "scope": 2125, - "src": "9233:16:15", + "src": "9234:16:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -33745,7 +33745,7 @@ "id": 2096, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9233:7:15", + "src": "9234:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33754,16 +33754,16 @@ "visibility": "internal" } ], - "src": "9205:48:15" + "src": "9206:48:15" }, "returnParameters": { "id": 2101, "nodeType": "ParameterList", "parameters": [], - "src": "9273:0:15" + "src": "9274:0:15" }, "scope": 2220, - "src": "9177:329:15", + "src": "9178:329:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -33772,7 +33772,7 @@ "body": { "id": 2148, "nodeType": "Block", - "src": "9627:215:15", + "src": "9628:215:15", "statements": [ { "expression": { @@ -33803,7 +33803,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2128, - "src": "9648:15:15", + "src": "9649:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33817,13 +33817,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1358, - "src": "9667:19:15", + "src": "9668:19:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9648:38:15", + "src": "9649:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -33847,7 +33847,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2128, - "src": "9698:15:15", + "src": "9699:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33861,19 +33861,19 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1366, - "src": "9717:19:15", + "src": "9718:19:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9698:38:15", + "src": "9699:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9648:88:15", + "src": "9649:88:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -33888,7 +33888,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9744:49:15", + "src": "9745:49:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_6795cd5cf4addfa42f3ccdb8eaf5731d602463ad922d3b7d7d9cbf960253ef80", "typeString": "literal_string \"NFTMarket: _transactionFee must >= 0 and <= 10%\"" @@ -33915,7 +33915,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "9633:7:15", + "src": "9634:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -33929,7 +33929,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9633:166:15", + "src": "9634:166:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -33938,7 +33938,7 @@ }, "id": 2143, "nodeType": "ExpressionStatement", - "src": "9633:166:15" + "src": "9634:166:15" }, { "expression": { @@ -33953,7 +33953,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1355, - "src": "9805:14:15", + "src": "9806:14:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33967,13 +33967,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2128, - "src": "9822:15:15", + "src": "9823:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9805:32:15", + "src": "9806:32:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -33981,14 +33981,14 @@ }, "id": 2147, "nodeType": "ExpressionStatement", - "src": "9805:32:15" + "src": "9806:32:15" } ] }, "documentation": { "id": 2126, "nodeType": "StructuredDocumentation", - "src": "9510:43:15", + "src": "9511:43:15", "text": " @dev Set the transaction fee" }, "functionSelector": "096a8ab7", @@ -34004,14 +34004,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "9617:9:15" + "src": "9618:9:15" }, "nodeType": "ModifierInvocation", - "src": "9617:9:15" + "src": "9618:9:15" } ], "name": "setTransactionFee", - "nameLocation": "9565:17:15", + "nameLocation": "9566:17:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2129, @@ -34022,10 +34022,10 @@ "id": 2128, "mutability": "mutable", "name": "_transactionFee", - "nameLocation": "9591:15:15", + "nameLocation": "9592:15:15", "nodeType": "VariableDeclaration", "scope": 2149, - "src": "9583:23:15", + "src": "9584:23:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34036,7 +34036,7 @@ "id": 2127, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "9583:7:15", + "src": "9584:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34045,16 +34045,16 @@ "visibility": "internal" } ], - "src": "9582:25:15" + "src": "9583:25:15" }, "returnParameters": { "id": 2132, "nodeType": "ParameterList", "parameters": [], - "src": "9627:0:15" + "src": "9628:0:15" }, "scope": 2220, - "src": "9556:286:15", + "src": "9557:286:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -34063,7 +34063,7 @@ "body": { "id": 2171, "nodeType": "Block", - "src": "9964:150:15", + "src": "9965:150:15", "statements": [ { "expression": { @@ -34084,7 +34084,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2152, - "src": "9985:13:15", + "src": "9986:13:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34103,7 +34103,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10010:1:15", + "src": "10011:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -34124,7 +34124,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10002:7:15", + "src": "10003:7:15", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -34133,7 +34133,7 @@ "id": 2159, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10002:7:15", + "src": "10003:7:15", "typeDescriptions": {} } }, @@ -34145,14 +34145,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10002:10:15", + "src": "10003:10:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "9985:27:15", + "src": "9986:27:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34167,7 +34167,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10020:49:15", + "src": "10021:49:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_3b04b8e26e4b4f37c4e02792de76b923f7bbb4c995d4be6d4bf338e41a5da1f6", "typeString": "literal_string \"NFTMarket: fee received address can not be zero\"" @@ -34194,7 +34194,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "9970:7:15", + "src": "9971:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -34208,7 +34208,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9970:105:15", + "src": "9971:105:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -34217,7 +34217,7 @@ }, "id": 2166, "nodeType": "ExpressionStatement", - "src": "9970:105:15" + "src": "9971:105:15" }, { "expression": { @@ -34232,7 +34232,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1387, - "src": "10081:12:15", + "src": "10082:12:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34246,13 +34246,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2152, - "src": "10096:13:15", + "src": "10097:13:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "10081:28:15", + "src": "10082:28:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34260,14 +34260,14 @@ }, "id": 2170, "nodeType": "ExpressionStatement", - "src": "10081:28:15" + "src": "10082:28:15" } ] }, "documentation": { "id": 2150, "nodeType": "StructuredDocumentation", - "src": "9846:48:15", + "src": "9847:48:15", "text": " @dev Set the fee received address" }, "functionSelector": "580bb9a5", @@ -34283,14 +34283,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "9954:9:15" + "src": "9955:9:15" }, "nodeType": "ModifierInvocation", - "src": "9954:9:15" + "src": "9955:9:15" } ], "name": "setFeeToAddress", - "nameLocation": "9906:15:15", + "nameLocation": "9907:15:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2153, @@ -34301,10 +34301,10 @@ "id": 2152, "mutability": "mutable", "name": "_feeToAddress", - "nameLocation": "9930:13:15", + "nameLocation": "9931:13:15", "nodeType": "VariableDeclaration", "scope": 2172, - "src": "9922:21:15", + "src": "9923:21:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34315,7 +34315,7 @@ "id": 2151, "name": "address", "nodeType": "ElementaryTypeName", - "src": "9922:7:15", + "src": "9923:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -34325,16 +34325,16 @@ "visibility": "internal" } ], - "src": "9921:23:15" + "src": "9922:23:15" }, "returnParameters": { "id": 2156, "nodeType": "ParameterList", "parameters": [], - "src": "9964:0:15" + "src": "9965:0:15" }, "scope": 2220, - "src": "9897:217:15", + "src": "9898:217:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -34343,7 +34343,7 @@ "body": { "id": 2195, "nodeType": "Block", - "src": "10235:215:15", + "src": "10236:215:15", "statements": [ { "expression": { @@ -34374,7 +34374,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2175, - "src": "10256:15:15", + "src": "10257:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34388,13 +34388,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1377, - "src": "10275:19:15", + "src": "10276:19:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10256:38:15", + "src": "10257:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34418,7 +34418,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2175, - "src": "10306:15:15", + "src": "10307:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34432,19 +34432,19 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1385, - "src": "10325:19:15", + "src": "10326:19:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10306:38:15", + "src": "10307:38:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "10256:88:15", + "src": "10257:88:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34459,7 +34459,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10352:49:15", + "src": "10353:49:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_f1446c0b73b9c016f37f2a74693ff1e5f4d9aa72f89656ff2a673b7858373ff2", "typeString": "literal_string \"NFTMarket: _transactionTax must >= 0 and <= 10%\"" @@ -34486,7 +34486,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "10241:7:15", + "src": "10242:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -34500,7 +34500,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10241:166:15", + "src": "10242:166:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -34509,7 +34509,7 @@ }, "id": 2190, "nodeType": "ExpressionStatement", - "src": "10241:166:15" + "src": "10242:166:15" }, { "expression": { @@ -34524,7 +34524,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1374, - "src": "10413:14:15", + "src": "10414:14:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34538,13 +34538,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2175, - "src": "10430:15:15", + "src": "10431:15:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10413:32:15", + "src": "10414:32:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34552,14 +34552,14 @@ }, "id": 2194, "nodeType": "ExpressionStatement", - "src": "10413:32:15" + "src": "10414:32:15" } ] }, "documentation": { "id": 2173, "nodeType": "StructuredDocumentation", - "src": "10118:43:15", + "src": "10119:43:15", "text": " @dev Set the transaction tax" }, "functionSelector": "8d1400b4", @@ -34575,14 +34575,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "10225:9:15" + "src": "10226:9:15" }, "nodeType": "ModifierInvocation", - "src": "10225:9:15" + "src": "10226:9:15" } ], "name": "setTransactionTax", - "nameLocation": "10173:17:15", + "nameLocation": "10174:17:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2176, @@ -34593,10 +34593,10 @@ "id": 2175, "mutability": "mutable", "name": "_transactionTax", - "nameLocation": "10199:15:15", + "nameLocation": "10200:15:15", "nodeType": "VariableDeclaration", "scope": 2196, - "src": "10191:23:15", + "src": "10192:23:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34607,7 +34607,7 @@ "id": 2174, "name": "uint256", "nodeType": "ElementaryTypeName", - "src": "10191:7:15", + "src": "10192:7:15", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -34616,16 +34616,16 @@ "visibility": "internal" } ], - "src": "10190:25:15" + "src": "10191:25:15" }, "returnParameters": { "id": 2179, "nodeType": "ParameterList", "parameters": [], - "src": "10235:0:15" + "src": "10236:0:15" }, "scope": 2220, - "src": "10164:286:15", + "src": "10165:286:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" @@ -34634,7 +34634,7 @@ "body": { "id": 2218, "nodeType": "Block", - "src": "10572:150:15", + "src": "10573:150:15", "statements": [ { "expression": { @@ -34655,7 +34655,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2199, - "src": "10593:13:15", + "src": "10594:13:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34674,7 +34674,7 @@ "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10618:1:15", + "src": "10619:1:15", "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", "typeString": "int_const 0" @@ -34695,7 +34695,7 @@ "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10610:7:15", + "src": "10611:7:15", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" @@ -34704,7 +34704,7 @@ "id": 2206, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10610:7:15", + "src": "10611:7:15", "typeDescriptions": {} } }, @@ -34716,14 +34716,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10610:10:15", + "src": "10611:10:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "10593:27:15", + "src": "10594:27:15", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -34738,7 +34738,7 @@ "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10628:49:15", + "src": "10629:49:15", "typeDescriptions": { "typeIdentifier": "t_stringliteral_faa68234915d390aade54ca7ba53d68072acc787be4210528748675ca2b94c78", "typeString": "literal_string \"NFTMarket: tax received address can not be zero\"" @@ -34765,7 +34765,7 @@ 4294967278 ], "referencedDeclaration": 4294967278, - "src": "10578:7:15", + "src": "10579:7:15", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" @@ -34779,7 +34779,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10578:105:15", + "src": "10579:105:15", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_tuple$__$", @@ -34788,7 +34788,7 @@ }, "id": 2213, "nodeType": "ExpressionStatement", - "src": "10578:105:15" + "src": "10579:105:15" }, { "expression": { @@ -34803,7 +34803,7 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 1389, - "src": "10689:12:15", + "src": "10690:12:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34817,13 +34817,13 @@ "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 2199, - "src": "10704:13:15", + "src": "10705:13:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "10689:28:15", + "src": "10690:28:15", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -34831,14 +34831,14 @@ }, "id": 2217, "nodeType": "ExpressionStatement", - "src": "10689:28:15" + "src": "10690:28:15" } ] }, "documentation": { "id": 2197, "nodeType": "StructuredDocumentation", - "src": "10454:48:15", + "src": "10455:48:15", "text": " @dev Set the tax received address" }, "functionSelector": "c68d20ab", @@ -34854,14 +34854,14 @@ "name": "onlyOwner", "nodeType": "IdentifierPath", "referencedDeclaration": 46, - "src": "10562:9:15" + "src": "10563:9:15" }, "nodeType": "ModifierInvocation", - "src": "10562:9:15" + "src": "10563:9:15" } ], "name": "setTaxToAddress", - "nameLocation": "10514:15:15", + "nameLocation": "10515:15:15", "nodeType": "FunctionDefinition", "parameters": { "id": 2200, @@ -34872,10 +34872,10 @@ "id": 2199, "mutability": "mutable", "name": "_taxToAddress", - "nameLocation": "10538:13:15", + "nameLocation": "10539:13:15", "nodeType": "VariableDeclaration", "scope": 2219, - "src": "10530:21:15", + "src": "10531:21:15", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -34886,7 +34886,7 @@ "id": 2198, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10530:7:15", + "src": "10531:7:15", "stateMutability": "nonpayable", "typeDescriptions": { "typeIdentifier": "t_address", @@ -34896,27 +34896,27 @@ "visibility": "internal" } ], - "src": "10529:23:15" + "src": "10530:23:15" }, "returnParameters": { "id": 2203, "nodeType": "ParameterList", "parameters": [], - "src": "10572:0:15" + "src": "10573:0:15" }, "scope": 2220, - "src": "10505:217:15", + "src": "10506:217:15", "stateMutability": "nonpayable", "virtual": false, "visibility": "external" } ], "scope": 2221, - "src": "559:10165:15", + "src": "559:10166:15", "usedErrors": [] } ], - "src": "32:10693:15" + "src": "32:10694:15" }, "compiler": { "name": "solc", @@ -34924,7 +34924,7 @@ }, "networks": {}, "schemaVersion": "3.4.11", - "updatedAt": "2023-06-15T08:25:44.222Z", + "updatedAt": "2023-06-19T06:12:22.581Z", "devdoc": { "kind": "dev", "methods": { diff --git a/contracts/market/BENftMarket.sol b/contracts/market/BENftMarket.sol index 8610fbb..3ac4265 100644 --- a/contracts/market/BENftMarket.sol +++ b/contracts/market/BENftMarket.sol @@ -234,7 +234,7 @@ contract BENftMarket is Ownable, ReentrancyGuard, ERC1155Holder, ERC721Holder { } function updatePrice(uint256 orderId, uint256 price) external { - OrderInfo memory orderInfo = orderInfos[orderId]; + OrderInfo storage orderInfo = orderInfos[orderId]; require(orderInfo.tokenId != 0, "NFTMarket: NFT does not exist"); require(orderInfo.owner == _msgSender(), "NFTMarket: caller is not owner"); require( diff --git a/out_arbitrum_testnet_dev.json b/out_arbitrum_testnet_dev.json index d05c4ce..c9fafe5 100644 --- a/out_arbitrum_testnet_dev.json +++ b/out_arbitrum_testnet_dev.json @@ -63,7 +63,7 @@ "name": "BENftMarket", "type": "logic", "json": "assets/contracts/BENFTMarket.json", - "address": "0x1d33b4E045ce595B6346C3D0e334814dd4Af5418" + "address": "0x28cd862Baa826e65a0c0F1179B9A3423dF4d366A" }, { "name": "BENftMall",