UNPKG

@credenza-web3/contracts

Version:

Credenza Contracts

1,728 lines 114 kB
{ "_format": "hh-sol-artifact-1", "contractName": "UpsellPublicLock", "sourceName": "contracts/upsell-lock/UpsellPublicLock.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": "uint256", "name": "upsellID", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "keyId", "type": "uint256" } ], "name": "UpsellGranted", "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": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "createUpsell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [], "name": "getLatestUpsell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getTokenIdFor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "upsellID", "type": "uint256" } ], "name": "getUpsellPrice", "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": "uint256", "name": "upsellID", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "grantUpsell", "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": [ { "internalType": "uint256", "name": "upsellID", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "purchaseUpsell", "outputs": [], "stateMutability": "payable", "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": "uint256", "name": "upsellID", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "verifyUpsellOwnership", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "0x60806040526000611c315534801561001657600080fd5b5060405130907f8ffcdc15a283d706d38281f500270d8b5a656918f555de0913d7455e3e6bc1bf90600090a2614bcc806100516000396000f3fe6080604052600436106104145760003560e01c806371a30b3d1161021e578063b585a6d511610123578063d2503485116100ab578063ec3a2b511161007a578063ec3a2b5114610c6c578063f0ba604014610c9a578063f3fef3a314610caf578063f5766b3914610ccf578063f5b792f914610cef57600080fd5b8063d250348514610bec578063d32bfb6c14610c0c578063d547741f14610c2c578063e985e9c514610c4c57600080fd5b8063bf4a9270116100f2578063bf4a927014610b68578063c1c98d0314610b88578063c87b56dd14610b9d578063cfb7ebd514610bbd578063d1bbd49c14610bd057600080fd5b8063b585a6d514610ae8578063b88d4fde14610b08578063ba5a370b14610b28578063bef3b3ed14610b4857600080fd5b806397aa390a116101a6578063a2e4cd2e11610175578063a2e4cd2e14610a51578063a375cb0514610a71578063a9059cbb14610a88578063aae4b8f714610aa8578063b11d7ec114610ac857600080fd5b806397aa390a146109db5780639d76ea58146109fb578063a217fddf14610a1c578063a22cb46514610a3157600080fd5b80638be4b870116101ed5780638be4b8701461093a5780638ca2fbad1461094d57806391d148541461096f57806395d89b411461098f578063970aaeb7146109a457600080fd5b806371a30b3d146108cd57806374b6c106146108e3578063782a4ade146108fa57806381a3c9431461091a57600080fd5b806336568abe11610324578063550ef3a8116102ac5780636352211e1161027b5780636352211e146108165780636d8ea5b41461084d5780636eadde431461086d5780636ef532581461088d57806370a08231146108ad57600080fd5b8063550ef3a8146107a9578063564aa99d146107c957806356e0d51f146107e95780636207a8da1461080057600080fd5b806342842e0e116102f357806342842e0e146106f25780634d025fed146107125780634f6ccce71461074957806352b0f6381461076957806352d6a8e41461078957600080fd5b806336568abe1461067657806338af3eed1461069657806339f46986146106b75780634136aa35146106d757600080fd5b806318160ddd116103a7578063248a9ca311610376578063248a9ca3146105c65780632af9162a146105f65780632f2ff15d146106165780632f745c591461063657806330176e131461065657600080fd5b806318160ddd1461054d5780631a64851014610563578063231005091461058457806323b872dd146105a657600080fd5b8063097ba333116103e3578063097ba333146104d15780630aaffd2a146104ff57806310e569731461051f57806311a4c03a1461053657600080fd5b806301ffc9a71461042057806306fdde0314610455578063081812fc14610477578063095ea7b3146104af57600080fd5b3661041b57005b600080fd5b34801561042c57600080fd5b5061044061043b3660046145e6565b610d0f565b60405190151581526020015b60405180910390f35b34801561046157600080fd5b5061046a610d20565b60405161044c919061487e565b34801561048357600080fd5b506104976104923660046145aa565b610daf565b6040516001600160a01b03909116815260200161044c565b3480156104bb57600080fd5b506104cf6104ca3660046144e6565b610e2b565b005b3480156104dd57600080fd5b506104f16104ec36600461433d565b610f72565b60405190815260200161044c565b34801561050b57600080fd5b506104cf61051a36600461423a565b610fbe565b34801561052b57600080fd5b506104f1610c845481565b34801561054257600080fd5b506104f1610c835481565b34801561055957600080fd5b50610c86546104f1565b34801561056f57600080fd5b5061107054610497906001600160a01b031681565b34801561059057600080fd5b506104f1600080516020614b5783398151915281565b3480156105b257600080fd5b506104cf6105c13660046143a0565b611042565b3480156105d257600080fd5b506104f16105e13660046145aa565b60009081526097602052604090206001015490565b34801561060257600080fd5b506104cf61061136600461423a565b6112ac565b34801561062257600080fd5b506104cf6106313660046145c2565b61132f565b34801561064257600080fd5b506104f16106513660046144e6565b611359565b34801561066257600080fd5b506104cf61067136600461461e565b6113e1565b34801561068257600080fd5b506104cf6106913660046145c2565b611422565b3480156106a257600080fd5b50610c8754610497906001600160a01b031681565b3480156106c357600080fd5b506104cf6106d23660046146e7565b6114a0565b3480156106e357600080fd5b5061089a546104409060ff1681565b3480156106fe57600080fd5b506104cf61070d3660046143a0565b61151a565b34801561071e57600080fd5b5061049761072d3660046145aa565b611073602052600090815260409020546001600160a01b031681565b34801561075557600080fd5b506104f16107643660046145aa565b611535565b34801561077557600080fd5b5061044061078436600461423a565b61157c565b34801561079557600080fd5b506104f16107a436600461423a565b611596565b3480156107b557600080fd5b506104cf6107c436600461461e565b6115a1565b3480156107d557600080fd5b506104cf6107e436600461423a565b6115e2565b3480156107f557600080fd5b506104f16124025481565b34801561080c57600080fd5b50611c31546104f1565b34801561082257600080fd5b506104976108313660046145aa565b600090815261107260205260409020546001600160a01b031690565b34801561085957600080fd5b5061044061086836600461423a565b611665565b34801561087957600080fd5b506104cf610888366004614281565b611731565b34801561089957600080fd5b506104406108a83660046145c2565b6118a0565b3480156108b957600080fd5b506104f16108c836600461423a565b6118ec565b3480156108d957600080fd5b506127ec546104f1565b3480156108ef57600080fd5b506104f1610c855481565b34801561090657600080fd5b506104cf61091536600461461e565b611934565b34801561092657600080fd5b506104cf6109353660046144f8565b6119b3565b6104cf610948366004614676565b611c2d565b34801561095957600080fd5b506104f1600080516020614b7783398151915281565b34801561097b57600080fd5b5061044061098a3660046145c2565b61204b565b34801561099b57600080fd5b5061046a612076565b3480156109b057600080fd5b506104f16109bf36600461423a565b6001600160a01b03166000908152611071602052604090205490565b3480156109e757600080fd5b506104cf6109f6366004614256565b612109565b348015610a0757600080fd5b506104b154610497906001600160a01b031681565b348015610a2857600080fd5b506104f1600081565b348015610a3d57600080fd5b506104cf610a4c3660046144b9565b61216d565b348015610a5d57600080fd5b506104cf610a6c3660046145c2565b612245565b348015610a7d57600080fd5b506104f16124035481565b348015610a9457600080fd5b50610440610aa33660046144e6565b6123dd565b348015610ab457600080fd5b50610440610ac336600461423a565b612405565b348015610ad457600080fd5b506104cf610ae33660046145c2565b61241f565b348015610af457600080fd5b50610440610b033660046144e6565b6124e3565b348015610b1457600080fd5b506104cf610b233660046143e0565b6125a7565b348015610b3457600080fd5b506104cf610b4336600461423a565b612610565b348015610b5457600080fd5b506104cf610b633660046145c2565b612667565b348015610b7457600080fd5b506104cf610b833660046145aa565b612763565b348015610b9457600080fd5b506104cf612807565b348015610ba957600080fd5b5061046a610bb83660046145aa565b612894565b6104cf610bcb3660046145c2565b6129a3565b348015610bdc57600080fd5b506040516009815260200161044c565b348015610bf857600080fd5b506104cf610c0736600461423a565b612ab5565b348015610c1857600080fd5b506104cf610c273660046145aa565b612b38565b348015610c3857600080fd5b506104cf610c473660046145c2565b612bd9565b348015610c5857600080fd5b50610440610c67366004614305565b612bfe565b348015610c7857600080fd5b506104f1610c873660046145aa565b60009081526127ed602052604090205490565b348015610ca657600080fd5b506104cf612c97565b348015610cbb57600080fd5b506104cf610cca3660046144e6565b612cdc565b348015610cdb57600080fd5b506104cf610cea3660046145aa565b612e69565b348015610cfb57600080fd5b506104f1610d0a3660046145aa565b612ea3565b6000610d1a82612f09565b92915050565b6110768054610d2e90614aa1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a90614aa1565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081565b6000818152611072602052604081205482906001600160a01b0316610e095760405162461bcd60e51b815260206004820152600b60248201526a4e4f5f535543485f4b455960a81b60448201526064015b60405180910390fd5b600083815261107460205260409020546001600160a01b031691505b50919050565b61089a5460ff16610e4e5760405162461bcd60e51b8152600401610e00906149a2565b80610e598133612f14565b80610e7b5750600081815261107460205260409020546001600160a01b031633145b80610ea4575060008181526110726020526040902054610ea4906001600160a01b031633612bfe565b610ec05760405162461bcd60e51b8152600401610e00906148e1565b336001600160a01b0384161415610f085760405162461bcd60e51b815260206004820152600c60248201526b20a8282927ab22afa9a2a62360a11b6044820152606401610e00565b60008281526110746020908152604080832080546001600160a01b0319166001600160a01b03888116918217909255611072909352818420549151869492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610fb5858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f8d92505050565b95945050505050565b610fc733612405565b80610fdd5750610c87546001600160a01b031633145b610ff95760405162461bcd60e51b8152600401610e0090614918565b6001600160a01b03811661101f5760405162461bcd60e51b8152600401610e0090614891565b610c8780546001600160a01b0319166001600160a01b0392909216919091179055565b61089a5460ff166110655760405162461bcd60e51b8152600401610e00906149a2565b8261106f81611665565b61108b5760405162461bcd60e51b8152600401610e00906148ba565b816110968133612f14565b806110b85750600081815261107460205260409020546001600160a01b031633145b806110e15750600081815261107260205260409020546110e1906001600160a01b031633612bfe565b6110fd5760405162461bcd60e51b8152600401610e00906148e1565b600083815261107260205260409020546001600160a01b038681169116146111675760405162461bcd60e51b815260206004820152601c60248201527f5452414e534645525f46524f4d3a204e4f545f4b45595f4f574e4552000000006044820152606401610e00565b6001600160a01b03841660009081526110716020526040902054156111ce5760405162461bcd60e51b815260206004820152601960248201527f524543495049454e545f414c52454144595f4841535f4b4559000000000000006044820152606401610e00565b6001600160a01b0384166111f45760405162461bcd60e51b8152600401610e0090614891565b836001600160a01b0316856001600160a01b031614156112495760405162461bcd60e51b815260206004820152601060248201526f2a2920a729a322a92faa27afa9a2a62360811b6044820152606401610e00565b61125283612f98565b6001600160a01b03808616600081815261107160205260408082208290559287168082528382208790559251869392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050565b6112c4600080516020614b778339815191523361204b565b6112e05760405162461bcd60e51b8152600401610e009061494d565b6112f8600080516020614b5783398151915282612bd9565b6040516001600160a01b038216907f766f6199fea59554b9ff688e413302b9200f85d74811c053c12d945ac6d8dd7a90600090a250565b60008281526097602052604090206001015461134a81612fd7565b6113548383612fe1565b505050565b6000611364836118ec565b8210801561137a57506001600160a01b03831615155b6113bf5760405162461bcd60e51b815260206004820152601660248201527527a7262cafa7a722afa5a2acafa822a92fa7aba722a960511b6044820152606401610e00565b6001600160a01b038316600090815261107160205260409020545b9392505050565b6113f9600080516020614b778339815191523361204b565b6114155760405162461bcd60e51b8152600401610e009061494d565b6113546110788383614120565b6001600160a01b03811633146114925760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610e00565b61149c8282613067565b5050565b6114b8600080516020614b778339815191523361204b565b6114d45760405162461bcd60e51b8152600401610e009061494d565b60408051838152602081018390527fd6867bc538320e67d7bdc35860c27c08486eb490b4fd9b820fff18fb28381d3c910160405180910390a16124039190915561240255565b611354838383604051806020016040528060008152506125a7565b6000610c865482106115785760405162461bcd60e51b815260206004820152600c60248201526b4f55545f4f465f52414e474560a01b6044820152606401610e00565b5090565b6000610d1a600080516020614b578339815191528361204b565b6000610d1a826130ce565b6115b9600080516020614b778339815191523361204b565b6115d55760405162461bcd60e51b8152600401610e009061494d565b6113546110768383614120565b6115fa600080516020614b778339815191523361204b565b6116165760405162461bcd60e51b8152600401610e009061494d565b61162e600080516020614b578339815191528261132f565b6040516001600160a01b038216907f684f8a71407db0c334454ebe9c9b288549317893a20b10dc779ec5c118dcd12190600090a250565b6001600160a01b038116600090815261107160205260409020541580159061168c57919050565b611070546001600160a01b03161561172957611070546040516370a0823160e01b81526001600160a01b0384811660048301529091169060009082906370a082319060240160206040518083038186803b1580156116e957600080fd5b505afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611721919061465e565b119392505050565b506000919050565b600054610100900460ff16158080156117515750600054600160ff909116105b8061176b5750303b15801561176b575060005460ff166001145b6117ce5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e00565b6000805460ff1916600117905580156117f1576000805461ff0019166101001790555b6117fa86613101565b61180d61089a805460ff19166001179055565b611819888887876131d8565b611823838361326b565b61182b613291565b6118376103e861240255565b611840886132a3565b6118506380ac58cd60e01b61332b565b8015611896576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60006118ab82611665565b6118b757506000610d1a565b506001600160a01b03166000908152611071602090815260408083205483526127ee8252808320938352929052205460ff1690565b60006001600160a01b0382166119145760405162461bcd60e51b8152600401610e0090614891565b61191d82611665565b61192857600061192b565b60015b60ff1692915050565b61194c600080516020614b778339815191523361204b565b6119685760405162461bcd60e51b8152600401610e009061494d565b6119756110778383614120565b507f8868e22e84ebf32da89b2ebcb0ac642816304ea3863b257f240df9098719cb9782826040516119a792919061484f565b60405180910390a15050565b6119bc3361157c565b806119cb57506119cb33612405565b611a495760405162461bcd60e51b815260206004820152604360248201527f4d6978696e526f6c65733a2063616c6c657220646f6573206e6f74206861766560448201527f20746865204b65794772616e746572206f72204c6f636b4d616e6167657220726064820152626f6c6560e81b608482015260a401610e00565b60005b85811015611c24576000878783818110611a7657634e487b7160e01b600052603260045