[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "uint256", "name": "_commissionRate", "type": "uint256" }, { "internalType": "uint256", "name": "_royaltiesCommissionRate", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bool", "name": "_anyoneCanMint", "type": "bool" }, { "internalType": "string", "name": "uri", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "qty", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "Bid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Buy", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "CancelBid", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "CancelSale", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Change", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Commission", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "LazyMint", "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": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Royalty", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "qty", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "Sell", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" } ], "name": "acceptBid", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "admin", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "anyoneCanMint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "autoMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "autoMintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "bid", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" } ], "name": "buy", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "canIMint", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "cancelBid", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "cancelSale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "commissionRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "creators", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "domainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getChainId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isMinter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "openOffers", "outputs": [ { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "user", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "openOffersLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "openSales", "outputs": [ { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "wallet", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "openSalesLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "nftPostId", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "uint256", "name": "collectionId", "type": "uint256" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "author", "type": "address" }, { "internalType": "uint256", "name": "salt", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint256", "name": "qtyToMint", "type": "uint256" } ], "name": "redeem", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltiesCommissionRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "qty", "type": "uint256" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "wallet", "type": "address" } ], "name": "sell", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "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": "address", "name": "_admin", "type": "address" }, { "internalType": "uint256", "name": "_commissionRate", "type": "uint256" }, { "internalType": "uint256", "name": "_royaltiesCommissionRate", "type": "uint256" }, { "internalType": "bool", "name": "_anyoneCanMint", "type": "bool" } ], "name": "updateAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "vouchersMintedQty", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "vouchersNFTIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
6101206040523480156200001257600080fd5b5060405162005664380380620056648339810160408190526200003591620005e2565b6040518060400160405280601481526020017f45524331313535417a756b692d566f7563686572000000000000000000000000815250604051806040016040528060018152602001603160f81b8152508989898989898989878185858583620000ad620000a76200028960201b60201c565b6200028d565b620000b881620002dd565b50620000c6600086620002f6565b620000f27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a686620002f6565b620000fd8562000302565b8251620001129060069060208601906200045b565b508151620001289060079060208501906200045b565b506009805460ff191691151591909117905550506001600a555060649050620001528688620006bd565b10620001bf5760405162461bcd60e51b815260206004820152603160248201527f417a756b693a20746f74616c20636f6d6d697373696f6e732073686f756c642060448201527006265206c6f776572207468616e2031303607c1b60648201526084015b60405180910390fd5b5050600b80546001600160a01b0319166001600160a01b03969096169590951790945550600c91909155600d555050815160208084019190912082518383012060c082815260e08290524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81890181905281830188905260608201879052608082019490945230818401528151808203909301835290930190925281519190940120919290916080526101005250620007359a5050505050505050505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051620002f29060049060208401906200045b565b5050565b620002f28282620003d3565b6000546001600160a01b031633146200035e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620001b6565b6001600160a01b038116620003c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001b6565b620003d0816200028d565b50565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620002f25760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b8280546200046990620006e2565b90600052602060002090601f0160209004810192826200048d5760008555620004d8565b82601f10620004a857805160ff1916838001178555620004d8565b82800160010185558215620004d8579182015b82811115620004d8578251825591602001919060010190620004bb565b50620004e6929150620004ea565b5090565b5b80821115620004e65760008155600101620004eb565b80516001600160a01b03811681146200051957600080fd5b919050565b805180151581146200051957600080fd5b600082601f83011262000540578081fd5b81516001600160401b03808211156200055d576200055d6200071f565b604051601f8301601f19908116603f011681019082821181831017156200058857620005886200071f565b81604052838152602092508683858801011115620005a4578485fd5b8491505b83821015620005c75785820183015181830184015290820190620005a8565b83821115620005d857848385830101525b9695505050505050565b600080600080600080600080610100898b031215620005ff578384fd5b6200060a8962000501565b97506200061a60208a0162000501565b60408a015160608b015160808c015192995090975095506001600160401b038082111562000646578586fd5b620006548c838d016200052f565b955060a08b01519150808211156200066a578485fd5b620006788c838d016200052f565b94506200068860c08c016200051e565b935060e08b01519150808211156200069e578283fd5b50620006ad8b828c016200052f565b9150509295985092959890939650565b60008219821115620006dd57634e487b7160e01b81526011600452602481fd5b500190565b600181811c90821680620006f757607f821691505b602082108114156200071957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b60805160a05160c05160e05161010051614eea6200077a6000396000613542015260006135910152600061356c015260006134f0015260006135190152614eea6000f3fe6080604052600436106102c85760003560e01c80638da5cb5b11610175578063ce15d87c116100dc578063e22b8b4d11610095578063f242432a1161006f578063f242432a14610960578063f2fde38b14610980578063f698da25146109a0578063f851a440146109b557600080fd5b8063e22b8b4d146108e2578063e985e9c514610902578063ee1b59e41461094b57600080fd5b8063ce15d87c146107e7578063d138951214610814578063d539139314610841578063d547741f14610875578063dc234f5a14610895578063e22b862c146108b557600080fd5b8063a22cb4651161012e578063a22cb4651461070a578063a2d0d0291461072a578063aa271e1a1461074a578063b13fbe961461076a578063bd85b03914610784578063cd53d08e146107b157600080fd5b80638da5cb5b1461065b57806391d148541461068d57806395d89b41146106ad578063983b2d56146106c25780639fa6b40c146106e2578063a217fddf146106f557600080fd5b8063373f68d11161023457806356bee561116101ed578063731133e9116101c7578063731133e9146105885780637447298f146105a8578063745e96d7146105ec578063801496091461060c57600080fd5b806356bee561146105305780635ea1d6f81461055d578063715018a61461057357600080fd5b8063373f68d11461046b57806340993b26146104815780634b393605146104945780634c22ce0b146104b45780634e1273f4146104d45780634f558e791461050157600080fd5b8063248a9ca311610286578063248a9ca3146103b45780632ac9bf09146103e55780632eb2c2d6146103f85780632f2ff15d146104185780633408e4701461043857806336568abe1461044b57600080fd5b8062fdd58e146102cd57806301ffc9a71461030057806306fdde031461033057806309d0ffa8146103525780630e89341c146103745780631f7fdffa14610394575b600080fd5b3480156102d957600080fd5b506102ed6102e8366004614487565b6109d5565b6040519081526020015b60405180910390f35b34801561030c57600080fd5b5061032061031b36600461465f565b610a6e565b60405190151581526020016102f7565b34801561033c57600080fd5b50610345610a7f565b6040516102f791906149e4565b34801561035e57600080fd5b5061037261036d366004614697565b610b11565b005b34801561038057600080fd5b5061034561038f366004614625565b610d62565b3480156103a057600080fd5b506103726103af3660046143bd565b610df6565b3480156103c057600080fd5b506102ed6103cf366004614625565b6000908152600160208190526040909120015490565b6103726103f33660046146b8565b610e2f565b34801561040457600080fd5b5061037261041336600461426b565b611087565b34801561042457600080fd5b5061037261043336600461463d565b611117565b34801561044457600080fd5b50466102ed565b34801561045757600080fd5b5061037261046636600461463d565b611143565b34801561047757600080fd5b506102ed600d5481565b61037261048f3660046146b8565b6111c1565b3480156104a057600080fd5b506103726104af366004614697565b61160e565b3480156104c057600080fd5b506103726104cf366004614372565b61196f565b3480156104e057600080fd5b506104f46104ef366004614549565b611a11565b6040516102f791906149a3565b34801561050d57600080fd5b5061032061051c366004614625565b600090815260056020526040902054151590565b34801561053c57600080fd5b506102ed61054b366004614625565b60126020526000908152604090205481565b34801561056957600080fd5b506102ed600c5481565b34801561057f57600080fd5b50610372611b72565b34801561059457600080fd5b506103726105a33660046144f7565b611ba8565b3480156105b457600080fd5b506105c86105c3366004614697565b611bda565b6040805193845260208401929092526001600160a01b0316908201526060016102f7565b3480156105f857600080fd5b506102ed610607366004614487565b611c25565b34801561061857600080fd5b5061062c610627366004614697565b611c88565b6040805194855260208501939093526001600160a01b03918216928401929092521660608201526080016102f7565b34801561066757600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016102f7565b34801561069957600080fd5b506103206106a836600461463d565b611cdb565b3480156106b957600080fd5b50610345611d06565b3480156106ce57600080fd5b506103726106dd36600461421f565b611d15565b6103726106f0366004614721565b611d65565b34801561070157600080fd5b506102ed600081565b34801561071657600080fd5b50610372610725366004614451565b612092565b34801561073657600080fd5b506103726107453660046146b8565b612169565b34801561075657600080fd5b5061032061076536600461421f565b612569565b34801561077657600080fd5b506009546103209060ff1681565b34801561079057600080fd5b506102ed61079f366004614625565b60009081526005602052604090205490565b3480156107bd57600080fd5b506106756107cc366004614625565b600e602052600090815260409020546001600160a01b031681565b3480156107f357600080fd5b506102ed610802366004614625565b60146020526000908152604090205481565b34801561082057600080fd5b506102ed61082f366004614625565b60106020526000908152604090205481565b34801561084d57600080fd5b506102ed7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b34801561088157600080fd5b5061037261089036600461463d565b612595565b3480156108a157600080fd5b506103726108b03660046146e3565b6125bc565b3480156108c157600080fd5b506102ed6108d0366004614625565b60136020526000908152604090205481565b3480156108ee57600080fd5b506103726108fd3660046144b0565b612742565b34801561090e57600080fd5b5061032061091d366004614239565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b34801561095757600080fd5b5061032061281c565b34801561096c57600080fd5b5061037261097b366004614310565b612839565b34801561098c57600080fd5b5061037261099b36600461421f565b6128c0565b3480156109ac57600080fd5b506102ed61295b565b3480156109c157600080fd5b50600b54610675906001600160a01b031681565b60006001600160a01b038316610a465760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b5060009081526002602090815260408083206001600160a01b03949094168352929052205490565b6000610a7982612965565b92915050565b606060068054610a8e90614d42565b80601f0160208091040260200160405190810160405280929190818152602001828054610aba90614d42565b8015610b075780601f10610adc57610100808354040283529160200191610b07565b820191906000526020600020905b815481529060010190602001808311610aea57829003601f168201915b5050505050905090565b6000828152600f60205260409020805433919083908110610b4257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600260049092020101546001600160a01b031614610bc95760405162461bcd60e51b815260206004820152603460248201527f417a756b693a206f6e6c7920746865206f726967696e616c2073656c6c65722060448201527363616e2063616e63656c206869732073616c657360601b6064820152608401610a3d565b6000828152600f602052604090208054610be590600190614ce8565b81548110610c0357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600f60008481526020019081526020016000208281548110610c4357634e487b7160e01b600052603260045260246000fd5b6000918252602080832084546004909302019182556001808501549083015560028085015490830180546001600160a01b03199081166001600160a01b03938416179091556003958601549590930180549093169416939093179055838152600f90915260409020805480610cc857634e487b7160e01b600052603160045260246000fd5b60008281526020808220600460001990940193840201828155600181018390556002810180546001600160a01b031990811690915560039091018054909116905591909255838252600f8152604080832054601090925291829020555182907f62f362ec9f7b9b102a4244ce20b4b58f82ab3e1a2c681c73637a4a7cf91cb78590610d569084815260200190565b60405180910390a25050565b606060048054610d7190614d42565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9d90614d42565b8015610dea5780601f10610dbf57610100808354040283529160200191610dea565b820191906000526020600020905b815481529060010190602001808311610dcd57829003601f168201915b50505050509050919050565b6060610e0061281c565b610e1c5760405162461bcd60e51b8152600401610a3d90614bac565b610e28858585856129a5565b5050505050565b6002600a541415610e525760405162461bcd60e51b8152600401610a3d90614c37565b6002600a5581610ea45760405162461bcd60e51b815260206004820181905260248201527f496b736173756d693a207174792068617320746f20626520706f7369746976656044820152606401610a3d565b60008111610eff5760405162461bcd60e51b815260206004820152602260248201527f496b736173756d693a2070726963652068617320746f20626520706f73697469604482015261766560f01b6064820152608401610a3d565b600083815260056020526040902054821115610f695760405162461bcd60e51b815260206004820152602360248201527f496b736173756d693a206e6f7420656e6f756768206974656d7320666f722073604482015262616c6560e81b6064820152608401610a3d565b6000610f758284614cc9565b905080341015610f975760405162461bcd60e51b8152600401610a3d90614a3f565b610fa081612a2d565b60006040518060600160405280858152602001848152602001610fc03390565b6001600160a01b0390811690915260008781526011602090815260408083208054600180820183558286528486208851600390930201918255878501519082015586830151600290910180546001600160a01b031916919096161790945589835292546012909152919020559050336001600160a01b0316857f3138d8d517460c959fb333d4e8d87ea984f1cf15d6742c02e2955dd27a622b708686604051611073929190918252602082015260400190565b60405180910390a350506001600a55505050565b6001600160a01b0385163314806110a357506110a3853361091d565b61110a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610a3d565b610e288585858585612af6565b600082815260016020819052604090912001546111348133612cb1565b61113e8383612d15565b505050565b6001600160a01b03811633146111b35760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a3d565b6111bd8282612d80565b5050565b6002600a5414156111e45760405162461bcd60e51b8152600401610a3d90614c37565b6002600a556000838152600f6020526040902080543391908490811061121a57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600260049092020101546001600160a01b031614156112965760405162461bcd60e51b815260206004820152602860248201527f417a756b693a2074686520757365722063616e6e6f742062757920686973206f6044820152673bb71037b33332b960c11b6064820152608401610a3d565b6000838152600f602052604081208054849081106112c457634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010154826112e19190614cc9565b9050803410156113035760405162461bcd60e51b8152600401610a3d90614a3f565b61130c81612a2d565b61136281336000878152600f6020526040902080548790811061133f57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360049092020101546001600160a01b031687612de7565b6000848152600f60205260409020805461140a913091637921219560e11b9190879081106113a057634e487b7160e01b600052603260045260246000fd5b60009182526020909120600490910201600201546001600160a01b03163388876040516024016113d39493929190614960565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526130a3565b6000848152600f6020526040902080548391908590811061143b57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600001600082825461145b9190614ce8565b90915550506000848152600f6020526040902080548490811061148e57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016000015460001415611603576000848152600f6020526040902080546114c490600190614ce8565b815481106114e257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600f6000868152602001908152602001600020848154811061152257634e487b7160e01b600052603260045260246000fd5b6000918252602080832084546004909302019182556001808501549083015560028085015490830180546001600160a01b03199081166001600160a01b03938416179091556003958601549590930180549093169416939093179055858152600f909152604090208054806115a757634e487b7160e01b600052603160045260246000fd5b60008281526020808220600460001990940193840201828155600181018390556002810180546001600160a01b031990811690915560039091018054909116905591909255858252600f81526040808320546010909252909120555b50506001600a555050565b6002600a5414156116315760405162461bcd60e51b8152600401610a3d90614c37565b6002600a55600082815260116020526040902080543391908390811061166757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600260039092020101546001600160a01b0316146116ed5760405162461bcd60e51b815260206004820152603360248201527f417a756b693a206f6e6c7920746865206f726967696e616c206269646465722060448201527263616e2063616e63656c20686973206269647360681b6064820152608401610a3d565b600082815260116020526040812080548390811061171b57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016001015460116000858152602001908152602001600020838154811061175f57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016000015461177b9190614cc9565b600084815260116020526040902080549192509061179b90600190614ce8565b815481106117b957634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016011600085815260200190815260200160002083815481106117f957634e487b7160e01b600052603260045260246000fd5b600091825260208083208454600390930201918255600180850154908301556002938401549390910180546001600160a01b0319166001600160a01b039094169390931790925584815260119091526040902080548061186957634e487b7160e01b600052603160045260246000fd5b600082815260208082206003600019909401938402018281556001810183905560020180546001600160a01b0319169055919092558482526011815260408083205460129092528220556118ba3390565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611904576040519150601f19603f3d011682016040523d82523d6000602084013e611909565b606091505b505090508061192a5760405162461bcd60e51b8152600401610a3d90614b3a565b837f7277fc1cd614e04155fd1e358fe63c0576fc211585e1ec95403495e0272eeb4c8460405161195c91815260200190565b60405180910390a250506001600a555050565b606061197961281c565b6119955760405162461bcd60e51b8152600401610a3d90614bac565b6001600160a01b0383166119bb5760405162461bcd60e51b8152600401610a3d90614bf6565b60005b8251811015611a0b576119f8848483815181106119eb57634e487b7160e01b600052603260045260246000fd5b6020026020010151611c25565b5080611a0381614da9565b9150506119be565b50505050565b60608151835114611a765760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a3d565b600083516001600160401b03811115611a9f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ac8578160200160208202803683370190505b50905060005b8451811015611b6a57611b2f858281518110611afa57634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110611b2257634e487b7160e01b600052603260045260246000fd5b60200260200101516109d5565b828281518110611b4f57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152611b6381614da9565b9050611ace565b509392505050565b6000546001600160a01b03163314611b9c5760405162461bcd60e51b8152600401610a3d90614b05565b611ba6600061321f565b565b6060611bb261281c565b611bce5760405162461bcd60e51b8152600401610a3d90614bac565b610e288585858561326f565b60116020528160005260406000208181548110611bf657600080fd5b60009182526020909120600390910201805460018201546002909201549093509091506001600160a01b031683565b60006060611c3161281c565b611c4d5760405162461bcd60e51b8152600401610a3d90614bac565b611c55613299565b611c7d846008548560405180604001604052806002815260200161060f60f31b81525061326f565b505060085492915050565b600f6020528160005260406000208181548110611ca457600080fd5b6000918252602090912060049091020180546001820154600283015460039093015491945092506001600160a01b03918216911684565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060078054610a8e90614d42565b6060611d1f61281c565b611d3b5760405162461bcd60e51b8152600401610a3d90614bac565b6111bd7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683611117565b6002600a541415611d885760405162461bcd60e51b8152600401610a3d90614c37565b6002600a55468514611dd15760405162461bcd60e51b815260206004820152601260248201527120bd3ab5b49d102bb937b7339031b430b4b760711b6044820152606401610a3d565b60008a8152601360205260409020548890611ded908390614c91565b1115611e615760405162461bcd60e51b815260206004820152603760248201527f417a756b693a207468652071747920657863656564732074686520616d6f756e60448201527f7420617661696c61626c6520666f72206d696e74696e670000000000000000006064820152608401610a3d565b8a1580611e7b575060008b81526005602052604090205415155b611ebd5760405162461bcd60e51b8152602060048201526013602482015272105e9d5ada4e8815dc9bdb99c8139195081251606a1b6044820152606401610a3d565b611ec78782614cc9565b341015611ee65760405162461bcd60e51b8152600401610a3d90614a3f565b611ef8611ef38883614cc9565b612a2d565b611f1c8a8a8a8a8a8a8a8a308b611f176000546001600160a01b031690565b6132c6565b60008a815260146020526040902054611f66578a15611f4b5760008a81526014602052604090208b9055611f66565b611f53613299565b60085460008b8152601460205260409020555b611f9f33601460008d8152602001908152602001600020548360405180604001604052806002815260200161060f60f31b81525061326f565b60008a8152601460209081526040808320548352600e909152902080546001600160a01b0319166001600160a01b038616179055612001611fe08883614cc9565b336000546001600160a01b031660008e815260146020526040902054612de7565b600080548b825260146020526040909120546001600160a01b039091169033907ffd97862d5a5b5a3eb526cec9bc4d060e4927fa2388f7f3178f09a250dd864ab161204c8b86614cc9565b60405190815260200160405180910390a460008a8152601360205260408120805483929061207b908490614c91565b90915550506001600a555050505050505050505050565b336001600160a01b03831614156120fd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a3d565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6002600a54141561218c5760405162461bcd60e51b8152600401610a3d90614c37565b6002600a5560008381526011602052604090208054339190849081106121c257634e487b7160e01b600052603260045260246000fd5b60009182526020909120600260039092020101546001600160a01b0316141561223f5760405162461bcd60e51b815260206004820152602960248201527f417a756b693a2074686520757365722063616e6e6f74206163636570742068696044820152681cc81bdddb88189a5960ba1b6064820152608401610a3d565b61226d335b6001600160a01b0316600090815260036020908152604080832030845290915290205460ff1690565b61227c5761227c306001612092565b6122e930637921219560e11b3360008781526011602052604090208054879081106122b757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600260039092020101546040516113d392916001600160a01b03169089908890602401614960565b6000838152601160205260409020805461238b91908490811061231c57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010154826123399190614cc9565b600085815260116020526040902080548590811061236757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600390910201600201546001600160a01b03163386612de7565b60008381526011602052604090208054829190849081106123bc57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000160008282546123dc9190614ce8565b9091555050600083815260116020526040902080548390811061240f57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600001546000141561255f576000838152601160205260409020805461244590600190614ce8565b8154811061246357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016011600085815260200190815260200160002083815481106124a357634e487b7160e01b600052603260045260246000fd5b600091825260208083208454600390930201918255600180850154908301556002938401549390910180546001600160a01b0319166001600160a01b039094169390931790925584815260119091526040902080548061251357634e487b7160e01b600052603160045260246000fd5b600082815260208082206003600019909401938402018281556001810183905560020180546001600160a01b031916905591909255848252601181526040808320546012909252909120555b50506001600a5550565b6000610a797f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a683611cdb565b600082815260016020819052604090912001546125b28133612cb1565b61113e8383612d80565b826125c733866109d5565b101561262a5760405162461bcd60e51b815260206004820152602c60248201527f417a756b693a20796f7520646f206e6f74206861766520656e6f75676820746f60448201526b1ad95b9cc81d1bc81cd95b1b60a21b6064820152608401610a3d565b61263333612244565b61264257612642306001612092565b600060405180608001604052808581526020018481526020016126623390565b6001600160a01b0390811682528481166020928301526000888152600f8352604080822080546001818101835582855286852088516004909302019182558787015190820155828701516002820180549187166001600160a01b03199283161790556060880151600390920180549290961691161790935589825291546010909352205590506126ef3390565b6001600160a01b0316857fce55bfae73b3c55d09c9fb6723466656ecb31fc2f7c5b90c296456857480c88c8686604051612733929190918252602082015260400190565b60405180910390a35050505050565b6000546001600160a01b0316331461276c5760405162461bcd60e51b8152600401610a3d90614b05565b60646127788385614c91565b106127df5760405162461bcd60e51b815260206004820152603160248201527f417a756b693a20746f74616c20636f6d6d697373696f6e732073686f756c642060448201527006265206c6f776572207468616e2031303607c1b6064820152608401610a3d565b600b80546001600160a01b0319166001600160a01b039590951694909417909355600c91909155600d556009805460ff1916911515919091179055565b60095460009060ff1680612834575061283433612569565b905090565b6001600160a01b0385163314806128555750612855853361091d565b6128b35760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610a3d565b610e2885858585856133d9565b6000546001600160a01b031633146128ea5760405162461bcd60e51b8152600401610a3d90614b05565b6001600160a01b03811661294f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3d565b6129588161321f565b50565b60006128346134ec565b60006001600160e01b03198216636cdb3d1360e11b148061299657506001600160e01b031982166303a24d0760e21b145b80610a795750610a79826135e2565b6129b184848484613617565b60005b8351811015610e285733600e60008684815181106129e257634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080612a2690614da9565b90506129b4565b8034111561295857600033612a428334614ce8565b604051600081818185875af1925050503d8060008114612a7e576040519150601f19603f3d011682016040523d82523d6000602084013e612a83565b606091505b5050905080612aa45760405162461bcd60e51b8152600401610a3d90614b3a565b7f05b5d46649ab2015d3a08705cbaa391e094d9594c393ce89d3afffe960744da133612ad08434614ce8565b604080516001600160a01b03909316835260208301919091520160405180910390a15050565b8151835114612b175760405162461bcd60e51b8152600401610a3d90614b64565b6001600160a01b038416612b3d5760405162461bcd60e51b8152600401610a3d90614a76565b3360005b8451811015612c43576000858281518110612b6c57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000858381518110612b9857634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526002835260408082206001600160a01b038e168352909352919091205490915081811015612be95760405162461bcd60e51b8152600401610a3d90614abb565b60008381526002602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290612c28908490614c91565b9250508190555050505080612c3c90614da9565b9050612b41565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612c939291906149b6565b60405180910390a4612ca98187878787876136b6565b505050505050565b612cbb8282611cdb565b6111bd57612cd3816001600160a01b03166014613821565b612cde836020613821565b604051602001612cef929190614848565b60408051601f198184030181529082905262461bcd60e51b8252610a3d916004016149e4565b612d1f8282611cdb565b6111bd5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b612d8a8282611cdb565b156111bd5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006064600c5486612df99190614cc9565b612e039190614ca9565b905060006064600d5487612e179190614cc9565b612e219190614ca9565b9050600081612e308489614ce8565b612e3a9190614ce8565b90506000856001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e89576040519150601f19603f3d011682016040523d82523d6000602084013e612e8e565b606091505b5050905080612eaf5760405162461bcd60e51b8152600401610a3d90614b3a565b856001600160a01b0316876001600160a01b0316867f07f87664c10527a8207b443cccf57f3c20f25bd1165eeae416be79890a35892c85604051612ef591815260200190565b60405180910390a48215612fd7576000858152600e60205260408082205490516001600160a01b039091169085908381818185875af1925050503d8060008114612f5b576040519150601f19603f3d011682016040523d82523d6000602084013e612f60565b606091505b5050905080612f815760405162461bcd60e51b8152600401610a3d90614b3a565b6000868152600e60209081526040918290205491518681526001600160a01b03928316928b169189917f802713d7f9cc0dcd6072902b48c61c206c34d6ca5f5288b580a6f86f9c9fe150910160405180910390a4505b831561309957600b546040516000916001600160a01b03169086908381818185875af1925050503d806000811461302a576040519150601f19603f3d011682016040523d82523d6000602084013e61302f565b606091505b50509050806130505760405162461bcd60e51b8152600401610a3d90614b3a565b600b546040518681526001600160a01b03918216918a169088907f9577cd5ef459a0bf97b597490f08f1e93e995b9394e4c577932db36e71c4500c9060200160405180910390a4505b5050505050505050565b6001600160a01b0382163b6130fa5760405162461bcd60e51b815260206004820152601b60248201527f417a756b693a2063616c6c20746f206e6f6e2d636f6e747261637400000000006044820152606401610a3d565b600080836001600160a01b031683604051613115919061482c565b6000604051808303816000865af19150503d8060008114613152576040519150601f19603f3d011682016040523d82523d6000602084013e613157565b606091505b5091509150816131a95760405162461bcd60e51b815260206004820152601c60248201527f417a756b693a206c6f772d6c6576656c2063616c6c206661696c6564000000006044820152606401610a3d565b805115611a0b57808060200190518101906131c49190614609565b611a0b5760405162461bcd60e51b815260206004820152602660248201527f417a756b693a204552433230206f7065726174696f6e20646964206e6f7420736044820152651d58d8d9595960d21b6064820152608401610a3d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000838152600e6020526040902080546001600160a01b03191633179055611a0b84848484613a09565b600880549060006132a983614da9565b909155505060085460009081526005602052604090205461329957565b604080517f286c81460df074c46ce5aeb2d5be03f72c20e6c506d2bae9048ed617d90c3dba60208201529081018c9052606081018b9052608081018a905260a0810189905260c0810188905260e081018790526001600160a01b0380871661010083015261012082018690528416610140820152600090613360906101600160405160208183030381529060405280519060200120613a3e565b9050600061336e8285613a8c565b9050826001600160a01b0316816001600160a01b0316146133ca5760405162461bcd60e51b8152602060048201526016602482015275417a756b693a2077726f6e67207369676e617475726560501b6044820152606401610a3d565b50505050505050505050505050565b6001600160a01b0384166133ff5760405162461bcd60e51b8152600401610a3d90614a76565b60008381526002602090815260408083206001600160a01b03891684529091529020543390838110156134445760405162461bcd60e51b8152600401610a3d90614abb565b60008581526002602090815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290613483908490614c91565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46134e3828888888888613aa8565b50505050505050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561353b57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b90565b60006001600160e01b03198216637965db0b60e01b1480610a7957506301ffc9a760e01b6001600160e01b0319831614610a79565b61362384848484613b72565b60005b8351811015610e285782818151811061364f57634e487b7160e01b600052603260045260246000fd5b60200260200101516005600086848151811061367b57634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546136a09190614c91565b909155506136af905081614da9565b9050613626565b6001600160a01b0384163b15612ca95760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906136fa90899089908890889088906004016148bd565b602060405180830381600087803b15801561371457600080fd5b505af1925050508015613744575060408051601f3d908101601f191682019092526137419181019061467b565b60015b6137f157613750614df0565b806308c379a0141561378a5750613765614e07565b80613770575061378c565b8060405162461bcd60e51b8152600401610a3d91906149e4565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610a3d565b6001600160e01b0319811663bc197c8160e01b146134e35760405162461bcd60e51b8152600401610a3d906149f7565b60606000613830836002614cc9565b61383b906002614c91565b6001600160401b0381111561386057634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561388a576020820181803683370190505b509050600360fc1b816000815181106138b357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106138f057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000613914846002614cc9565b61391f906001614c91565b90505b60018111156139b3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061396157634e487b7160e01b600052603260045260246000fd5b1a60f81b82828151811061398557634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936139ac81614d2b565b9050613922565b508315613a025760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a3d565b9392505050565b613a1584848484613cda565b60008381526005602052604081208054849290613a33908490614c91565b909155505050505050565b6000610a79613a4b6134ec565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000613a9b8585613d94565b91509150611b6a81613e04565b6001600160a01b0384163b15612ca95760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190613aec908990899088908890889060040161491b565b602060405180830381600087803b158015613b0657600080fd5b505af1925050508015613b36575060408051601f3d908101601f19168201909252613b339181019061467b565b60015b613b4257613750614df0565b6001600160e01b0319811663f23a6e6160e01b146134e35760405162461bcd60e51b8152600401610a3d906149f7565b6001600160a01b038416613b985760405162461bcd60e51b8152600401610a3d90614bf6565b8151835114613bb95760405162461bcd60e51b8152600401610a3d90614b64565b3360005b8451811015613c7257838181518110613be657634e487b7160e01b600052603260045260246000fd5b602002602001015160026000878481518110613c1257634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254613c5a9190614c91565b90915550819050613c6a81614da9565b915050613bbd565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613cc39291906149b6565b60405180910390a4610e28816000878787876136b6565b6001600160a01b038416613d005760405162461bcd60e51b8152600401610a3d90614bf6565b60008381526002602090815260408083206001600160a01b0388168452909152812080543392859291613d34908490614c91565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e2881600087878787613aa8565b600080825160411415613dcb5760208301516040840151606085015160001a613dbf87828585614005565b94509450505050613dfd565b825160401415613df55760208301516040840151613dea8683836140f2565b935093505050613dfd565b506000905060025b9250929050565b6000816004811115613e2657634e487b7160e01b600052602160045260246000fd5b1415613e2f5750565b6001816004811115613e5157634e487b7160e01b600052602160045260246000fd5b1415613e9f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a3d565b6002816004811115613ec157634e487b7160e01b600052602160045260246000fd5b1415613f0f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a3d565b6003816004811115613f3157634e487b7160e01b600052602160045260246000fd5b1415613f8a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a3d565b6004816004811115613fac57634e487b7160e01b600052602160045260246000fd5b14156129585760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610a3d565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561403c57506000905060036140e9565b8460ff16601b1415801561405457508460ff16601c14155b1561406557506000905060046140e9565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156140b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166140e2576000600192509250506140e9565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b0161411387828885614005565b935093505050935093915050565b80356001600160a01b038116811461413857600080fd5b919050565b600082601f83011261414d578081fd5b8135602061415a82614c6e565b6040516141678282614d7d565b8381528281019150858301600585901b87018401881015614186578586fd5b855b858110156141a457813584529284019290840190600101614188565b5090979650505050505050565b600082601f8301126141c1578081fd5b81356001600160401b038111156141da576141da614dda565b6040516141f1601f8301601f191660200182614d7d565b818152846020838601011115614205578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215614230578081fd5b613a0282614121565b6000806040838503121561424b578081fd5b61425483614121565b915061426260208401614121565b90509250929050565b600080600080600060a08688031215614282578081fd5b61428b86614121565b945061429960208701614121565b935060408601356001600160401b03808211156142b4578283fd5b6142c089838a0161413d565b945060608801359150808211156142d5578283fd5b6142e189838a0161413d565b935060808801359150808211156142f6578283fd5b50614303888289016141b1565b9150509295509295909350565b600080600080600060a08688031215614327578081fd5b61433086614121565b945061433e60208701614121565b9350604086013592506060860135915060808601356001600160401b03811115614366578182fd5b614303888289016141b1565b60008060408385031215614384578182fd5b61438d83614121565b915060208301356001600160401b038111156143a7578182fd5b6143b38582860161413d565b9150509250929050565b600080600080608085870312156143d2578384fd5b6143db85614121565b935060208501356001600160401b03808211156143f6578485fd5b6144028883890161413d565b94506040870135915080821115614417578384fd5b6144238883890161413d565b93506060870135915080821115614438578283fd5b50614445878288016141b1565b91505092959194509250565b60008060408385031215614463578182fd5b61446c83614121565b9150602083013561447c81614e90565b809150509250929050565b60008060408385031215614499578182fd5b6144a283614121565b946020939093013593505050565b600080600080608085870312156144c5578182fd5b6144ce85614121565b9350602085013592506040850135915060608501356144ec81614e90565b939692955090935050565b6000806000806080858703121561450c578182fd5b61451585614121565b9350602085013592506040850135915060608501356001600160401b0381111561453d578182fd5b614445878288016141b1565b6000806040838503121561455b578182fd5b82356001600160401b0380821115614571578384fd5b818501915085601f830112614584578384fd5b8135602061459182614c6e565b60405161459e8282614d7d565b8381528281019150858301600585901b870184018b10156145bd578889fd5b8896505b848710156145e6576145d281614121565b8352600196909601959183019183016145c1565b50965050860135925050808211156145fc578283fd5b506143b38582860161413d565b60006020828403121561461a578081fd5b8151613a0281614e90565b600060208284031215614636578081fd5b5035919050565b6000806040838503121561464f578182fd5b8235915061426260208401614121565b600060208284031215614670578081fd5b8135613a0281614e9e565b60006020828403121561468c578081fd5b8151613a0281614e9e565b600080604083850312156146a9578182fd5b50508035926020909101359150565b6000806000606084860312156146cc578081fd5b505081359360208301359350604090920135919050565b600080600080608085870312156146f8578182fd5b84359350602085013592506040850135915061471660608601614121565b905092959194509250565b60008060008060008060008060008060006101608c8e031215614742578889fd5b8b359a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945061477c60e08d01614121565b93506101008c013592506101208c01356001600160401b0381111561479f578283fd5b6147ab8e828f016141b1565b9250506101408c013590509295989b509295989b9093969950565b6000815180845260208085019450808401835b838110156147f5578151875295820195908201906001016147d9565b509495945050505050565b60008151808452614818816020860160208601614cff565b601f01601f19169290920160200192915050565b6000825161483e818460208701614cff565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614880816017850160208801614cff565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516148b1816028840160208801614cff565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906148e9908301866147c6565b82810360608401526148fb81866147c6565b9050828103608084015261490f8185614800565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061495590830184614800565b979650505050505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260029082015261060f60f31b60c082015260e00190565b602081526000613a0260208301846147c6565b6040815260006149c960408301856147c6565b82810360208401526149db81856147c6565b95945050505050565b602081526000613a026020830184614800565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526019908201527f417a756b693a207061796d656e7420697320746f6f206c6f7700000000000000604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b6020808252602a908201527f4552433131353559757a753a206d7573742068617665206d696e74657220726f6040820152691b19481d1bc81b5a5b9d60b21b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60006001600160401b03821115614c8757614c87614dda565b5060051b60200190565b60008219821115614ca457614ca4614dc4565b500190565b600082614cc457634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614ce357614ce3614dc4565b500290565b600082821015614cfa57614cfa614dc4565b500390565b60005b83811015614d1a578181015183820152602001614d02565b83811115611a0b5750506000910152565b600081614d3a57614d3a614dc4565b506000190190565b600181811c90821680614d5657607f821691505b60208210811415614d7757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b0381118282101715614da257614da2614dda565b6040525050565b6000600019821415614dbd57614dbd614dc4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156135df57600481823e5160e01c90565b600060443d1015614e155790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614e4457505050505090565b8285019150815181811115614e5c5750505050505090565b843d8701016020828501011115614e765750505050505090565b614e8560208286010187614d7d565b509095945050505050565b801515811461295857600080fd5b6001600160e01b03198116811461295857600080fdfea264697066735822122044b84d2f52705becb321ed91adb05097bd954bc9b8c45356e9812066baa19d5864736f6c634300080400330000000000000000000000005c87d2ce2dbdf2bec169b8702830469e452b279c0000000000000000000000005c87d2ce2dbdf2bec169b8702830469e452b279c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000001552454d4f49204e4654204d41524b4554504c4143450000000000000000000000000000000000000000000000000000000000000000000000000000000000000352454d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f72656d6f692e6172742f77702d6a736f6e2f777073632f76312f6e6674313135352f313835342f7b69647d00000000000000000000000000