[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "OneAdminRequired", "type": "error" }, { "inputs": [], "name": "TooHighRoyaltyPercentage", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newURI", "type": "string" } ], "name": "ContractUriChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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": false, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "percentage", "type": "uint256" } ], "name": "RoyaltyDataChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "RoyaltyUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string[]", "name": "", "type": "string[]" } ], "name": "ScriptUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenId", "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": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyReceiver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "scriptURI", "outputs": [ { "internalType": "string[]", "name": "", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseUri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint256", "name": "percentage", "type": "uint256" } ], "name": "setRoyaltyData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string[]", "name": "newScriptURI", "type": "string[]" } ], "name": "setScriptURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "setTokenURI", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "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": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162002b8438038062002b8483398101604081905262000034916200033a565b8181600062000044838262000433565b50600162000053828262000433565b506200006591506000905033620000a9565b50620000927f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620000a9565b50620000a1336101f4620000e6565b5050620004ff565b600080620000b8848462000169565b90508015620000dd576000848152600960205260409020620000db90846200021b565b505b90505b92915050565b61271081106200010957604051632d6f5fb960e01b815260040160405180910390fd5b601180546001600160a01b0319166001600160a01b038416908117909155601282905560408051918252602082018390527f1db9783d526846ace427dd8fdcd789065981bf69fbf3d1d75e5d91c7110fe3bf910160405180910390a15050565b60008281526008602090815260408083206001600160a01b038516845290915281205460ff16620002125760008381526008602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620001c93390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620000e0565b506000620000e0565b6000620000dd836001600160a01b03841660008181526001830160205260408120546200021257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620000e0565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200029d57600080fd5b81516001600160401b0380821115620002ba57620002ba62000275565b604051601f8301601f19908116603f01168101908282118183101715620002e557620002e562000275565b816040528381526020925086838588010111156200030257600080fd5b600091505b8382101562000326578582018301518183018401529082019062000307565b600093810190920192909252949350505050565b600080604083850312156200034e57600080fd5b82516001600160401b03808211156200036657600080fd5b62000374868387016200028b565b935060208501519150808211156200038b57600080fd5b506200039a858286016200028b565b9150509250929050565b600181811c90821680620003b957607f821691505b602082108103620003da57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042e57600081815260208120601f850160051c81016020861015620004095750805b601f850160051c820191505b818110156200042a5782815560010162000415565b5050505b505050565b81516001600160401b038111156200044f576200044f62000275565b6200046781620004608454620003a4565b84620003e0565b602080601f8311600181146200049f5760008415620004865750858301515b600019600386901b1c1916600185901b1785556200042a565b600085815260208120601f198616915b82811015620004d057888601518255948401946001909101908401620004af565b5085821015620004ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612675806200050f6000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c806370a082311161013b578063a22cb465116100b8578063d0def5211161007c578063d0def521146104e9578063d547741f146104fc578063e3d61eb31461050f578063e8a3d48514610522578063e985e9c51461052a57600080fd5b8063a22cb4651461048a578063a961a8a51461049d578063b88d4fde146104b0578063c87b56dd146104c3578063ca15c873146104d657600080fd5b806391d14854116100ff57806391d1485414610441578063938e3d7b1461045457806395d89b41146104675780639fbc87131461046f578063a217fddf1461048257600080fd5b806370a082311461040157806375794a3c146104145780638a71bb2d1461041d5780638da5cb5b146104265780639010d07c1461042e57600080fd5b80632f2ff15d116101c95780634bb309121161018d5780634bb30912146103ab5780634f6ccce7146103c057806355f804b3146103d35780636352211e146103e65780636c0360eb146103f957600080fd5b80632f2ff15d1461034c5780632f745c591461035f57806336568abe1461037257806342842e0e1461038557806342966c681461039857600080fd5b8063162094c411610210578063162094c4146102bf57806318160ddd146102d257806323b872dd146102e4578063248a9ca3146102f75780632a55205a1461031a57600080fd5b806301ffc9a71461024257806306fdde031461026a578063081812fc1461027f578063095ea7b3146102aa575b600080fd5b610255610250366004611d71565b61053d565b60405190151581526020015b60405180910390f35b6102726105a4565b6040516102619190611dde565b61029261028d366004611df1565b610636565b6040516001600160a01b039091168152602001610261565b6102bd6102b8366004611e26565b61065f565b005b6102bd6102cd366004611f0f565b61066e565b600d545b604051908152602001610261565b6102bd6102f2366004611f56565b6106a7565b6102d6610305366004611df1565b60009081526008602052604090206001015490565b61032d610328366004611f92565b610737565b604080516001600160a01b039093168352602083019190915201610261565b6102bd61035a366004611fb4565b610779565b6102d661036d366004611e26565b61079e565b6102bd610380366004611fb4565b610803565b6102bd610393366004611f56565b610836565b6102bd6103a6366004611df1565b610851565b6103b361085d565b6040516102619190611fd7565b6102d66103ce366004611df1565b610936565b6102bd6103e1366004612039565b61098f565b6102926103f4366004611df1565b6109a6565b6102726109b1565b6102d661040f36600461206e565b610a3f565b6102d660135481565b6102d660125481565b610292610a87565b61029261043c366004611f92565b610a98565b61025561044f366004611fb4565b610ab7565b6102bd610462366004612089565b610ae2565b610272610b39565b601154610292906001600160a01b031681565b6102d6600081565b6102bd6104983660046120fb565b610b48565b6102bd6104ab366004611e26565b610b53565b6102bd6104be366004612137565b610b68565b6102726104d1366004611df1565b610b7f565b6102d66104e4366004611df1565b610b8a565b6102bd6104f73660046121b3565b610ba1565b6102bd61050a366004611fb4565b610c04565b6102bd61051d3660046121eb565b610c29565b610272610c80565b6102556105383660046122ae565b610c8d565b600063a86517a160e01b6001600160e01b031983161480610562575061056282610cbb565b80610571575061057182610cd1565b80610580575061058082610cf2565b8061058f575061058f82610d17565b8061059e575061059e82610d67565b92915050565b6060600080546105b3906122d8565b80601f01602080910402602001604051908101604052809291908181526020018280546105df906122d8565b801561062c5780601f106106015761010080835404028352916020019161062c565b820191906000526020600020905b81548152906001019060200180831161060f57829003601f168201915b5050505050905090565b600061064182610d8c565b506000828152600460205260409020546001600160a01b031661059e565b61066a828233610dc5565b5050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661069881610dd2565b6106a28383610ddf565b505050565b6001600160a01b0382166106d657604051633250574960e11b8152600060048201526024015b60405180910390fd5b60006106e3838333610e30565b9050836001600160a01b0316816001600160a01b031614610731576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106cd565b50505050565b60008061074384610d8c565b506011546012546001600160a01b03909116925061271090610766908590612328565b610770919061233f565b90509250929050565b60008281526008602052604090206001015461079481610dd2565b6107318383610e45565b60006107a983610a3f565b82106107da5760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016106cd565b506001600160a01b03919091166000908152600b60209081526040808320938352929052205490565b6001600160a01b038116331461082c5760405163334bd91960e11b815260040160405180910390fd5b6106a28282610e7a565b6106a283838360405180602001604052806000815250610b68565b61066a60008233610e30565b60606006805480602002602001604051908101604052809291908181526020016000905b8282101561092d5783829060005260206000200180546108a0906122d8565b80601f01602080910402602001604051908101604052809291908181526020018280546108cc906122d8565b80156109195780601f106108ee57610100808354040283529160200191610919565b820191906000526020600020905b8154815290600101906020018083116108fc57829003601f168201915b505050505081526020019060010190610881565b50505050905090565b6000610941600d5490565b821061096a5760405163295f44f760e21b815260006004820152602481018390526044016106cd565b600d828154811061097d5761097d612361565b90600052602060002001549050919050565b600061099a81610dd2565b60106106a283826123c5565b600061059e82610d8c565b601080546109be906122d8565b80601f01602080910402602001604051908101604052809291908181526020018280546109ea906122d8565b8015610a375780601f10610a0c57610100808354040283529160200191610a37565b820191906000526020600020905b815481529060010190602001808311610a1a57829003601f168201915b505050505081565b60006001600160a01b038216610a6b576040516322718ad960e21b8152600060048201526024016106cd565b506001600160a01b031660009081526003602052604090205490565b6000610a938180610a98565b905090565b6000828152600960205260408120610ab09083610ebb565b9392505050565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610aed81610dd2565b600f610afa838583612485565b507fe88f8427748def9baf1a4a6a9e77c6d7d2be8ba756acdf3d6e131fc83c1a39d38383604051610b2c929190612545565b60405180910390a1505050565b6060600180546105b3906122d8565b61066a338383610ec7565b6000610b5e81610dd2565b6106a28383610f66565b610b738484846106a7565b61073184848484610fe1565b606061059e8261110a565b600081815260096020526040812061059e90611206565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bcb81610dd2565b610bd783601354611210565b815115610bea57610bea60135483610ddf565b60138054906000610bfa83612574565b9190505550505050565b600082815260086020526040902060010154610c1f81610dd2565b6107318383610e7a565b610c3281611275565b8051610c45906006906020840190611c9e565b507f9538911740e5519a40db77fb5f637de0d56cdd804318d81ae270cc24fbd8479e81604051610c759190611fd7565b60405180910390a150565b600f80546109be906122d8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160e01b03191663152a902d60e11b1490565b60006001600160e01b0319821663780e9d6360e01b148061059e575061059e825b60006001600160e01b03198216632483248360e11b148061059e575061059e82610d67565b60006001600160e01b031982166380ac58cd60e01b1480610d4857506001600160e01b03198216635b5e139f60e01b145b8061059e57506301ffc9a760e01b6001600160e01b031983161461059e565b60006001600160e01b03198216635a05180f60e01b148061059e575061059e82611280565b6000818152600260205260408120546001600160a01b03168061059e57604051637e27328960e01b8152600481018490526024016106cd565b6106a283838360016112a5565b610ddc81336113ab565b50565b6000828152600a60205260409020610df782826123c5565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7906020015b60405180910390a15050565b6000610e3d8484846113e4565b949350505050565b600080610e5284846114b1565b90508015610ab0576000848152600960205260409020610e729084611545565b509392505050565b600082158015610e935750610e8f6000610b8a565b6001145b15610eb15760405163e457457360e01b815260040160405180910390fd5b610ab0838361155a565b6000610ab08383611587565b6001600160a01b038216610ef957604051630b61174360e31b81526001600160a01b03831660048201526024016106cd565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6127108110610f8857604051632d6f5fb960e01b815260040160405180910390fd5b601180546001600160a01b0319166001600160a01b038416908117909155601282905560408051918252602082018390527f1db9783d526846ace427dd8fdcd789065981bf69fbf3d1d75e5d91c7110fe3bf9101610e24565b6001600160a01b0383163b1561073157604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061102390339088908790879060040161258d565b6020604051808303816000875af192505050801561105e575060408051601f3d908101601f1916820190925261105b918101906125ca565b60015b6110c7573d80801561108c576040519150601f19603f3d011682016040523d82523d6000602084013e611091565b606091505b5080516000036110bf57604051633250574960e11b81526001600160a01b03851660048201526024016106cd565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461110357604051633250574960e11b81526001600160a01b03851660048201526024016106cd565b5050505050565b606061111582610d8c565b506000828152600a60205260408120805461112f906122d8565b80601f016020809104026020016040519081016040528092919081815260200182805461115b906122d8565b80156111a85780601f1061117d576101008083540402835291602001916111a8565b820191906000526020600020905b81548152906001019060200180831161118b57829003601f168201915b5050505050905060006111b96115b1565b905080516000036111cb575092915050565b8151156111fd5780826040516020016111e59291906125e7565b60405160208183030381529060405292505050919050565b610e3d846115c0565b600061059e825490565b6001600160a01b03821661123a57604051633250574960e11b8152600060048201526024016106cd565b600061124883836000610e30565b90506001600160a01b038116156106a2576040516339e3563760e11b8152600060048201526024016106cd565b600061066a81610dd2565b60006001600160e01b03198216637965db0b60e01b148061059e575061059e82610cbb565b80806112b957506001600160a01b03821615155b1561137b5760006112c984610d8c565b90506001600160a01b038316158015906112f55750826001600160a01b0316816001600160a01b031614155b801561130857506113068184610c8d565b155b156113315760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016106cd565b81156113795783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6113b58282610ab7565b61066a5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106cd565b6000806113f2858585611627565b90506001600160a01b03811661144f5761144a84600d80546000838152600e60205260408120829055600182018355919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50155565b611472565b846001600160a01b0316816001600160a01b031614611472576114728185611720565b6001600160a01b03851661148e57611489846117b1565b610e3d565b846001600160a01b0316816001600160a01b031614610e3d57610e3d8585611860565b60006114bd8383610ab7565b61153d5760008381526008602090815260408083206001600160a01b03861684529091529020805460ff191660011790556114f53390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161059e565b50600061059e565b6000610ab0836001600160a01b0384166118b0565b60008061156784846118f7565b90508015610ab0576000848152600960205260409020610e729084611964565b600082600001828154811061159e5761159e612361565b9060005260206000200154905092915050565b6060601080546105b3906122d8565b60606115cb82610d8c565b5060006115d66115b1565b905060008151116115f65760405180602001604052806000815250610ab0565b8061160084611979565b6040516020016116119291906125e7565b6040516020818303038152906040529392505050565b6000828152600260205260408120546001600160a01b039081169083161561165457611654818486611a0c565b6001600160a01b03811615611692576116716000856000806112a5565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156116c1576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061172b83610a3f565b6000838152600c602052604090205490915080821461177e576001600160a01b0384166000908152600b602090815260408083208584528252808320548484528184208190558352600c90915290208190555b506000918252600c602090815260408084208490556001600160a01b039094168352600b81528383209183525290812055565b600d546000906117c390600190612616565b6000838152600e6020526040812054600d80549394509092849081106117eb576117eb612361565b9060005260206000200154905080600d838154811061180c5761180c612361565b6000918252602080832090910192909255828152600e9091526040808220849055858252812055600d80548061184457611844612629565b6001900381819060005260206000200160009055905550505050565b6000600161186d84610a3f565b6118779190612616565b6001600160a01b039093166000908152600b602090815260408083208684528252808320859055938252600c9052919091209190915550565b600081815260018301602052604081205461153d5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561059e565b60006119038383610ab7565b1561153d5760008381526008602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161059e565b6000610ab0836001600160a01b038416611a70565b6060600061198683611b63565b600101905060008167ffffffffffffffff8111156119a6576119a6611e50565b6040519080825280601f01601f1916602001820160405280156119d0576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846119da57509392505050565b611a17838383611c3b565b6106a2576001600160a01b038316611a4557604051637e27328960e01b8152600481018290526024016106cd565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016106cd565b60008181526001830160205260408120548015611b59576000611a94600183612616565b8554909150600090611aa890600190612616565b9050808214611b0d576000866000018281548110611ac857611ac8612361565b9060005260206000200154905080876000018481548110611aeb57611aeb612361565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611b1e57611b1e612629565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061059e565b600091505061059e565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611ba25772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611bce576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611bec57662386f26fc10000830492506010015b6305f5e1008310611c04576305f5e100830492506008015b6127108310611c1857612710830492506004015b60648310611c2a576064830492506002015b600a831061059e5760010192915050565b60006001600160a01b03831615801590610e3d5750826001600160a01b0316846001600160a01b03161480611c755750611c758484610c8d565b80610e3d5750506000908152600460205260409020546001600160a01b03908116911614919050565b828054828255906000526020600020908101928215611ce4579160200282015b82811115611ce45782518290611cd490826123c5565b5091602001919060010190611cbe565b50611cf0929150611cf4565b5090565b80821115611cf0576000611d088282611d11565b50600101611cf4565b508054611d1d906122d8565b6000825580601f10611d2d575050565b601f016020900490600052602060002090810190610ddc91905b80821115611cf05760008155600101611d47565b6001600160e01b031981168114610ddc57600080fd5b600060208284031215611d8357600080fd5b8135610ab081611d5b565b60005b83811015611da9578181015183820152602001611d91565b50506000910152565b60008151808452611dca816020860160208601611d8e565b601f01601f19169290920160200192915050565b602081526000610ab06020830184611db2565b600060208284031215611e0357600080fd5b5035919050565b80356001600160a01b0381168114611e2157600080fd5b919050565b60008060408385031215611e3957600080fd5b611e4283611e0a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e8f57611e8f611e50565b604052919050565b600067ffffffffffffffff831115611eb157611eb1611e50565b611ec4601f8401601f1916602001611e66565b9050828152838383011115611ed857600080fd5b828260208301376000602084830101529392505050565b600082601f830112611f0057600080fd5b610ab083833560208501611e97565b60008060408385031215611f2257600080fd5b82359150602083013567ffffffffffffffff811115611f4057600080fd5b611f4c85828601611eef565b9150509250929050565b600080600060608486031215611f6b57600080fd5b611f7484611e0a565b9250611f8260208501611e0a565b9150604084013590509250925092565b60008060408385031215611fa557600080fd5b50508035926020909101359150565b60008060408385031215611fc757600080fd5b8235915061077060208401611e0a565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561202c57603f1988860301845261201a858351611db2565b94509285019290850190600101611ffe565b5092979650505050505050565b60006020828403121561204b57600080fd5b813567ffffffffffffffff81111561206257600080fd5b610e3d84828501611eef565b60006020828403121561208057600080fd5b610ab082611e0a565b6000806020838503121561209c57600080fd5b823567ffffffffffffffff808211156120b457600080fd5b818501915085601f8301126120c857600080fd5b8135818111156120d757600080fd5b8660208285010111156120e957600080fd5b60209290920196919550909350505050565b6000806040838503121561210e57600080fd5b61211783611e0a565b91506020830135801515811461212c57600080fd5b809150509250929050565b6000806000806080858703121561214d57600080fd5b61215685611e0a565b935061216460208601611e0a565b925060408501359150606085013567ffffffffffffffff81111561218757600080fd5b8501601f8101871361219857600080fd5b6121a787823560208401611e97565b91505092959194509250565b600080604083850312156121c657600080fd5b6121cf83611e0a565b9150602083013567ffffffffffffffff811115611f4057600080fd5b600060208083850312156121fe57600080fd5b823567ffffffffffffffff8082111561221657600080fd5b818501915085601f83011261222a57600080fd5b81358181111561223c5761223c611e50565b8060051b61224b858201611e66565b918252838101850191858101908984111561226557600080fd5b86860192505b838310156122a1578235858111156122835760008081fd5b6122918b89838a0101611eef565b835250918601919086019061226b565b9998505050505050505050565b600080604083850312156122c157600080fd5b6122ca83611e0a565b915061077060208401611e0a565b600181811c908216806122ec57607f821691505b60208210810361230c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761059e5761059e612312565b60008261235c57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b601f8211156106a257600081815260208120601f850160051c8101602086101561239e5750805b601f850160051c820191505b818110156123bd578281556001016123aa565b505050505050565b815167ffffffffffffffff8111156123df576123df611e50565b6123f3816123ed84546122d8565b84612377565b602080601f83116001811461242857600084156124105750858301515b600019600386901b1c1916600185901b1785556123bd565b600085815260208120601f198616915b8281101561245757888601518255948401946001909101908401612438565b50858210156124755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83111561249d5761249d611e50565b6124b1836124ab83546122d8565b83612377565b6000601f8411600181146124e557600085156124cd5750838201355b600019600387901b1c1916600186901b178355611103565b600083815260209020601f19861690835b8281101561251657868501358255602094850194600190920191016124f6565b50868210156125335760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006001820161258657612586612312565b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906125c090830184611db2565b9695505050505050565b6000602082840312156125dc57600080fd5b8151610ab081611d5b565b600083516125f9818460208801611d8e565b83519083019061260d818360208801611d8e565b01949350505050565b8181038181111561059e5761059e612312565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f4c1de0d020739e61a916a82eaddac7a1d94f090bcc0deff3d47a3ea85ebbd6e64736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000753706c79747978000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008507265626c696b73000000000000000000000000000000000000000000000000