UNPKG

@credenza-web3/contracts

Version:

Credenza Contracts

1,592 lines 107 kB
{ "_format": "hh-sol-artifact-1", "contractName": "TetherPublicLock", "sourceName": "contracts/tether-lock/TetherPublicLock.sol", "abi": [ { "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sendTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "refund", "type": "uint256" } ], "name": "CancelKey", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "contractAddress", "type": "address" } ], "name": "ContractDeployed", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Disable", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "refundedAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "GasRefunded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "KeyGranterAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "KeyGranterRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "_newManager", "type": "address" } ], "name": "KeyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "LockManagerAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "LockManagerRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" } ], "name": "NewLockSymbol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldKeyPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "keyPrice", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "oldTokenAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "PricingChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "freeTrialLength", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "refundPenaltyBasisPoints", "type": "uint256" } ], "name": "RefundPenaltyChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newExpiration", "type": "uint256" } ], "name": "RenewKeyPurchase", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "transferFeeBasisPoints", "type": "uint256" } ], "name": "TransferFeeChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "lockAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "unlockAddress", "type": "address" } ], "name": "UnlockCallFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawal", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "KEY_GRANTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LOCK_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addKeyGranter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addLockManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_approved", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "approveBeneficiary", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "beneficiary", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "cancelAndRefund", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "expirationDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_keyOwner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "expireAndRefundFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "freeTrialLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasRefundValue", "outputs": [ { "internalType": "uint256", "name": "_refundValue", "type": "uint256" } ], "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": "address", "name": "_keyOwner", "type": "address" } ], "name": "getCancelAndRefundValueFor", "outputs": [ { "internalType": "uint256", "name": "refund", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" } ], "name": "getHasValidKey", "outputs": [ { "internalType": "bool", "name": "isValid", "type": "bool" } ], "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": "address", "name": "_account", "type": "address" } ], "name": "getTokenIdFor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "_expirationTimestamps", "type": "uint256[]" }, { "internalType": "address[]", "name": "_keyManagers", "type": "address[]" } ], "name": "grantKeys", "outputs": [], "stateMutability": "nonpayable", "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 payable", "name": "_lockCreator", "type": "address" }, { "internalType": "uint256", "name": "_expirationDuration", "type": "uint256" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_keyPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_maxNumberOfKeys", "type": "uint256" }, { "internalType": "string", "name": "_lockName", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isAlive", "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": "account", "type": "address" } ], "name": "isKeyGranter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isLockManager", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "keyManagerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "keyPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxNumberOfKeys", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "publicLockVersion", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "address", "name": "_referrer", "type": "address" }, { "internalType": "address", "name": "_keyManager", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "purchase", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "address", "name": "_referrer", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "purchasePriceFor", "outputs": [ { "internalType": "uint256", "name": "minKeyPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundPenaltyBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceLockManager", "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": "address", "name": "_granter", "type": "address" } ], "name": "revokeKeyGranter", "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": "_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": "_to", "type": "address" }, { "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_baseTokenURI", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_refundValue", "type": "uint256" } ], "name": "setGasRefundValue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_keyManager", "type": "address" } ], "name": "setKeyManagerOf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxNumberOfKeys", "type": "uint256" } ], "name": "setMaxNumberOfKeys", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tetherContractAddress", "type": "address" } ], "name": "setTetherContractAddress", "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": [], "name": "tetherContractAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "_keyOwner", "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": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_beneficiary", "type": "address" } ], "name": "updateBeneficiary", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_keyPrice", "type": "uint256" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" } ], "name": "updateKeyPricing", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_lockName", "type": "string" } ], "name": "updateLockName", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_lockSymbol", "type": "string" } ], "name": "updateLockSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_freeTrialLength", "type": "uint256" }, { "internalType": "uint256", "name": "_refundPenaltyBasisPoints", "type": "uint256" } ], "name": "updateRefundPenalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60806040526000611c315534801561001657600080fd5b5060405130907f8ffcdc15a283d706d38281f500270d8b5a656918f555de0913d7455e3e6bc1bf90600090a26147a6806100516000396000f3fe6080604052600436106103d25760003560e01c80636eadde43116101fd578063a9059cbb11610118578063c87b56dd116100ab578063d547741f1161007a578063d547741f14610b81578063e985e9c514610ba1578063f0ba604014610bc1578063f3fef3a314610bd6578063f5766b3914610bf657600080fd5b8063c87b56dd14610b05578063d1bbd49c14610b25578063d250348514610b41578063d32bfb6c14610b6157600080fd5b8063b88d4fde116100e7578063b88d4fde14610a90578063ba5a370b14610ab0578063bf4a927014610ad0578063c1c98d0314610af057600080fd5b8063a9059cbb14610a10578063aae4b8f714610a30578063b11d7ec114610a50578063b585a6d514610a7057600080fd5b806395d89b4111610190578063a217fddf1161015f578063a217fddf146109a4578063a22cb465146109b9578063a2e4cd2e146109d9578063a375cb05146109f957600080fd5b806395d89b4114610917578063970aaeb71461092c57806397aa390a146109635780639d76ea581461098357600080fd5b806381a3c943116101cc57806381a3c943146108a25780638be4b870146108c25780638ca2fbad146108d557806391d14854146108f757600080fd5b80636eadde431461082b57806370a082311461084b57806374b6c1061461086b578063782a4ade1461088257600080fd5b806330176e13116102ed57806352b0f6381161028057806356e0d51f1161024f57806356e0d51f146107a75780636207a8da146107be5780636352211e146107d45780636d8ea5b41461080b57600080fd5b806352b0f6381461072757806352d6a8e414610747578063550ef3a814610767578063564aa99d1461078757600080fd5b80634136aa35116102bc5780634136aa351461069557806342842e0e146106b05780634d025fed146106d05780634f6ccce71461070757600080fd5b806330176e131461061457806336568abe1461063457806338af3eed1461065457806339f469861461067557600080fd5b806318160ddd11610365578063248a9ca311610334578063248a9ca3146105845780632af9162a146105b45780632f2ff15d146105d45780632f745c59146105f457600080fd5b806318160ddd1461050b5780631a64851014610521578063231005091461054257806323b872dd1461056457600080fd5b8063097ba333116103a1578063097ba3331461048f5780630aaffd2a146104bd57806310e56973146104dd57806311a4c03a146104f457600080fd5b806301ffc9a7146103de57806306fdde0314610413578063081812fc14610435578063095ea7b31461046d57600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103fe6103f93660046141c0565b610c16565b60405190151581526020015b60405180910390f35b34801561041f57600080fd5b50610428610c27565b60405161040a9190614458565b34801561044157600080fd5b50610455610450366004614184565b610cb6565b6040516001600160a01b03909116815260200161040a565b34801561047957600080fd5b5061048d6104883660046140c0565b610d32565b005b34801561049b57600080fd5b506104af6104aa366004613f17565b610e79565b60405190815260200161040a565b3480156104c957600080fd5b5061048d6104d8366004613e14565b610ec5565b3480156104e957600080fd5b506104af610c845481565b34801561050057600080fd5b506104af610c835481565b34801561051757600080fd5b50610c86546104af565b34801561052d57600080fd5b5061107054610455906001600160a01b031681565b34801561054e57600080fd5b506104af60008051602061473183398151915281565b34801561057057600080fd5b5061048d61057f366004613f7a565b610f49565b34801561059057600080fd5b506104af61059f366004614184565b60009081526097602052604090206001015490565b3480156105c057600080fd5b5061048d6105cf366004613e14565b6111b3565b3480156105e057600080fd5b5061048d6105ef36600461419c565b611236565b34801561060057600080fd5b506104af61060f3660046140c0565b611260565b34801561062057600080fd5b5061048d61062f3660046141f8565b6112e8565b34801561064057600080fd5b5061048d61064f36600461419c565b611329565b34801561066057600080fd5b50610c8754610455906001600160a01b031681565b34801561068157600080fd5b5061048d6106903660046142c1565b6113a7565b3480156106a157600080fd5b5061089a546103fe9060ff1681565b3480156106bc57600080fd5b5061048d6106cb366004613f7a565b611421565b3480156106dc57600080fd5b506104556106eb366004614184565b611073602052600090815260409020546001600160a01b031681565b34801561071357600080fd5b506104af610722366004614184565b61143c565b34801561073357600080fd5b506103fe610742366004613e14565b611483565b34801561075357600080fd5b506104af610762366004613e14565b61149d565b34801561077357600080fd5b5061048d6107823660046141f8565b6114a8565b34801561079357600080fd5b5061048d6107a2366004613e14565b6114e9565b3480156107b357600080fd5b506104af6124025481565b3480156107ca57600080fd5b50611c31546104af565b3480156107e057600080fd5b506104556107ef366004614184565b600090815261107260205260409020546001600160a01b031690565b34801561081757600080fd5b506103fe610826366004613e14565b61156c565b34801561083757600080fd5b5061048d610846366004613e5b565b611638565b34801561085757600080fd5b506104af610866366004613e14565b6117a7565b34801561087757600080fd5b506104af610c855481565b34801561088e57600080fd5b5061048d61089d3660046141f8565b6117ef565b3480156108ae57600080fd5b5061048d6108bd3660046140d2565b61186e565b61048d6108d0366004614250565b611ae8565b3480156108e157600080fd5b506104af60008051602061475183398151915281565b34801561090357600080fd5b506103fe61091236600461419c565b611f06565b34801561092357600080fd5b50610428611f31565b34801561093857600080fd5b506104af610947366004613e14565b6001600160a01b03166000908152611071602052604090205490565b34801561096f57600080fd5b5061048d61097e366004613e30565b611fc4565b34801561098f57600080fd5b506104b154610455906001600160a01b031681565b3480156109b057600080fd5b506104af600081565b3480156109c557600080fd5b5061048d6109d4366004614093565b612028565b3480156109e557600080fd5b5061048d6109f436600461419c565b612100565b348015610a0557600080fd5b506104af6124035481565b348015610a1c57600080fd5b506103fe610a2b3660046140c0565b612298565b348015610a3c57600080fd5b506103fe610a4b366004613e14565b6122c0565b348015610a5c57600080fd5b5061048d610a6b36600461419c565b6122da565b348015610a7c57600080fd5b506103fe610a8b3660046140c0565b61239e565b348015610a9c57600080fd5b5061048d610aab366004613fba565b612462565b348015610abc57600080fd5b5061048d610acb366004613e14565b6124cb565b348015610adc57600080fd5b5061048d610aeb366004614184565b612522565b348015610afc57600080fd5b5061048d6125c6565b348015610b1157600080fd5b50610428610b20366004614184565b612653565b348015610b3157600080fd5b506040516009815260200161040a565b348015610b4d57600080fd5b5061048d610b5c366004613e14565b612762565b348015610b6d57600080fd5b5061048d610b7c366004614184565b6127e5565b348015610b8d57600080fd5b5061048d610b9c36600461419c565b612886565b348015610bad57600080fd5b506103fe610bbc366004613edf565b6128ab565b348015610bcd57600080fd5b5061048d612944565b348015610be257600080fd5b5061048d610bf13660046140c0565b612989565b348015610c0257600080fd5b5061048d610c11366004614184565b612b16565b6000610c2182612b50565b92915050565b6110768054610c359061467b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c619061467b565b8015610cae5780601f10610c8357610100808354040283529160200191610cae565b820191906000526020600020905b815481529060010190602001808311610c9157829003601f168201915b505050505081565b6000818152611072602052604081205482906001600160a01b0316610d105760405162461bcd60e51b815260206004820152600b60248201526a4e4f5f535543485f4b455960a81b60448201526064015b60405180910390fd5b600083815261107460205260409020546001600160a01b031691505b50919050565b61089a5460ff16610d555760405162461bcd60e51b8152600401610d079061457c565b80610d608133612b5b565b80610d825750600081815261107460205260409020546001600160a01b031633145b80610dab575060008181526110726020526040902054610dab906001600160a01b0316336128ab565b610dc75760405162461bcd60e51b8152600401610d07906144bb565b336001600160a01b0384161415610e0f5760405162461bcd60e51b815260206004820152600c60248201526b20a8282927ab22afa9a2a62360a11b6044820152606401610d07565b60008281526110746020908152604080832080546001600160a01b0319166001600160a01b03888116918217909255611072909352818420549151869492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610ebc858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bd492505050565b95945050505050565b610ece336122c0565b80610ee45750610c87546001600160a01b031633145b610f005760405162461bcd60e51b8152600401610d07906144f2565b6001600160a01b038116610f265760405162461bcd60e51b8152600401610d079061446b565b610c8780546001600160a01b0319166001600160a01b0392909216919091179055565b61089a5460ff16610f6c5760405162461bcd60e51b8152600401610d079061457c565b82610f768161156c565b610f925760405162461bcd60e51b8152600401610d0790614494565b81610f9d8133612b5b565b80610fbf5750600081815261107460205260409020546001600160a01b031633145b80610fe8575060008181526110726020526040902054610fe8906001600160a01b0316336128ab565b6110045760405162461bcd60e51b8152600401610d07906144bb565b600083815261107260205260409020546001600160a01b0386811691161461106e5760405162461bcd60e51b815260206004820152601c60248201527f5452414e534645525f46524f4d3a204e4f545f4b45595f4f574e4552000000006044820152606401610d07565b6001600160a01b03841660009081526110716020526040902054156110d55760405162461bcd60e51b815260206004820152601960248201527f524543495049454e545f414c52454144595f4841535f4b4559000000000000006044820152606401610d07565b6001600160a01b0384166110fb5760405162461bcd60e51b8152600401610d079061446b565b836001600160a01b0316856001600160a01b031614156111505760405162461bcd60e51b815260206004820152601060248201526f2a2920a729a322a92faa27afa9a2a62360811b6044820152606401610d07565b61115983612bdf565b6001600160a01b03808616600081815261107160205260408082208290559287168082528382208790559251869392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050565b6111cb60008051602061475183398151915233611f06565b6111e75760405162461bcd60e51b8152600401610d0790614527565b6111ff60008051602061473183398151915282612886565b6040516001600160a01b038216907f766f6199fea59554b9ff688e413302b9200f85d74811c053c12d945ac6d8dd7a90600090a250565b60008281526097602052604090206001015461125181612c1e565b61125b8383612c28565b505050565b600061126b836117a7565b8210801561128157506001600160a01b03831615155b6112c65760405162461bcd60e51b815260206004820152601660248201527527a7262cafa7a722afa5a2acafa822a92fa7aba722a960511b6044820152606401610d07565b6001600160a01b038316600090815261107160205260409020545b9392505050565b61130060008051602061475183398151915233611f06565b61131c5760405162461bcd60e51b8152600401610d0790614527565b61125b6110788383613cfa565b6001600160a01b03811633146113995760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610d07565b6113a38282612cae565b5050565b6113bf60008051602061475183398151915233611f06565b6113db5760405162461bcd60e51b8152600401610d0790614527565b60408051838152602081018390527fd6867bc538320e67d7bdc35860c27c08486eb490b4fd9b820fff18fb28381d3c910160405180910390a16124039190915561240255565b61125b83838360405180602001604052806000815250612462565b6000610c8654821061147f5760405162461bcd60e51b815260206004820152600c60248201526b4f55545f4f465f52414e474560a01b6044820152606401610d07565b5090565b6000610c2160008051602061473183398151915283611f06565b6000610c2182612d15565b6114c060008051602061475183398151915233611f06565b6114dc5760405162461bcd60e51b8152600401610d0790614527565b61125b6110768383613cfa565b61150160008051602061475183398151915233611f06565b61151d5760405162461bcd60e51b8152600401610d0790614527565b61153560008051602061473183398151915282611236565b6040516001600160a01b038216907f684f8a71407db0c334454ebe9c9b288549317893a20b10dc779ec5c118dcd12190600090a250565b6001600160a01b038116600090815261107160205260409020541580159061159357919050565b611070546001600160a01b03161561163057611070546040516370a0823160e01b81526001600160a01b0384811660048301529091169060009082906370a082319060240160206040518083038186803b1580156115f057600080fd5b505afa158015611604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116289190614238565b119392505050565b506000919050565b600054610100900460ff16158080156116585750600054600160ff909116105b806116725750303b158015611672575060005460ff166001145b6116d55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610d07565b6000805460ff1916600117905580156116f8576000805461ff0019166101001790555b61170186612d48565b61171461089a805460ff19166001179055565b61172088888787612e1f565b61172a8383612eb2565b611732612ed8565b61173e6103e861240255565b61174788612eea565b6117576380ac58cd60e01b612f72565b801561179d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60006001600160a01b0382166117cf5760405162461bcd60e51b8152600401610d079061446b565b6117d88261156c565b6117e35760006117e6565b60015b60ff1692915050565b61180760008051602061475183398151915233611f06565b6118235760405162461bcd60e51b8152600401610d0790614527565b6118306110778383613cfa565b507f8868e22e84ebf32da89b2ebcb0ac642816304ea3863b257f240df9098719cb978282604051611862929190614429565b60405180910390a15050565b61187733611483565b806118865750611886336122c0565b6119045760405162461bcd60e51b815260206004820152604360248201527f4d6978696e526f6c65733a2063616c6c657220646f6573206e6f74206861766560448201527f20746865204b65794772616e746572206f72204c6f636b4d616e6167657220726064820152626f6c6560e81b608482015260a401610d07565b60005b85811015611adf57600087878381811061193157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119469190613e14565b9050600086868481811061196a57634e487b7160e01b600052603260045260246000fd5b905060200201359050600085858581811061199557634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119aa9190613e14565b90506001600160a01b0383166119d25760405162461bcd60e51b8152600401610d079061446b565b6001600160a01b0383166000908152611071602052604090205415611a2c5760405162461bcd60e51b815260206004820152601060248201526f414c52454144595f4f574e535f4b455960801b6044820152606401610d07565b610c868054906000611a3d836146b0565b9091555050610c8654611a508482612ff1565b611a5a8183613030565b6040516001600160a01b0383169082907f9d2895c45a420624de863a2f437b022d879f457bf7a829044055a10c5a6fd5e390600090a360405181906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050508080611ad7906146b0565b915050611907565b50505050505050565b61089a5460ff16611b0b5760405162461bcd60e51b8152600401610d079061457c565b610c8654610c855411611b505760405162461bcd60e51b815260206004820152600d60248201526c1313d0d2d7d4d3d31117d3d555609a1b6044820152606401610d07565b6001600160a01b038516611b765760405162461bcd60e51b8152600401610d079061446b565b6001600160a01b0385166000908152611071602052604090205415611bcf5760405162461bcd60e51b815260206004820152600f60248201526e414c52454144595f4841535f4b455960881b6044820152606401610d07565b610c868054906000611be0836146b0565b9091555050610c8654611bf38682612ff1565b611bfd8185613030565b60405181906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46000611c78878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612bd492505050565b6104b1549091506000906001600160a01b031615611d2557506104b1546040516323b872dd60e01b8152336004820152306024820152604481018a905289916001600160a01b03169081906323b872dd90606401602060405180830381600087803b158015611ce657600080fd5b505af1158015611cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1e9190614168565b5050611d28565b50345b81811015611d6d5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610d07565b611c315415611efb576104b1546001600160a01b031615611e21576104b154611c31546040516323b872dd60e01b815230600482015233602482015260448101919091526001600160a01b039091169081906323b872dd90606401602060405180830381600087803b158015611de257600080fd5b505af1158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190614168565b5050611eae565b611c315460405160009133918381818185875af1925050503d8060008114611e65576040519150601f19603f3d011682016040523d82523d6000602084013e611e6a565b606091505b5050905080611eac5760405162461bcd60e51b815260206004820152600e60248201526d2932b33ab732103330b4b632b21760911b6044820152606401610d07565b505b611c31546104b154604080519283526001600160a01b03909116602083015233917f522a883b471164223f18b50f326da8671372b64b4792eac0e63d447e714c3e3b910160405180910390a25b505050505050505050565b60009182526097602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606110778054611f419061467b565b80601f0160208091040260200160405190810160405280929190818152602001828054611f6d9061467b565b8015611fba5780601f10611f8f57610100808354040283529160200191611fba565b820191906000526020600020905b815481529060010190602001808311611f9d57829003601f168201915b5050505050905090565b611fdc60008051602061475183398151915233611f06565b611ff85760405162461bcd60e51b8152600401610d