UNPKG

test-contracts-sovryn

Version:

Smart contracts for the Sovryn protocol and external integrations.

1,589 lines 118 kB
{ "_format": "hh-sol-artifact-1", "contractName": "StakingMock", "sourceName": "contracts/mockup/StakingMock.sol", "abi": [ { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "admin", "type": "address" } ], "name": "AdminAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "admin", "type": "address" } ], "name": "AdminRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "name": "ContractCodeHashAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "name": "ContractCodeHashRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "lockedUntil", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "lockedUntil", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } ], "name": "DelegateStakeChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousDate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountStaked", "type": "uint256" } ], "name": "ExtendedStakingDuration", "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": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "until", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isGovernance", "type": "bool" } ], "name": "StakingWithdrawn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "staker", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockedUntil", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalStaked", "type": "uint256" } ], "name": "TokensStaked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "TokensUnlocked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "vesting", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" } ], "name": "VestingTokensWithdrawn", "type": "event" }, { "constant": true, "inputs": [], "name": "DELEGATION_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_DURATION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "MAX_VOTING_WEIGHT", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "SOVToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "WEIGHT_FACTOR", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "addAdmin", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "admins", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "allUnlocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint96", "name": "balance", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "blockMockUp", "outputs": [ { "internalType": "contract BlockMockUp", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "date", "type": "uint256" }, { "internalType": "uint256", "name": "startDate", "type": "uint256" } ], "name": "computeWeightByDate", "outputs": [ { "internalType": "uint96", "name": "weight", "type": "uint96" } ], "payable": false, "stateMutability": "pure", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "lockDate", "type": "uint256" } ], "name": "delegate", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "lockDate", "type": "uint256" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "delegateStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint96", "name": "stake", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "previousLock", "type": "uint256" }, { "internalType": "uint256", "name": "until", "type": "uint256" } ], "name": "extendStakingDuration", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "feeSharing", "outputs": [ { "internalType": "contract IFeeSharingProxy", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "lockedTS", "type": "uint256" } ], "name": "getCurrentStakedUntil", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getCurrentVotes", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "date", "type": "uint256" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPriorStakeByDateForDelegatee", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "date", "type": "uint256" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPriorTotalStakesForDate", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint32", "name": "blockNumber", "type": "uint32" }, { "internalType": "uint256", "name": "time", "type": "uint256" } ], "name": "getPriorTotalVotingPower", "outputs": [ { "internalType": "uint96", "name": "totalVotingPower", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "date", "type": "uint256" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "getPriorUserStakeByDate", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "name": "getPriorVotes", "outputs": [ { "internalType": "uint96", "name": "votes", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" }, { "internalType": "uint256", "name": "date", "type": "uint256" } ], "name": "getPriorWeightedStake", "outputs": [ { "internalType": "uint96", "name": "votes", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getStakes", "outputs": [ { "internalType": "uint256[]", "name": "dates", "type": "uint256[]" }, { "internalType": "uint96[]", "name": "stakes", "type": "uint96[]" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint256", "name": "until", "type": "uint256" } ], "name": "getWithdrawAmounts", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint256", "name": "until", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "governanceWithdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "vesting", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "governanceWithdrawVesting", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "kickoffTS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [], "name": "migrateToNewStakingContract", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "newStakingContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "numDelegateStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "numTotalStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "numUserStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "receiveApproval", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "removeAdmin", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_blockMockUp", "type": "address" } ], "name": "setBlockMockUpAddr", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_feeSharing", "type": "address" } ], "name": "setFeeSharing", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_newStakingContract", "type": "address" } ], "name": "setNewStakingContract", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "_vestingRegistryProxy", "type": "address" } ], "name": "setVestingRegistry", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint96", "name": "_weightScaling", "type": "uint96" } ], "name": "setWeightScaling", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint256", "name": "until", "type": "uint256" }, { "internalType": "address", "name": "stakeFor", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "stake", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint256", "name": "until", "type": "uint256" }, { "internalType": "address", "name": "stakeFor", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "stakeWithApproval", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "cliff", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "intervalLength", "type": "uint256" }, { "internalType": "address", "name": "stakeFor", "type": "address" }, { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "stakesBySchedule", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "timestampToLockDate", "outputs": [ { "internalType": "uint256", "name": "lockDate", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "totalStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint96", "name": "stake", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [], "name": "unlockAllTokens", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint32", "name": "", "type": "uint32" } ], "name": "userStakingCheckpoints", "outputs": [ { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, { "internalType": "uint96", "name": "stake", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "vestingCodeHashes", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "vestingRegistryLogic", "outputs": [ { "internalType": "contract VestingRegistryLogic", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "vestingWhitelist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "weightScaling", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "date", "type": "uint256" }, { "internalType": "uint256", "name": "startDate", "type": "uint256" }, { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "weightedStakeByDate", "outputs": [ { "internalType": "uint96", "name": "power", "type": "uint96" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint96", "name": "amount", "type": "uint96" }, { "internalType": "uint256", "name": "until", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "withdraw", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x60c0604052600a608081905269534f565374616b696e6760b01b60a09081526200002d9160029190620000ae565b506005805460ff19169055600d80546001600160a01b0316600360a01b179055600062000059620000a9565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000150565b335b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000f157805160ff191683800117855562000121565b8280016001018555821562000121579182015b828111156200012157825182559160200191906001019062000104565b506200012f92915062000133565b5090565b620000ab91905b808211156200012f57600081556001016200013a565b61517980620001606000396000f3fe608060405234801561001057600080fd5b50600436106103a35760003560e01c8063836eebee116101e9578063b4b5ea571161010f578063db27ec18116100ad578063e97ffacb1161007c578063e97ffacb14610cd5578063eefb8c4714610d07578063f09cfc6414610d2a578063f2fde38b14610d4d576103a3565b8063db27ec1814610c2b578063dfb267c214610c57578063e63a562e14610c80578063e7a324dc14610ccd576103a3565b8063cf7b684a116100e9578063cf7b684a14610b99578063d27569e714610bcb578063d5c3846414610bd3578063dab6ca4414610bf0576103a3565b8063b4b5ea5714610b45578063b8a9873214610b6b578063bf626ec114610b91576103a3565b806396a590c111610187578063a58848c511610156578063a58848c514610b07578063adae900214610b0f578063ae81dfe414610b35578063b1724b4614610b3d576103a3565b806396a590c114610a615780639929e88614610ab35780639a377b8214610abb578063a377f24414610ae1576103a3565b80638f32d59b116101c35780638f32d59b1461096a5780638f4ffcb1146109725780639436e7d4146109ff57806394c2ce5814610a35576103a3565b8063836eebee146108f85780638da5cb5b1461092a5780638dae1b1614610932576103a3565b8063450b0601116102ce57806368cefccc1161026c57806372ec97951161023b57806372ec9795146107bb5780637ba6f458146107d85780637ecebe0014610897578063800b64ca146108bd576103a3565b806368cefccc146106d75780636b6fde0e14610737578063704802751461076f57806370a0823114610795576103a3565b80635419675f116102a85780635419675f1461067e5780635e0be60714610686578063626ee2d91461068e57806362cf8a08146106b4576103a3565b8063450b06011461060a5780634b2fea1e146106305780635004b6e414610676576103a3565b80631785f53c1161034657806327dd1b001161031557806327dd1b001461055857806337e6b1c1146105845780633827fca5146105b6578063429b62e5146105e4576103a3565b80631785f53c146104be57806320606b70146104e45780632522d7ba146104ec57806325629ec014610515576103a3565b806307392cc01161038257806307392cc0146104145780630c09ddfd14610445578063104932cf1461049257806317748adc1461049a576103a3565b8062073f99146103a8578063026e402b146103c257806303a18fa3146103f0575b600080fd5b6103b0610d73565b60408051918252519081900360200190f35b6103ee600480360360408110156103d857600080fd5b506001600160a01b038135169060200135610d79565b005b6103f8610d93565b604080516001600160a01b039092168252519081900360200190f35b6104316004803603602081101561042a57600080fd5b5035610da2565b604080519115158252519081900360200190f35b6103ee600480360360a081101561045b57600080fd5b506001600160a01b0381358116916001600160601b0360208201351691604082013591606081013582169160809091013516610db7565b6103f8610e10565b6104a2610e1f565b604080516001600160601b039092168252519081900360200190f35b6103ee600480360360208110156104d457600080fd5b50356001600160a01b0316610e24565b6103b0610ec4565b6104a26004803603604081101561050257600080fd5b5063ffffffff8135169060200135610edf565b6103ee6004803603608081101561052b57600080fd5b506001600160601b03813516906020810135906001600160a01b0360408201358116916060013516610f45565b6103f86004803603604081101561056e57600080fd5b506001600160a01b038135169060200135610f5a565b6104a26004803603606081101561059a57600080fd5b506001600160a01b038135169060208101359060400135610f80565b6103ee600480360360408110156105cc57600080fd5b506001600160a01b0381358116916020013516610ff8565b610431600480360360208110156105fa57600080fd5b50356001600160a01b0316611135565b6103ee6004803603602081101561062057600080fd5b50356001600160a01b031661114a565b6103ee600480360360c081101561064657600080fd5b508035906020810135906040810135906060810135906001600160a01b03608082013581169160a001351661120f565b6103f86112ae565b6103ee6112bd565b6103ee61130b565b6103ee600480360360208110156106a457600080fd5b50356001600160a01b0316611409565b6104a2600480360360408110156106ca57600080fd5b50803590602001356114b8565b61070f600480360360608110156106ed57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff16611631565b6040805163ffffffff90931683526001600160601b0390911660208301528051918290030190f35b61070f6004803603606081101561074d57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff1661166c565b6103ee6004803603602081101561078557600080fd5b50356001600160a01b03166116a7565b6104a2600480360360208110156107ab57600080fd5b50356001600160a01b031661174a565b6103b0600480360360208110156107d157600080fd5b50356117b9565b6107fe600480360360208110156107ee57600080fd5b50356001600160a01b0316611823565b604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561084257818101518382015260200161082a565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610881578181015183820152602001610869565b5050505090500194505050505060405180910390f35b6103b0600480360360208110156108ad57600080fd5b50356001600160a01b031661195e565b6103ee600480360360608110156108d357600080fd5b5080356001600160601b031690602081013590604001356001600160a01b0316611970565b6104a26004803603606081101561090e57600080fd5b506001600160a01b0381351690602081013590604001356119e2565b6103f8611a3a565b6104a26004803603608081101561094857600080fd5b506001600160a01b038135169060208101359060408101359060600135611a49565b610431611acb565b6103ee6004803603608081101561098857600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b8111156109c157600080fd5b8201836020820111156109d357600080fd5b803590602001918460018302840111600160201b831117156109f457600080fd5b509092509050611aef565b610a1c60048036036020811015610a1557600080fd5b5035611dc1565b6040805163ffffffff9092168252519081900360200190f35b610a1c60048036036040811015610a4b57600080fd5b506001600160a01b038135169060200135611dd9565b610a8d60048036036040811015610a7757600080fd5b506001600160601b038135169060200135611dfc565b604080516001600160601b03938416815291909216602082015281519081900390910190f35b610431611e21565b6103ee60048036036020811015610ad157600080fd5b50356001600160a01b0316611e2a565b6103ee60048036036020811015610af757600080fd5b50356001600160a01b0316611edf565b6103f8611fa4565b61043160048036036020811015610b2557600080fd5b50356001600160a01b0316611fb3565b6103f8611fc8565b6103b0611fdc565b6104a260048036036020811015610b5b57600080fd5b50356001600160a01b0316611fe4565b6103ee60048036036020811015610b8157600080fd5b50356001600160601b0316611ffa565b6104a26120c9565b6104a260048036036060811015610baf57600080fd5b506001600160a01b0381351690602081013590604001356120df565b6104a261211c565b6104a260048036036020811015610be957600080fd5b5035612121565b6103ee60048036036060811015610c0657600080fd5b5080356001600160601b031690602081013590604001356001600160a01b031661217d565b610a1c60048036036040811015610c4157600080fd5b506001600160a01b038135169060200135612197565b61070f60048036036040811015610c6d57600080fd5b508035906020013563ffffffff166121ba565b6103ee600480360360e0811015610c9657600080fd5b506001600160a01b038135169060208101359060408101359060608101359060ff6080820135169060a08101359060c001356121ef565b6103b06124c5565b6104a260048036036060811015610ceb57600080fd5b506001600160a01b0381351690602081013590604001356124e0565b6103ee60048036036040811015610d1d57600080fd5b5080359060200135612748565b6104a260048036036040811015610d4057600080fd5b5080359060200135612930565b6103ee60048036036020811015610d6357600080fd5b50356001600160a01b0316612b28565b60015481565b610d84338383612b7c565b610d8f338383612c2e565b5050565b600d546001600160a01b031681565b60106020526000908152604090205460ff1681565b333014610dfa576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610e0985858585856000612d5b565b5050505050565b6011546001600160a01b031681565b600981565b610e2c611acb565b610e6c576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19169055815192835290517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f9281900390910190a150565b604051806043614d4182396043019050604051809103902081565b600080610eeb836117b9565b905063059fa6008101815b818111610f3c57610f3084610f1283868a63ffffffff16612f77565b6040518060800160405280605581526020016149b060559139612fdd565b93506212750001610ef6565b50505092915050565b610f5433858585856000612d5b565b50505050565b60046020908152600092835260408084209091529082529020546001600160a01b031681565b600080610f8c836117b9565b905063059fa6008101815b818111610fee576000610fac8883868a611a49565b90506001600160601b03811615610fe357610fe085826040518060800160405280604c8152602001614e7d604c9139612fdd565b94505b506212750001610f97565b5050509392505050565b611000611acb565b8061101a5750336000908152600f602052604090205460ff165b61105a576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b038083166000818152600e6020526040808220805460ff191660011790558051633c7925e360e11b815293851660048501525191926378f24bc6926024808301939282900301818387803b1580156110b857600080fd5b505af11580156110cc573d6000803e3d6000fd5b5050506001600160a01b038084166000818152600e6020908152604091829020805460ff1916905581519283529285169282019290925281517f2366e0b6b1af17c0ceed50685c570d519cae11e7faaf007bbe667e94a5ee3cd593509081900390910190a15050565b600f6020526000908152604090205460ff1681565b611152611acb565b611192576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166111ed576040805162461bcd60e51b815260206004820181905260248201527f76657374696e67207265676973747279206164647265737320696e76616c6964604482015290519081900360640190fd5b601180546001600160a01b0319166001600160a01b0392909216919091179055565b600061121c8642016117b9565b905063059fa6008511156112325763059fa60094505b600061123f8642016117b9565b90506000858383038161124e57fe5b0460010190506000818a8161125f57fe5b0490506001821061128057611280336001840383028c038689896001612d5b565b8387015b8381116112a15761129a3383838a8a6001612d5b565b8701611284565b5050505050505050505050565b6012546001600160a01b031681565b60055461010090046001600160a01b03166113095760405162461bcd60e51b81526004018080602001828103825260248152602001806148866024913960400191505060405180910390fd5b565b611313611acb565b611353576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6005805460ff19166001179055600354604080516370a0823160e01b815230600482015290517fd8cc4e8d808fe950b07bfffcd83eebf1190cd35ea77fe0c8a7d75a6e9b90e5c1926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156113ca57600080fd5b505afa1580156113de573d6000803e3d6000fd5b505050506040513d60208110156113f457600080fd5b505160408051918252519081900360200190a1565b611411611acb565b611451576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166114965760405162461bcd60e51b815260040180806020018281038252602181526020018061500d6021913960400191505060405180910390fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000818310156114f95760405162461bcd60e51b815260040180806020018281038252604c815260200180614cc1604c913960600191505060405180910390fd5b81830363059fa60081111561153f5760405162461bcd60e51b815260040180806020018281038252604d815260200180614d84604d913960600191505060405180910390fd5b6000620151808263059fa600036001600160601b03168161155c57fe5b049050611628600a621232106001600160601b03166115dc600a6009026115be621232108788026040518060400160405280601f81526020017f756e646572666c6f77206f6e207765696768742063616c63756c6174696f6e0081525061307b565b6040518060600160405280602d8152602001614b4b602d91396130e8565b6001600160601b0316816115ec57fe5b046040518060400160405280601e81526020017f6f766572666c6f77206f6e2077656967687420636f6d7075746174696f6e0000815250612fdd565b95945050505050565b600a60209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b600860209081526000938452604080852082529284528284209052825290205463ffffffff811690600160201b90046001600160601b031682565b6116af611acb565b6116ef576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6001600160a01b0381166000818152600f6020908152604091829020805460ff19166001179055815192835290517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399281900390910190a150565b6001546000905b63059fa600420181116117b3576117a78261176c8584613174565b6040518060400160405280601c81526020017f5374616b696e673a3a62616c616e63654f663a206f766572666c6f7700000000815250612fdd565b91506212750001611751565b50919050565b60006001548210156117fc5760405162461bcd60e51b815260040180806020018281038252604d815260200180614ad1604d913960600191505060405180910390fd5b60006212750060015484038161180e57fe5b04905060015462127500820201915050919050565b606080600061183763059fa60042016117b9565b60015490915060009062127500015b8281116118795760006118598783613174565b6001600160601b0316111561186f576001909101905b6212750001611846565b50806040519080825280602002602001820160405280156118a4578160200160208202803883390190505b509350806040519080825280602002602001820160405280156118d1578160200160208202803883390190505b5060015490935060009062127500015b8381116119555760006118f48883613174565b90506001600160601b0381161561194a578187848151811061191257fe5b6020026020010181815250508086848151811061192b57fe5b6001600160601b03909216602092830291909101909101526001909201915b5062127500016118e1565b50505050915091565b600c6020526000908152604090205481565b336000908152600e602052604090205460ff166119c3576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b6119d083838360016131d5565b6119dd8383836001613521565b505050565b6000806119ee836117b9565b905063059fa6008101815b818111610fee57611a2e84611a108984878b613583565b6040518060800160405280604a8152602001614c77604a9139612fdd565b935062127500016119f9565b6000546001600160a01b031690565b600080611a578686856135eb565b90506001600160601b03811615611abd576000611a7486866114b8565b9050600a6001600160601b0316611aa483836040518060600160405280603d8152602001614b78603d91396130e8565b6001600160601b031681611ab457fe5b04925050611ac2565b600091505b50949350505050565b600080546001600160a01b0316611ae061385f565b6001600160a01b031614905090565b611af7613863565b6001600160a01b0316336001600160a01b031614611b4b576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b336001600160a01b03841614611b97576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60006060611ba3613872565b90506000611be685858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138ca92505050565b905060005b8251811015611c3457828181518110611c0057fe5b60200260200101516001600160e01b031916826001600160e01b0319161415611c2c5760019350611c34565b600101611beb565b5082611c7f576040805162461bcd60e51b81526020600482015260156024820152741b595d1a1bd9081a5cc81b9bdd08185b1b1bddd959605a1b604482015290519081900360640190fd5b60405160006020820181815290918291829189918991603c018383808284378083019250505093505050506040516020818303038152906040528060200190516060811015611ccd57600080fd5b50602081015160409091015190925090506001600160a01b03808316908b1614611d30576040805162461bcd60e51b815260206004820152600f60248201526e0e6cadcc8cae440dad2e6dac2e8c6d608b1b604482015290519081900360640190fd5b888114611d76576040805162461bcd60e51b815260206004820152600f60248201526e0c2dadeeadce840dad2e6dac2e8c6d608b1b604482015290519081900360640190fd5b611db587878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506138d192505050565b50505050505050505050565b60076020526000908152604090205463ffffffff1681565b600960209081526000928352604080842090915290825290205463ffffffff1681565b600080611e098484613a3a565b6000611e158585613ae5565b94859003959350505050565b60