[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "metadataId", "type": "string" } ], "name": "ChangedMetadataId", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "_metadataId", "type": "string" } ], "name": "HeroCreated", "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": "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": "BREED_HERO_FACTORY_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SWAP_HERO_FACTORY_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": "to", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "approveTokens", "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": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_metadataId", "type": "string" } ], "name": "breed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getMetadata", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "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": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "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": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "setBreedHeroFactory", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_metadataId", "type": "string" } ], "name": "setMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "setSwapHeroFactory", "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" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_offset", "type": "uint256" }, { "internalType": "uint256", "name": "_limit", "type": "uint256" } ], "name": "walletOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "walletOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50604080518082018252600b81526a446f67656f6e204865726f60a81b6020808301918252835180850190945260058452640889e8e8a960db1b908401528151919291839183916200006691600091620002c6565b5080516200007c906001906020840190620002c6565b50505062000099620000936200010760201b60201c565b6200010b565b50620000a990506000336200015d565b620000d57f1f0d41792631b65c9161642464de37aa2ea751587068cb030ac5a414460ffda8336200015d565b620001017f246634e15924b83dfeb3197a70dc2849fce6c8ae5444240c2fec7cb7ce580a7e336200015d565b620003a9565b3390565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200016982826200016d565b5050565b620001848282620001b060201b620013e21760201c565b6000828152600b60209081526040909120620001ab9183906200146862000254821b17901c565b505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1662000169576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200026b836001600160a01b03841662000274565b90505b92915050565b6000818152600183016020526040812054620002bd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200026e565b5060006200026e565b828054620002d4906200036c565b90600052602060002090601f016020900481019282620002f8576000855562000343565b82601f106200031357805160ff191683800117855562000343565b8280016001018555821562000343579182015b828111156200034357825182559160200191906001019062000326565b506200035192915062000355565b5090565b5b8082111562000351576000815560010162000356565b600181811c908216806200038157607f821691505b60208210811415620003a357634e487b7160e01b600052602260045260246000fd5b50919050565b612fbf80620003b96000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80636352211e1161013b578063a9182ff5116100b8578063ca15c8731161007c578063ca15c87314610538578063ce66ce6b1461054b578063d547741f1461055e578063e985e9c514610571578063f2fde38b146105ad57600080fd5b8063a9182ff5146104c5578063af39bf1d146104ec578063b88d4fde146104ff578063befd87cd14610512578063c87b56dd1461052557600080fd5b806391d14854116100ff57806391d148541461047c57806395d89b411461048f578063a217fddf14610497578063a22cb4651461049f578063a574cea4146104b257600080fd5b80636352211e1461042a57806370a082311461043d578063715018a6146104505780638da5cb5b146104585780639010d07c1461046957600080fd5b80632e4dab29116101c957806342966c681161018d57806342966c68146103cb578063438b6300146103de5780634f6ccce7146103f157806355f804b314610404578063593aa2831461041757600080fd5b80632e4dab291461036c5780632f2ff15d1461037f5780632f745c591461039257806336568abe146103a557806342842e0e146103b857600080fd5b80631c29b690116102105780631c29b690146102dc57806323b872dd14610303578063248a9ca31461031657806327a8d7ab1461033957806328cfbd461461035957600080fd5b806301ffc9a71461024d57806306fdde0314610275578063081812fc1461028a578063095ea7b3146102b557806318160ddd146102ca575b600080fd5b61026061025b366004612b02565b6105c0565b60405190151581526020015b60405180910390f35b61027d6105d1565b60405161026c9190612d07565b61029d610298366004612aa7565b610663565b6040516001600160a01b03909116815260200161026c565b6102c86102c3366004612a4c565b6106fd565b005b6008545b60405190815260200161026c565b6102ce7f1f0d41792631b65c9161642464de37aa2ea751587068cb030ac5a414460ffda881565b6102c86103113660046128f2565b610813565b6102ce610324366004612aa7565b6000908152600a602052604090206001015490565b61034c610347366004612a75565b610845565b60405161026c9190612cc3565b6102c8610367366004612871565b61096a565b6102ce61037a366004612a0b565b6109c9565b6102c861038d366004612abf565b610ada565b6102ce6103a0366004612a4c565b610b00565b6102c86103b3366004612abf565b610b96565b6102c86103c63660046128f2565b610c14565b6102c86103d9366004612aa7565b610c2f565b61034c6103ec366004612825565b610cc0565b6102ce6103ff366004612aa7565b610d7d565b6102c8610412366004612b3a565b610e1e565b6102c8610425366004612b6c565b610e5b565b61029d610438366004612aa7565b610ecb565b6102ce61044b366004612825565b610f42565b6102c8610fc9565b600c546001600160a01b031661029d565b61029d610477366004612ae1565b610fff565b61026061048a366004612abf565b611017565b61027d611042565b6102ce600081565b6102c86104ad3660046129d1565b611051565b61027d6104c0366004612aa7565b61105c565b6102ce7f246634e15924b83dfeb3197a70dc2849fce6c8ae5444240c2fec7cb7ce580a7e81565b6102c86104fa366004612825565b6110fe565b6102c861050d36600461292d565b611152565b6102c8610520366004612825565b61118a565b61027d610533366004612aa7565b6111de565b6102ce610546366004612aa7565b6112b8565b6102c8610559366004612986565b6112cf565b6102c861056c366004612abf565b611324565b61026061057f36600461283f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102c86105bb366004612825565b61134a565b60006105cb8261147d565b92915050565b6060600080546105e090612ec7565b80601f016020809104026020016040519081016040528092919081815260200182805461060c90612ec7565b80156106595780601f1061062e57610100808354040283529160200191610659565b820191906000526020600020905b81548152906001019060200180831161063c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166106e15760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061070882610ecb565b9050806001600160a01b0316836001600160a01b031614156107765760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106d8565b336001600160a01b03821614806107925750610792813361057f565b6108045760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d8565b61080e83836114a2565b505050565b61081e335b82611510565b61083a5760405162461bcd60e51b81526004016106d890612da1565b61080e838383611607565b6060600061085285610f42565b905080158061086a5750610867600182612e6d565b84115b15610885575050604080516000815260208101909152610963565b60006108918583612e6d565b90508084111561089f578093505b600080856001600160401b038111156108c857634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156108f1578160200160208202803683370190505b509050865b6109008789612e22565b81101561095c576109118982610b00565b82848151811061093157634e487b7160e01b600052603260045260246000fd5b60209081029190910101528261094681612f02565b935050808061095490612f02565b9150506108f6565b5093505050505b9392505050565b815160005b8181146109c157600084828151811061099857634e487b7160e01b600052603260045260246000fd5b602002602001015190506109ae87878387611152565b50806109b981612f02565b91505061096f565b505050505050565b60006109f57f1f0d41792631b65c9161642464de37aa2ea751587068cb030ac5a414460ffda833611017565b80610a255750610a257f246634e15924b83dfeb3197a70dc2849fce6c8ae5444240c2fec7cb7ce580a7e33611017565b610a715760405162461bcd60e51b815260206004820152601960248201527f4d7573742068617665206272656564206865726f20726f6c650000000000000060448201526064016106d8565b6000610a7b6117ae565b9050610a8784826117c5565b610a918184611913565b80846001600160a01b03167f7d647992a58314ebc9a217d3404d368856d2f2029bb4d567d776b5644b76ad6485604051610acb9190612d07565b60405180910390a39392505050565b6000828152600a6020526040902060010154610af68133611a45565b61080e8383611aa9565b6000610b0b83610f42565b8210610b6d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106d8565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6001600160a01b0381163314610c065760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106d8565b610c108282611acb565b5050565b61080e83838360405180602001604052806000815250611152565b610c3833610818565b610c9d5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b60648201526084016106d8565b6000818152600e60205260408120610cb49161264a565b610cbd81611aed565b50565b60606000610ccd83610f42565b90506000816001600160401b03811115610cf757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d20578160200160208202803683370190505b50905060005b82811015610d7557610d388582610b00565b828281518110610d5857634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610d6d81612f02565b915050610d26565b509392505050565b6000610d8860085490565b8210610deb5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106d8565b60088281548110610e0c57634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b600c546001600160a01b03163314610e485760405162461bcd60e51b81526004016106d890612d6c565b8051610c1090600d906020840190612684565b600c546001600160a01b03163314610e855760405162461bcd60e51b81526004016106d890612d6c565b610e8f8282611913565b817fd1579b97a20531e3056de01386137f8870db1df2c7a24bcf056f6fe100505f3f82604051610ebf9190612d07565b60405180910390a25050565b6000818152600260205260408120546001600160a01b0316806105cb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106d8565b60006001600160a01b038216610fad5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106d8565b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03163314610ff35760405162461bcd60e51b81526004016106d890612d6c565b610ffd6000611b94565b565b6000828152600b602052604081206109639083611be6565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600180546105e090612ec7565b610c10338383611bf2565b6000818152600e6020526040902080546060919061107990612ec7565b80601f01602080910402602001604051908101604052809291908181526020018280546110a590612ec7565b80156110f25780601f106110c7576101008083540402835291602001916110f2565b820191906000526020600020905b8154815290600101906020018083116110d557829003601f168201915b50505050509050919050565b600c546001600160a01b031633146111285760405162461bcd60e51b81526004016106d890612d6c565b610cbd7f246634e15924b83dfeb3197a70dc2849fce6c8ae5444240c2fec7cb7ce580a7e82611cc1565b61115c3383611510565b6111785760405162461bcd60e51b81526004016106d890612da1565b61118484848484611ccb565b50505050565b600c546001600160a01b031633146111b45760405162461bcd60e51b81526004016106d890612d6c565b610cbd7f1f0d41792631b65c9161642464de37aa2ea751587068cb030ac5a414460ffda882611cc1565b6000818152600260205260409020546060906001600160a01b031661125d5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106d8565b6000611267611cfe565b905060008151116112875760405180602001604052806000815250610963565b8061129184611d0d565b6040516020016112a2929190612be2565b6040516020818303038152906040529392505050565b6000818152600b602052604081206105cb90611e26565b60005b815181101561080e5760008282815181106112fd57634e487b7160e01b600052603260045260246000fd5b6020026020010151905061131184826106fd565b508061131c81612f02565b9150506112d2565b6000828152600a60205260409020600101546113408133611a45565b61080e8383611acb565b600c546001600160a01b031633146113745760405162461bcd60e51b81526004016106d890612d6c565b6001600160a01b0381166113d95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d8565b610cbd81611b94565b6113ec8282611017565b610c10576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556114243390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610963836001600160a01b038416611e30565b60006001600160e01b03198216635a05180f60e01b14806105cb57506105cb82611e7f565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114d782610ecb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166115895760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106d8565b600061159483610ecb565b9050806001600160a01b0316846001600160a01b031614806115cf5750836001600160a01b03166115c484610663565b6001600160a01b0316145b806115ff57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661161a82610ecb565b6001600160a01b03161461167e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106d8565b6001600160a01b0382166116e05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106d8565b6116eb838383611ea4565b6116f66000826114a2565b6001600160a01b038316600090815260036020526040812080546001929061171f908490612e6d565b90915550506001600160a01b038216600090815260036020526040812080546001929061174d908490612e22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006117be601080546001019055565b5060105490565b6001600160a01b03821661181b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d8565b6000818152600260205260409020546001600160a01b0316156118805760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d8565b61188c60008383611ea4565b6001600160a01b03821660009081526003602052604081208054600192906118b5908490612e22565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828152600260205260409020546001600160a01b03166119895760405162461bcd60e51b815260206004820152602960248201527f457874656e644552433732313a20717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106d8565b600f816040516119999190612bc6565b9081526040519081900360200190205460ff16156119ef5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481b595d1859185d18481a59606a1b60448201526064016106d8565b6000828152600e602090815260409091208251611a0e92840190612684565b506001600f82604051611a219190612bc6565b908152604051908190036020019020805491151560ff199092169190911790555050565b611a4f8282611017565b610c1057611a67816001600160a01b03166014611f5c565b611a72836020611f5c565b604051602001611a83929190612c11565b60408051601f198184030181529082905262461bcd60e51b82526106d891600401612d07565b611ab382826113e2565b6000828152600b6020526040902061080e9082611468565b611ad5828261213d565b6000828152600b6020526040902061080e90826121a4565b6000611af882610ecb565b9050611b0681600084611ea4565b611b116000836114a2565b6001600160a01b0381166000908152600360205260408120805460019290611b3a908490612e6d565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600c80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061096383836121b9565b816001600160a01b0316836001600160a01b03161415611c545760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d8565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610c108282611aa9565b611cd6848484611607565b611ce2848484846121f1565b6111845760405162461bcd60e51b81526004016106d890612d1a565b6060600d80546105e090612ec7565b606081611d315750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611d5b5780611d4581612f02565b9150611d549050600a83612e3a565b9150611d35565b6000816001600160401b03811115611d8357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611dad576020820181803683370190505b5090505b84156115ff57611dc2600183612e6d565b9150611dcf600a86612f1d565b611dda906030612e22565b60f81b818381518110611dfd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611e1f600a86612e3a565b9450611db1565b60006105cb825490565b6000818152600183016020526040812054611e77575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105cb565b5060006105cb565b60006001600160e01b03198216637965db0b60e01b14806105cb57506105cb826122fe565b6001600160a01b038316611eff57611efa81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f22565b816001600160a01b0316836001600160a01b031614611f2257611f228382612323565b6001600160a01b038216611f395761080e816123c0565b826001600160a01b0316826001600160a01b03161461080e5761080e8282612499565b60606000611f6b836002612e4e565b611f76906002612e22565b6001600160401b03811115611f9b57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611fc5576020820181803683370190505b509050600360fc1b81600081518110611fee57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061202b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061204f846002612e4e565b61205a906001612e22565b90505b60018111156120ee576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061209c57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106120c057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936120e781612eb0565b905061205d565b5083156109635760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106d8565b6121478282611017565b15610c10576000828152600a602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610963836001600160a01b0384166124dd565b60008260000182815481106121de57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905092915050565b60006001600160a01b0384163b156122f357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612235903390899088908890600401612c86565b602060405180830381600087803b15801561224f57600080fd5b505af192505050801561227f575060408051601f3d908101601f1916820190925261227c91810190612b1e565b60015b6122d9573d8080156122ad576040519150601f19603f3d011682016040523d82523d6000602084013e6122b2565b606091505b5080516122d15760405162461bcd60e51b81526004016106d890612d1a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506115ff565b506001949350505050565b60006001600160e01b0319821663780e9d6360e01b14806105cb57506105cb826125fa565b6000600161233084610f42565b61233a9190612e6d565b60008381526007602052604090205490915080821461238d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906123d290600190612e6d565b6000838152600960205260408120546008805493945090928490811061240857634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806008838154811061243757634e487b7160e01b600052603260045260246000fd5b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061247d57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006124a483610f42565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b600081815260018301602052604081205480156125f0576000612501600183612e6d565b855490915060009061251590600190612e6d565b905081811461259657600086600001828154811061254357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508087600001848154811061257457634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b85548690806125b557634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105cb565b60009150506105cb565b60006001600160e01b031982166380ac58cd60e01b148061262b57506001600160e01b03198216635b5e139f60e01b145b806105cb57506301ffc9a760e01b6001600160e01b03198316146105cb565b50805461265690612ec7565b6000825580601f10612666575050565b601f016020900490600052602060002090810190610cbd9190612708565b82805461269090612ec7565b90600052602060002090601f0160209004810192826126b257600085556126f8565b82601f106126cb57805160ff19168380011785556126f8565b828001600101855582156126f8579182015b828111156126f85782518255916020019190600101906126dd565b50612704929150612708565b5090565b5b808211156127045760008155600101612709565b80356001600160a01b038116811461273457600080fd5b919050565b600082601f830112612749578081fd5b813560206001600160401b0382111561276457612764612f5d565b8160051b612773828201612df2565b83815282810190868401838801850189101561278d578687fd5b8693505b858410156127af578035835260019390930192918401918401612791565b50979650505050505050565b600082601f8301126127cb578081fd5b81356001600160401b038111156127e4576127e4612f5d565b6127f7601f8201601f1916602001612df2565b81815284602083860101111561280b578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215612836578081fd5b6109638261271d565b60008060408385031215612851578081fd5b61285a8361271d565b91506128686020840161271d565b90509250929050565b60008060008060808587031215612886578182fd5b61288f8561271d565b935061289d6020860161271d565b925060408501356001600160401b03808211156128b8578384fd5b6128c488838901612739565b935060608701359150808211156128d9578283fd5b506128e6878288016127bb565b91505092959194509250565b600080600060608486031215612906578283fd5b61290f8461271d565b925061291d6020850161271d565b9150604084013590509250925092565b60008060008060808587031215612942578384fd5b61294b8561271d565b93506129596020860161271d565b92506040850135915060608501356001600160401b0381111561297a578182fd5b6128e6878288016127bb565b60008060408385031215612998578182fd5b6129a18361271d565b915060208301356001600160401b038111156129bb578182fd5b6129c785828601612739565b9150509250929050565b600080604083850312156129e3578182fd5b6129ec8361271d565b915060208301358015158114612a00578182fd5b809150509250929050565b60008060408385031215612a1d578182fd5b612a268361271d565b915060208301356001600160401b03811115612a40578182fd5b6129c7858286016127bb565b60008060408385031215612a5e578182fd5b612a678361271d565b946020939093013593505050565b600080600060608486031215612a89578081fd5b612a928461271d565b95602085013595506040909401359392505050565b600060208284031215612ab8578081fd5b5035919050565b60008060408385031215612ad1578182fd5b823591506128686020840161271d565b60008060408385031215612af3578182fd5b50508035926020909101359150565b600060208284031215612b13578081fd5b813561096381612f73565b600060208284031215612b2f578081fd5b815161096381612f73565b600060208284031215612b4b578081fd5b81356001600160401b03811115612b60578182fd5b6115ff848285016127bb565b60008060408385031215612b7e578182fd5b8235915060208301356001600160401b03811115612a40578182fd5b60008151808452612bb2816020860160208601612e84565b601f01601f19169290920160200192915050565b60008251612bd8818460208701612e84565b9190910192915050565b60008351612bf4818460208801612e84565b835190830190612c08818360208801612e84565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612c49816017850160208801612e84565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612c7a816028840160208801612e84565b01602801949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612cb990830184612b9a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612cfb57835183529284019291840191600101612cdf565b50909695505050505050565b6020815260006109636020830184612b9a565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715612e1a57612e1a612f5d565b604052919050565b60008219821115612e3557612e35612f31565b500190565b600082612e4957612e49612f47565b500490565b6000816000190483118215151615612e6857612e68612f31565b500290565b600082821015612e7f57612e7f612f31565b500390565b60005b83811015612e9f578181015183820152602001612e87565b838111156111845750506000910152565b600081612ebf57612ebf612f31565b506000190190565b600181811c90821680612edb57607f821691505b60208210811415612efc57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612f1657612f16612f31565b5060010190565b600082612f2c57612f2c612f47565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610cbd57600080fdfea2646970667358221220039869a0104dc27d73769cbc87ac5efe7bde9311146daeddf9ace165441ca7eb64736f6c63430008040033