756 lines
166 KiB
JSON
Generated
756 lines
166 KiB
JSON
Generated
{
|
|
"schemaVersion": "2.0.0",
|
|
"contractName": "StakingProxy",
|
|
"compilerOutput": {
|
|
"abi": [
|
|
{
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "_stakingContract",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "constructor"
|
|
},
|
|
{
|
|
"anonymous": false,
|
|
"inputs": [
|
|
{
|
|
"indexed": true,
|
|
"internalType": "address",
|
|
"name": "target",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"indexed": true,
|
|
"internalType": "address",
|
|
"name": "caller",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "AuthorizedAddressAdded",
|
|
"type": "event"
|
|
},
|
|
{
|
|
"anonymous": false,
|
|
"inputs": [
|
|
{
|
|
"indexed": true,
|
|
"internalType": "address",
|
|
"name": "target",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"indexed": true,
|
|
"internalType": "address",
|
|
"name": "caller",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "AuthorizedAddressRemoved",
|
|
"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": false,
|
|
"internalType": "address",
|
|
"name": "newStakingContractAddress",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "StakingContractAttachedToProxy",
|
|
"type": "event"
|
|
},
|
|
{
|
|
"anonymous": false,
|
|
"inputs": [],
|
|
"name": "StakingContractDetachedFromProxy",
|
|
"type": "event"
|
|
},
|
|
{
|
|
"payable": true,
|
|
"stateMutability": "payable",
|
|
"type": "fallback"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "target",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "addAuthorizedAddress",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "aggregatedStatsByEpoch",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "rewardsAvailable",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "numPoolsToFinalize",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "totalFeesCollected",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "totalWeightedStake",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "totalRewardsFinalized",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "assertValidStorageParams",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "_stakingContract",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "attachStakingContract",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "authorities",
|
|
"outputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "authorized",
|
|
"outputs": [
|
|
{
|
|
"internalType": "bool",
|
|
"name": "",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"internalType": "bytes[]",
|
|
"name": "data",
|
|
"type": "bytes[]"
|
|
}
|
|
],
|
|
"name": "batchExecute",
|
|
"outputs": [
|
|
{
|
|
"internalType": "bytes[]",
|
|
"name": "batchReturnData",
|
|
"type": "bytes[]"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "cobbDouglasAlphaDenominator",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint32",
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "cobbDouglasAlphaNumerator",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint32",
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "currentEpoch",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "currentEpochStartTimeInSeconds",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [],
|
|
"name": "detachStakingContract",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "epochDurationInSeconds",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "getAuthorizedAddresses",
|
|
"outputs": [
|
|
{
|
|
"internalType": "address[]",
|
|
"name": "",
|
|
"type": "address[]"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "lastPoolId",
|
|
"outputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "minimumPoolStake",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "owner",
|
|
"outputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "poolIdByMaker",
|
|
"outputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "",
|
|
"type": "bytes32"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "poolStatsByEpoch",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "feesCollected",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "weightedStake",
|
|
"type": "uint256"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "membersStake",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "target",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "removeAuthorizedAddress",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": false,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "target",
|
|
"type": "address"
|
|
},
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "index",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"name": "removeAuthorizedAddressAtIndex",
|
|
"outputs": [],
|
|
"payable": false,
|
|
"stateMutability": "nonpayable",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "rewardDelegatedStakeWeight",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint32",
|
|
"name": "",
|
|
"type": "uint32"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "bytes32",
|
|
"name": "",
|
|
"type": "bytes32"
|
|
}
|
|
],
|
|
"name": "rewardsByPoolId",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "stakingContract",
|
|
"outputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"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": true,
|
|
"inputs": [
|
|
{
|
|
"internalType": "address",
|
|
"name": "",
|
|
"type": "address"
|
|
}
|
|
],
|
|
"name": "validExchanges",
|
|
"outputs": [
|
|
{
|
|
"internalType": "bool",
|
|
"name": "",
|
|
"type": "bool"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
},
|
|
{
|
|
"constant": true,
|
|
"inputs": [],
|
|
"name": "wethReservedForPoolRewards",
|
|
"outputs": [
|
|
{
|
|
"internalType": "uint256",
|
|
"name": "",
|
|
"type": "uint256"
|
|
}
|
|
],
|
|
"payable": false,
|
|
"stateMutability": "view",
|
|
"type": "function"
|
|
}
|
|
],
|
|
"devdoc": {
|
|
"methods": {
|
|
"addAuthorizedAddress(address)": {
|
|
"details": "Authorizes an address.",
|
|
"params": {
|
|
"target": "Address to authorize."
|
|
}
|
|
},
|
|
"assertValidStorageParams()": {
|
|
"details": "Asserts that an epoch is between 5 and 30 days long."
|
|
},
|
|
"attachStakingContract(address)": {
|
|
"details": "Attach a staking contract; future calls will be delegated to the staking contract. Note that this is callable only by an authorized address.",
|
|
"params": {
|
|
"_stakingContract": "Address of staking contract."
|
|
}
|
|
},
|
|
"batchExecute(bytes[])": {
|
|
"details": "Batch executes a series of calls to the staking contract.",
|
|
"params": {
|
|
"data": "An array of data that encodes a sequence of functions to call in the staking contracts."
|
|
}
|
|
},
|
|
"constructor": {
|
|
"details": "Constructor.",
|
|
"params": {
|
|
"_stakingContract": "Staking contract to delegate calls to."
|
|
}
|
|
},
|
|
"detachStakingContract()": {
|
|
"details": "Detach the current staking contract. Note that this is callable only by an authorized address."
|
|
},
|
|
"getAuthorizedAddresses()": {
|
|
"details": "Gets all authorized addresses.",
|
|
"return": "Array of authorized addresses."
|
|
},
|
|
"removeAuthorizedAddress(address)": {
|
|
"details": "Removes authorizion of an address.",
|
|
"params": {
|
|
"target": "Address to remove authorization from."
|
|
}
|
|
},
|
|
"removeAuthorizedAddressAtIndex(address,uint256)": {
|
|
"details": "Removes authorizion of an address.",
|
|
"params": {
|
|
"index": "Index of target in authorities array.",
|
|
"target": "Address to remove authorization from."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"evm": {
|
|
"bytecode": {
|
|
"linkReferences": {},
|
|
"object": "0x60806040523480156200001157600080fd5b5060405162001ee938038062001ee983398101604081905262000034916200071a565b600080546001600160a01b031916339081179091556200005d906001600160e01b036200008e16565b62000071816001600160e01b036200019116565b620000873360006001600160e01b03620002b716565b50620007d0565b6001600160a01b038116620000c757620000c7620000b66200046060201b620012bd1760201c565b6200049860201b62000efc1760201c565b6001600160a01b03811660009081526001602052604090205460ff1615620001035762000103620000b682620004a060201b620012f41760201c565b6001600160a01b0381166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180546001600160a01b03191684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380546001600160a01b0319166001600160a01b0383161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490620001de90839062000786565b60405180910390a160035460408051600481526024810182526020810180516001600160e01b03167fe1c7392a0000000000000000000000000000000000000000000000000000000017905290516000926060926001600160a01b03909116916200024a91906200074a565b600060405180830381855af49150503d806000811462000287576040519150601f19603f3d011682016040523d82523d6000602084013e6200028c565b606091505b5091509150816200029f57805160208201fd5b620002b26001600160e01b036200050e16565b505050565b6001600160a01b03821660009081526001602052604090205460ff16620002f257620002f2620000b683620005e960201b62000e5d1760201c565b60025481106200031c576200031c620000b6826002805490506200060660201b6200130f1760201c565b816001600160a01b0316600282815481106200033457fe5b6000918252602090912001546001600160a01b0316146200038d576200038d620000b6600283815481106200036557fe5b600091825260209182902001546001600160a01b03169085906200132c62000677821b17901c565b6001600160a01b0382166000908152600160205260409020805460ff19169055600280546000198101908110620003c057fe5b600091825260209091200154600280546001600160a01b039092169183908110620003e757fe5b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055600280546000190190620004259082620006d8565b5060405133906001600160a01b038416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f57654fe40000000000000000000000000000000000000000000000000000000060208201525b90565b805160208201fd5b606063de16f1a060e01b82604051602401620004bd919062000786565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b6011546206978081108062000525575062278d0081115b15620005465762000546620000b660046200069660201b6200118a1760201c565b60145463ffffffff6401000000008204811691168110806200056c575063ffffffff8116155b156200058d576200058d620000b660006200069660201b6200118a1760201c565b601254620f424063ffffffff9091161115620005be57620005be620000b660016200069660201b6200118a1760201c565b60026013541015620005e557620005e5620000b660036200069660201b6200118a1760201c565b5050565b606063eb5108a260e01b82604051602401620004bd919062000786565b606063e9f8377160e01b838360405160240162000625929190620007b4565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b606063140a84db60e01b8383604051602401620006259291906200079a565b60607ffc45bd1100000000000000000000000000000000000000000000000000000000826004811115620006c657fe5b604051602401620004bd9190620007c2565b815481835581811115620002b257600083815260209020620002b29181019083016200049591905b8082111562000716576000815560010162000700565b5090565b6000602082840312156200072c578081fd5b81516001600160a01b038116811462000743578182fd5b9392505050565b60008251815b818110156200076c576020818601810151858301520162000750565b818111156200077b5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b918252602082015260400190565b60ff91909116815260200190565b61170980620007e06000396000f3fe6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610511578063ee99205c14610526578063f18765321461053b578063f2fde38b1461055b576101ac565b8063c6f3a427146104c5578063d39de6e9146104da578063e0ee036e146104fc576101ac565b8063a657e579116100c6578063a657e5791461045b578063b053152414610470578063b918161114610485578063c18c9141146104a5576101ac565b80638da5cb5b146104115780639ad2674414610426578063a26171e214610446576101ac565b80635bd4ab73116101595780637071293911610133578063707129391461038d57806376671808146103ad57806381666796146103c2578063856a65eb146103e4576101ac565b80635bd4ab731461032b578063634038011461035857806366615d561461036d576101ac565b806342f1181e1161018a57806342f1181e146102bc578063494503d4146102dc578063587da02314610309576101ac565b80632a94c2791461023c57806337b006a61461027457806338229d931461028b575b60035460405160009160609173ffffffffffffffffffffffffffffffffffffffff909116906101de908490369061149b565b600060405180830381855af49150503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b5091509150816000811461023457815182602001f35b815182602001fd5b34801561024857600080fd5b5061025c61025736600461147a565b61057b565b60405161026b9392919061163e565b60405180910390f35b34801561028057600080fd5b506102896105a7565b005b34801561029757600080fd5b506102ab6102a6366004611462565b610602565b60405161026b959493929190611654565b3480156102c857600080fd5b506102896102d73660046113aa565b610631565b3480156102e857600080fd5b506102fc6102f7366004611462565b610645565b60405161026b91906114c7565b34801561031557600080fd5b5061031e610679565b60405161026b9190611627565b34801561033757600080fd5b5061034b6103463660046113aa565b61067f565b60405161026b919061161c565b34801561036457600080fd5b5061031e610694565b34801561037957600080fd5b506102896103883660046113aa565b61069a565b34801561039957600080fd5b506102896103a83660046113aa565b6106ab565b3480156103b957600080fd5b5061031e610765565b3480156103ce57600080fd5b506103d761076b565b60405161026b9190611677565b3480156103f057600080fd5b506104046103ff3660046113f6565b610777565b60405161026b9190611568565b34801561041d57600080fd5b506102fc610904565b34801561043257600080fd5b506102896104413660046113cc565b610920565b34801561045257600080fd5b5061031e610932565b34801561046757600080fd5b5061031e610938565b34801561047c57600080fd5b5061031e61093e565b34801561049157600080fd5b5061034b6104a03660046113aa565b610944565b3480156104b157600080fd5b5061031e6104c0366004611462565b610959565b3480156104d157600080fd5b5061028961096b565b3480156104e657600080fd5b506104ef610a04565b60405161026b919061150f565b34801561050857600080fd5b506103d7610a74565b34801561051d57600080fd5b506103d7610a80565b34801561053257600080fd5b506102fc610a94565b34801561054757600080fd5b5061031e6105563660046113aa565b610ab0565b34801561056757600080fd5b506102896105763660046113aa565b610ac2565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b6105af610b65565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b610639610b8a565b61064281610bd1565b50565b6002818154811061065257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b6106a2610b65565b61064281610d02565b6106b3610b8a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166106f1576106f16106ec82610e5d565b610efc565b60005b600254811015610761578173ffffffffffffffffffffffffffffffffffffffff166002828154811061072257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610759576107548282610f04565b610761565b6001016106f4565b5050565b600c5481565b60145463ffffffff1681565b604080518281526020808402820101909152606090600090829084908180156107b457816020015b606081526020019060019003908161079f5790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff16806107e1576107e16106ec611153565b60005b8281146108f8578173ffffffffffffffffffffffffffffffffffffffff1688888381811061080e57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261084857600080fd5b9091016020810191503567ffffffffffffffff81111561086757600080fd5b3681900382131561087757600080fd5b60405161088592919061149b565b600060405180830381855af49150503d80600081146108c0576040519150601f19603f3d011682016040523d82523d6000602084013e6108c5565b606091505b509095509350846108d857835184602001fd5b838682815181106108e557fe5b60209081029190910101526001016107e4565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610928610b8a565b6107618282610f04565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b60115462069780811080610981575062278d0081115b15610993576109936106ec600461118a565b60145463ffffffff6401000000008204811691168110806109b8575063ffffffff8116155b156109ca576109ca6106ec600061118a565b601254620f424063ffffffff90911611156109ec576109ec6106ec600161118a565b60026013541015610761576107616106ec600361118a565b60606002805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a3e575b505050505090505b90565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610aca610b8a565b73ffffffffffffffffffffffffffffffffffffffff8116610af557610af06106ec6111c9565b610642565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610b8857610b886106ec33611200565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b8857600054610b88906106ec90339073ffffffffffffffffffffffffffffffffffffffff1661121b565b73ffffffffffffffffffffffffffffffffffffffff8116610bf757610bf76106ec6112bd565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c3157610c316106ec826112f4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610d729083906114c7565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610dfe91906114ab565b600060405180830381855af49150503d8060008114610e39576040519150601f19603f3d011682016040523d82523d6000602084013e610e3e565b606091505b509150915081610e5057805160208201fd5b610e5861096b565b505050565b606063eb5108a260e01b82604051602401610e7891906114c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f3d57610f3d6106ec83610e5d565b6002548110610f5857610f586106ec8260028054905061130f565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610f7c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610fde57610fde6106ec60028381548110610fb657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461132c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061105957fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061108c57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061110b9082611349565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f6eff828500000000000000000000000000000000000000000000000000000000602082015290565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111b957fe5b604051602401610e789190611688565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610e7891906114c7565b6060631de45ad160e01b83836040516024016112389291906114e8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610e7891906114c7565b606063e9f8377160e01b8383604051602401611238929190611630565b606063140a84db60e01b83836040516024016112389291906114e8565b815481835581811115610e5857600083815260209020610e58918101908301610a7191905b80821115611382576000815560010161136e565b5090565b803573ffffffffffffffffffffffffffffffffffffffff811681146108fe57600080fd5b6000602082840312156113bb578081fd5b6113c58383611386565b9392505050565b600080604083850312156113de578081fd5b6113e88484611386565b946020939093013593505050565b60008060208385031215611408578182fd5b823567ffffffffffffffff8082111561141f578384fd5b81850186601f820112611430578485fd5b8035925081831115611440578485fd5b8660208085028301011115611453578485fd5b60200196919550909350505050565b600060208284031215611473578081fd5b5035919050565b6000806040838503121561148c578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114bd818460208701611696565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561155d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611529565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561160f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115d2818989018a8501611696565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169590950186019450928501929085019060010161158d565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116b1578181015183820152602001611699565b838111156116c0576000848401525b5050505056fea365627a7a72315820234dbfb1979e729e4b90ba58749ef12a931b7df77beb672b5d45d410d232fff36c6578706572696d656e74616cf564736f6c634300050c0040",
|
|
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1EE9 CODESIZE SUB DUP1 PUSH3 0x1EE9 DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH3 0x34 SWAP2 PUSH3 0x71A JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH3 0x5D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x8E AND JUMP JUMPDEST PUSH3 0x71 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x191 AND JUMP JUMPDEST PUSH3 0x87 CALLER PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x2B7 AND JUMP JUMPDEST POP PUSH3 0x7D0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0xC7 JUMPI PUSH3 0xC7 PUSH3 0xB6 PUSH3 0x460 PUSH1 0x20 SHL PUSH3 0x12BD OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0x498 PUSH1 0x20 SHL PUSH3 0xEFC OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH3 0x103 JUMPI PUSH3 0x103 PUSH3 0xB6 DUP3 PUSH3 0x4A0 PUSH1 0x20 SHL PUSH3 0x12F4 OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x48368388F801041F7690185C4E28B6F3505C740C47BE8AC104B55DF666BFC84 SWAP1 PUSH3 0x1DE SWAP1 DUP4 SWAP1 PUSH3 0x786 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH32 0xE1C7392A00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x60 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 PUSH3 0x24A SWAP2 SWAP1 PUSH3 0x74A JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH3 0x287 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH3 0x28C JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH3 0x29F JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH3 0x2B2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB PUSH3 0x50E AND JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH3 0x2F2 JUMPI PUSH3 0x2F2 PUSH3 0xB6 DUP4 PUSH3 0x5E9 PUSH1 0x20 SHL PUSH3 0xE5D OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH3 0x31C JUMPI PUSH3 0x31C PUSH3 0xB6 DUP3 PUSH1 0x2 DUP1 SLOAD SWAP1 POP PUSH3 0x606 PUSH1 0x20 SHL PUSH3 0x130F OR PUSH1 0x20 SHR JUMP JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT PUSH3 0x334 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ PUSH3 0x38D JUMPI PUSH3 0x38D PUSH3 0xB6 PUSH1 0x2 DUP4 DUP2 SLOAD DUP2 LT PUSH3 0x365 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP2 DUP3 SWAP1 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP6 SWAP1 PUSH3 0x132C PUSH3 0x677 DUP3 SHL OR SWAP1 SHR JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH3 0x3C0 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH3 0x3E7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH1 0x0 NOT ADD SWAP1 PUSH3 0x425 SWAP1 DUP3 PUSH3 0x6D8 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x57654FE400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE JUMPDEST SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH1 0x60 PUSH4 0xDE16F1A0 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x4BD SWAP2 SWAP1 PUSH3 0x786 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH3 0x69780 DUP2 LT DUP1 PUSH3 0x525 JUMPI POP PUSH3 0x278D00 DUP2 GT JUMPDEST ISZERO PUSH3 0x546 JUMPI PUSH3 0x546 PUSH3 0xB6 PUSH1 0x4 PUSH3 0x696 PUSH1 0x20 SHL PUSH3 0x118A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH4 0xFFFFFFFF PUSH5 0x100000000 DUP3 DIV DUP2 AND SWAP2 AND DUP2 LT DUP1 PUSH3 0x56C JUMPI POP PUSH4 0xFFFFFFFF DUP2 AND ISZERO JUMPDEST ISZERO PUSH3 0x58D JUMPI PUSH3 0x58D PUSH3 0xB6 PUSH1 0x0 PUSH3 0x696 PUSH1 0x20 SHL PUSH3 0x118A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH3 0xF4240 PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND GT ISZERO PUSH3 0x5BE JUMPI PUSH3 0x5BE PUSH3 0xB6 PUSH1 0x1 PUSH3 0x696 PUSH1 0x20 SHL PUSH3 0x118A OR PUSH1 0x20 SHR JUMP JUMPDEST PUSH1 0x2 PUSH1 0x13 SLOAD LT ISZERO PUSH3 0x5E5 JUMPI PUSH3 0x5E5 PUSH3 0xB6 PUSH1 0x3 PUSH3 0x696 PUSH1 0x20 SHL PUSH3 0x118A OR PUSH1 0x20 SHR JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x60 PUSH4 0xEB5108A2 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x4BD SWAP2 SWAP1 PUSH3 0x786 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xE9F83771 PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x625 SWAP3 SWAP2 SWAP1 PUSH3 0x7B4 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH4 0x140A84DB PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x625 SWAP3 SWAP2 SWAP1 PUSH3 0x79A JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFC45BD1100000000000000000000000000000000000000000000000000000000 DUP3 PUSH1 0x4 DUP2 GT ISZERO PUSH3 0x6C6 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH3 0x4BD SWAP2 SWAP1 PUSH3 0x7C2 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH3 0x2B2 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH3 0x2B2 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH3 0x495 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x716 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x700 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x72C JUMPI DUP1 DUP2 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH3 0x743 JUMPI DUP2 DUP3 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD DUP2 JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x76C JUMPI PUSH1 0x20 DUP2 DUP7 ADD DUP2 ADD MLOAD DUP6 DUP4 ADD MSTORE ADD PUSH3 0x750 JUMP JUMPDEST DUP2 DUP2 GT ISZERO PUSH3 0x77B JUMPI DUP3 DUP3 DUP6 ADD MSTORE JUMPDEST POP SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH2 0x1709 DUP1 PUSH3 0x7E0 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1AC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xC6F3A427 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE8EEB3F8 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE8EEB3F8 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xEE99205C EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xF1876532 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x55B JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xC6F3A427 EQ PUSH2 0x4C5 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0xE0EE036E EQ PUSH2 0x4FC JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xA657E579 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0xA657E579 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0xB0531524 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xC18C9141 EQ PUSH2 0x4A5 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0xA26171E2 EQ PUSH2 0x446 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x5BD4AB73 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x70712939 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0x76671808 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0x81666796 EQ PUSH2 0x3C2 JUMPI DUP1 PUSH4 0x856A65EB EQ PUSH2 0x3E4 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x5BD4AB73 EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x63403801 EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x66615D56 EQ PUSH2 0x36D JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x42F1181E GT PUSH2 0x18A JUMPI DUP1 PUSH4 0x42F1181E EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0x587DA023 EQ PUSH2 0x309 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x2A94C279 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x37B006A6 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0x38229D93 EQ PUSH2 0x28B JUMPI JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x1DE SWAP1 DUP5 SWAP1 CALLDATASIZE SWAP1 PUSH2 0x149B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x219 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x21E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI DUP2 MLOAD DUP3 PUSH1 0x20 ADD RETURN JUMPDEST DUP2 MLOAD DUP3 PUSH1 0x20 ADD REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x163E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x5A7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x602 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1654 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x631 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0x2F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1627 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x346 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x67F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x161C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x694 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x388 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x69A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x3A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x6AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x765 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0x76B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1677 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x13F6 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1568 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0x904 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x13CC JUMP JUMPDEST PUSH2 0x920 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x932 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x938 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x93E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x944 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x4C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x959 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x96B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4EF PUSH2 0xA04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x150F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0xA74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0xA80 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0xA94 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x556 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0xAB0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x576 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x5AF PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6CAEDCB22A5C22C8EBD0CAF751FEC1228A6E006E6EE37169321E02D31ECC8183 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP6 JUMP JUMPDEST PUSH2 0x639 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0xBD1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x652 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6A2 PUSH2 0xB65 JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x6B3 PUSH2 0xB8A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x6F1 JUMPI PUSH2 0x6F1 PUSH2 0x6EC DUP3 PUSH2 0xE5D JUMP JUMPDEST PUSH2 0xEFC JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x761 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x722 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x759 JUMPI PUSH2 0x754 DUP3 DUP3 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x761 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x6F4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP2 DUP1 ISZERO PUSH2 0x7B4 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x79F JUMPI SWAP1 POP JUMPDEST POP PUSH1 0x3 SLOAD SWAP1 SWAP5 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x7E1 JUMPI PUSH2 0x7E1 PUSH2 0x6EC PUSH2 0x1153 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 EQ PUSH2 0x8F8 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0x80E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL DUP3 ADD SWAP1 POP DUP1 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 CALLDATASIZE DUP5 SWAP1 SUB ADD DUP2 SLT PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 ADD PUSH1 0x20 DUP2 ADD SWAP2 POP CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x885 SWAP3 SWAP2 SWAP1 PUSH2 0x149B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x8C0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP6 POP SWAP4 POP DUP5 PUSH2 0x8D8 JUMPI DUP4 MLOAD DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8E5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x7E4 JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x928 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x761 DUP3 DUP3 PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH3 0x69780 DUP2 LT DUP1 PUSH2 0x981 JUMPI POP PUSH3 0x278D00 DUP2 GT JUMPDEST ISZERO PUSH2 0x993 JUMPI PUSH2 0x993 PUSH2 0x6EC PUSH1 0x4 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH4 0xFFFFFFFF PUSH5 0x100000000 DUP3 DIV DUP2 AND SWAP2 AND DUP2 LT DUP1 PUSH2 0x9B8 JUMPI POP PUSH4 0xFFFFFFFF DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x9CA JUMPI PUSH2 0x9CA PUSH2 0x6EC PUSH1 0x0 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH3 0xF4240 PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND GT ISZERO PUSH2 0x9EC JUMPI PUSH2 0x9EC PUSH2 0x6EC PUSH1 0x1 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x13 SLOAD LT ISZERO PUSH2 0x761 JUMPI PUSH2 0x761 PUSH2 0x6EC PUSH1 0x3 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xA69 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA3E JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xACA PUSH2 0xB8A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAF5 JUMPI PUSH2 0xAF0 PUSH2 0x6EC PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x642 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 CALLER SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB88 JUMPI PUSH2 0xB88 PUSH2 0x6EC CALLER PUSH2 0x1200 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB88 JUMPI PUSH1 0x0 SLOAD PUSH2 0xB88 SWAP1 PUSH2 0x6EC SWAP1 CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x121B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xBF7 JUMPI PUSH2 0xBF7 PUSH2 0x6EC PUSH2 0x12BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC31 JUMPI PUSH2 0xC31 PUSH2 0x6EC DUP3 PUSH2 0x12F4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x48368388F801041F7690185C4E28B6F3505C740C47BE8AC104B55DF666BFC84 SWAP1 PUSH2 0xD72 SWAP1 DUP4 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE1C7392A00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x60 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH2 0xDFE SWAP2 SWAP1 PUSH2 0x14AB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE39 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xE50 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH2 0xE58 PUSH2 0x96B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH4 0xEB5108A2 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF3D JUMPI PUSH2 0xF3D PUSH2 0x6EC DUP4 PUSH2 0xE5D JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xF58 JUMPI PUSH2 0xF58 PUSH2 0x6EC DUP3 PUSH1 0x2 DUP1 SLOAD SWAP1 POP PUSH2 0x130F JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xF7C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xFDE JUMPI PUSH2 0xFDE PUSH2 0x6EC PUSH1 0x2 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xFB6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x132C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1059 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x108C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x110B SWAP1 DUP3 PUSH2 0x1349 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x6EFF828500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFC45BD1100000000000000000000000000000000000000000000000000000000 DUP3 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x11B9 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x1688 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0xE69EDC3E00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xB65A25B9 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x60 PUSH4 0x1DE45AD1 PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x14E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x57654FE400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xDE16F1A0 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xE9F83771 PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x60 PUSH4 0x140A84DB PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x14E8 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xE58 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xE58 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xA71 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1382 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x136E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13BB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x13C5 DUP4 DUP4 PUSH2 0x1386 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13DE JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x13E8 DUP5 DUP5 PUSH2 0x1386 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1408 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x141F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x1430 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x1440 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP1 DUP6 MUL DUP4 ADD ADD GT ISZERO PUSH2 0x1453 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1473 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x148C JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x14BD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1696 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x155D JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1529 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x160F JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE DUP2 MLOAD DUP1 MLOAD DUP1 DUP8 MSTORE PUSH2 0x15D2 DUP2 DUP10 DUP10 ADD DUP11 DUP6 ADD PUSH2 0x1696 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP6 SWAP1 SWAP6 ADD DUP7 ADD SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x158D JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x16B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1699 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16C0 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0x23 0x4d 0xbf 0xb1 SWAP8 SWAP15 PUSH19 0x9E4B90BA58749EF12A931B7DF77BEB672B5D45 0xd4 LT 0xd2 ORIGIN SELFDESTRUCT RETURN PUSH13 0x6578706572696D656E74616CF5 PUSH5 0x736F6C6343 STOP SDIV 0xc STOP BLOCKHASH ",
|
|
"sourceMap": "839:6064:1:-;;;1063:423;8:9:-1;5:2;;;30:1;27;20:12;5:2;1063:423:1;;;;;;;;;;;;;;;;;;;;;820:5:62;:18;;-1:-1:-1;;;;;;820:18:62;828:10;820:18;;;;;;1224:33:1;;-1:-1:-1;;;;;1224:21:1;:33;:::i;:::-;1328:40;1351:16;-1:-1:-1;;;;;1328:22:1;:40;:::i;:::-;1433:46;1465:10;1477:1;-1:-1:-1;;;;;1433:31:1;:46;:::i;:::-;1063:423;839:6064;;2940:602:53;-1:-1:-1;;;;;3081:20:53;;3077:127;;3117:76;3139:53;:51;;;;;:53;;:::i;:::-;3117:21;;;;;:76;;:::i;:::-;-1:-1:-1;;;;;3279:18:53;;;;;;:10;:18;;;;;;;;3275:134;;;3313:85;3335:62;3390:6;3335:54;;;;;:62;;:::i;3313:85::-;-1:-1:-1;;;;;3419:18:53;;;;;;3440:4;3419:18;;;;;;;;:25;;-1:-1:-1;;3419:25:53;;;;;3454:11;27:10:-1;;23:18;;;45:23;;3454:24:53;;;;;;;;-1:-1:-1;;;;;;3454:24:53;;;;;3493:42;3524:10;;3419:18;3493:42;;;2940:602;:::o;6185:716:1:-;6313:15;:34;;-1:-1:-1;;;;;;6313:34:1;-1:-1:-1;;;;;6313:34:1;;;;;6362:48;;;;;;6313:34;;6362:48;;;;;;;;;;6546:15;;6588:53;;;22:32:-1;6:49;;6588:53:1;;;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;6611:29:1;179::-1;160:49;;6546:105:1;;6494:19;;6515:27;;-1:-1:-1;;;;;6546:15:1;;;;:105;;6588:53;6546:105;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;6493:158:1;;;;6666:14;6661:142;;6763:14;6757:21;6750:4;6734:14;6730:25;6723:56;6705:88;6868:26;-1:-1:-1;;;;;6868:24:1;:26;:::i;:::-;6185:716;;;:::o;3715:887:53:-;-1:-1:-1;;;;;3845:18:53;;;;;;:10;:18;;;;;;;;3840:131;;3879:81;3901:58;3952:6;3901:50;;;;;:58;;:::i;3879:81::-;3993:11;:18;3984:27;;3980:201;;4027:143;4049:120;4114:5;4137:11;:18;;;;4049:47;;;;;:120;;:::i;4027:143::-;4216:6;-1:-1:-1;;;;;4194:28:53;:11;4206:5;4194:18;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4194:18:53;:28;4190:212;;4238:153;4260:130;4334:11;4346:5;4334:18;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4334:18:53;;4370:6;;4260:56;;;;;:130;;:::i;4238:153::-;-1:-1:-1;;;;;4419:18:53;;;;;;:10;:18;;;;;4412:25;;-1:-1:-1;;4412:25:53;;;4468:11;4480:18;;-1:-1:-1;;4480:22:53;;;4468:35;;;;;;;;;;;;;;;;4447:11;:18;;-1:-1:-1;;;;;4468:35:53;;;;4459:5;;4447:18;;;;;;;;;;;;;;;:56;;-1:-1:-1;;;;;;4447:56:53;-1:-1:-1;;;;;4447:56:53;;;;;;;;;;4513:11;:23;;-1:-1:-1;;4513:23:53;;;;;;:::i;:::-;-1:-1:-1;4551:44:53;;4584:10;;-1:-1:-1;;;;;4551:44:53;;;;;;;;3715:887;;:::o;2994:161:54:-;3113:35;;;;;;;;;;;;;;;;;2994:161;;:::o;1511:170:59:-;1654:9;1648:16;1641:4;1630:9;1626:20;1619:46;2492:249:54;2593:12;1265:10;2664:40;;2718:6;2628:106;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;2628:106:54;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;2628:106:54;;;;179:29:-1;;;;160:49;;;2628:106:54;-1:-1:-1;2492:249:54;;;:::o;4461:1561:1:-;4632:22;;4694:6;4668:32;;;:69;;;4730:7;4704:23;:33;4668:69;4664:288;;;4753:188;4792:148;4857:69;4792:43;;;;;:148;;:::i;4753:188::-;5036:27;;;;;;;;;5077:25;:56;-1:-1:-1;5077:56:1;:93;;-1:-1:-1;5137:33:1;;;;5077:93;5073:315;;;5186:191;5225:151;5290:72;5225:43;;;;;:151;;:::i;5186:191::-;5455:26;;714:5:5;5455:44:1;:26;;;:44;5451:276;;;5515:201;5554:161;5619:82;5554:43;;;;;:161;;:::i;5515:201::-;5797:1;5778:16;;:20;5774:242;;;5814:191;5853:151;5918:72;5853:43;;;;;:151;;:::i;5814:191::-;4461:1561;;:::o;2747:241:54:-;2844:12;1416:10;2915:36;;2965:6;2879:102;;;;;;;;;1947:292;2078:12;955:10;2149:34;;2197:5;2216:6;2113:119;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;2113:119:54;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;2113:119:54;;;;179:29:-1;;;;160:49;;;2113:119:54;-1:-1:-1;1947:292:54;;;;:::o;1622:319::-;1767:12;801:10;1838:42;;1894:10;1918:6;1802:132;;;;;;;;;;7516:260:19;7629:12;7700:34;7754:4;7748:11;;;;;;;;7664:105;;;;;;;;;839:6064:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;146:263:-1;;261:2;249:9;240:7;236:23;232:32;229:2;;;-1:-1;;267:12;229:2;83:13;;-1:-1;;;;;2937:54;;3506:35;;3496:2;;-1:-1;;3545:12;3496:2;319:74;223:186;-1:-1;;;223:186;1133:262;;696:5;2583:12;-1:-1;3243:101;3257:6;3254:1;3251:13;3243:101;;;840:4;3324:11;;;;;3318:18;3305:11;;;3298:39;3272:10;3243:101;;;3359:6;3356:1;3353:13;3350:2;;;-1:-1;3415:6;3410:3;3406:16;3399:27;3350:2;-1:-1;871:16;;;;;1258:137;-1:-1;;1258:137;1402:213;-1:-1;;;;;2937:54;;;;487:37;;1520:2;1505:18;;1491:124;1622:324;-1:-1;;;;;2937:54;;;487:37;;2937:54;;1932:2;1917:18;;487:37;1768:2;1753:18;;1739:207;1953:324;970:37;;;2263:2;2248:18;;970:37;2099:2;2084:18;;2070:207;2284:205;3153:4;3142:16;;;;1086:35;;2398:2;2383:18;;2369:120;;839:6064:1;;;;;;"
|
|
},
|
|
"deployedBytecode": {
|
|
"linkReferences": {},
|
|
"object": "0x6080604052600436106101ac5760003560e01c80638da5cb5b116100ec578063c6f3a4271161008a578063e8eeb3f811610064578063e8eeb3f814610511578063ee99205c14610526578063f18765321461053b578063f2fde38b1461055b576101ac565b8063c6f3a427146104c5578063d39de6e9146104da578063e0ee036e146104fc576101ac565b8063a657e579116100c6578063a657e5791461045b578063b053152414610470578063b918161114610485578063c18c9141146104a5576101ac565b80638da5cb5b146104115780639ad2674414610426578063a26171e214610446576101ac565b80635bd4ab73116101595780637071293911610133578063707129391461038d57806376671808146103ad57806381666796146103c2578063856a65eb146103e4576101ac565b80635bd4ab731461032b578063634038011461035857806366615d561461036d576101ac565b806342f1181e1161018a57806342f1181e146102bc578063494503d4146102dc578063587da02314610309576101ac565b80632a94c2791461023c57806337b006a61461027457806338229d931461028b575b60035460405160009160609173ffffffffffffffffffffffffffffffffffffffff909116906101de908490369061149b565b600060405180830381855af49150503d8060008114610219576040519150601f19603f3d011682016040523d82523d6000602084013e61021e565b606091505b5091509150816000811461023457815182602001f35b815182602001fd5b34801561024857600080fd5b5061025c61025736600461147a565b61057b565b60405161026b9392919061163e565b60405180910390f35b34801561028057600080fd5b506102896105a7565b005b34801561029757600080fd5b506102ab6102a6366004611462565b610602565b60405161026b959493929190611654565b3480156102c857600080fd5b506102896102d73660046113aa565b610631565b3480156102e857600080fd5b506102fc6102f7366004611462565b610645565b60405161026b91906114c7565b34801561031557600080fd5b5061031e610679565b60405161026b9190611627565b34801561033757600080fd5b5061034b6103463660046113aa565b61067f565b60405161026b919061161c565b34801561036457600080fd5b5061031e610694565b34801561037957600080fd5b506102896103883660046113aa565b61069a565b34801561039957600080fd5b506102896103a83660046113aa565b6106ab565b3480156103b957600080fd5b5061031e610765565b3480156103ce57600080fd5b506103d761076b565b60405161026b9190611677565b3480156103f057600080fd5b506104046103ff3660046113f6565b610777565b60405161026b9190611568565b34801561041d57600080fd5b506102fc610904565b34801561043257600080fd5b506102896104413660046113cc565b610920565b34801561045257600080fd5b5061031e610932565b34801561046757600080fd5b5061031e610938565b34801561047c57600080fd5b5061031e61093e565b34801561049157600080fd5b5061034b6104a03660046113aa565b610944565b3480156104b157600080fd5b5061031e6104c0366004611462565b610959565b3480156104d157600080fd5b5061028961096b565b3480156104e657600080fd5b506104ef610a04565b60405161026b919061150f565b34801561050857600080fd5b506103d7610a74565b34801561051d57600080fd5b506103d7610a80565b34801561053257600080fd5b506102fc610a94565b34801561054757600080fd5b5061031e6105563660046113aa565b610ab0565b34801561056757600080fd5b506102896105763660046113aa565b610ac2565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b6105af610b65565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f6caedcb22a5c22c8ebd0caf751fec1228a6e006e6ee37169321e02d31ecc818390600090a1565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b610639610b8a565b61064281610bd1565b50565b6002818154811061065257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600d5481565b60106020526000908152604090205460ff1681565b60115481565b6106a2610b65565b61064281610d02565b6106b3610b8a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166106f1576106f16106ec82610e5d565b610efc565b60005b600254811015610761578173ffffffffffffffffffffffffffffffffffffffff166002828154811061072257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415610759576107548282610f04565b610761565b6001016106f4565b5050565b600c5481565b60145463ffffffff1681565b604080518281526020808402820101909152606090600090829084908180156107b457816020015b606081526020019060019003908161079f5790505b5060035490945073ffffffffffffffffffffffffffffffffffffffff16806107e1576107e16106ec611153565b60005b8281146108f8578173ffffffffffffffffffffffffffffffffffffffff1688888381811061080e57fe5b6020028201905080357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13684900301811261084857600080fd5b9091016020810191503567ffffffffffffffff81111561086757600080fd5b3681900382131561087757600080fd5b60405161088592919061149b565b600060405180830381855af49150503d80600081146108c0576040519150601f19603f3d011682016040523d82523d6000602084013e6108c5565b606091505b509095509350846108d857835184602001fd5b838682815181106108e557fe5b60209081029190910101526001016107e4565b50505050505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b610928610b8a565b6107618282610f04565b60135481565b60085481565b60175481565b60016020526000908152604090205460ff1681565b600b6020526000908152604090205481565b60115462069780811080610981575062278d0081115b15610993576109936106ec600461118a565b60145463ffffffff6401000000008204811691168110806109b8575063ffffffff8116155b156109ca576109ca6106ec600061118a565b601254620f424063ffffffff90911611156109ec576109ec6106ec600161118a565b60026013541015610761576107616106ec600361118a565b60606002805480602002602001604051908101604052809291908181526020018280548015610a6957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a3e575b505050505090505b90565b60125463ffffffff1681565b601454640100000000900463ffffffff1681565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b610aca610b8a565b73ffffffffffffffffffffffffffffffffffffffff8116610af557610af06106ec6111c9565b610642565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b3360009081526001602052604090205460ff16610b8857610b886106ec33611200565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b8857600054610b88906106ec90339073ffffffffffffffffffffffffffffffffffffffff1661121b565b73ffffffffffffffffffffffffffffffffffffffff8116610bf757610bf76106ec6112bd565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff1615610c3157610c316106ec826112f4565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790556040517f048368388f801041f7690185c4e28b6f3505c740c47be8ac104b55df666bfc8490610d729083906114c7565b60405180910390a160035460408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1c7392a00000000000000000000000000000000000000000000000000000000179052905160009260609273ffffffffffffffffffffffffffffffffffffffff90911691610dfe91906114ab565b600060405180830381855af49150503d8060008114610e39576040519150601f19603f3d011682016040523d82523d6000602084013e610e3e565b606091505b509150915081610e5057805160208201fd5b610e5861096b565b505050565b606063eb5108a260e01b82604051602401610e7891906114c7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b805160208201fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16610f3d57610f3d6106ec83610e5d565b6002548110610f5857610f586106ec8260028054905061130f565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110610f7c57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614610fde57610fde6106ec60028381548110610fb657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461132c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811061105957fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff909216918390811061108c57fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061110b9082611349565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60408051808201909152600481527f6eff828500000000000000000000000000000000000000000000000000000000602082015290565b60607ffc45bd11000000000000000000000000000000000000000000000000000000008260048111156111b957fe5b604051602401610e789190611688565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b606063b65a25b960e01b82604051602401610e7891906114c7565b6060631de45ad160e01b83836040516024016112389291906114e8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401610e7891906114c7565b606063e9f8377160e01b8383604051602401611238929190611630565b606063140a84db60e01b83836040516024016112389291906114e8565b815481835581811115610e5857600083815260209020610e58918101908301610a7191905b80821115611382576000815560010161136e565b5090565b803573ffffffffffffffffffffffffffffffffffffffff811681146108fe57600080fd5b6000602082840312156113bb578081fd5b6113c58383611386565b9392505050565b600080604083850312156113de578081fd5b6113e88484611386565b946020939093013593505050565b60008060208385031215611408578182fd5b823567ffffffffffffffff8082111561141f578384fd5b81850186601f820112611430578485fd5b8035925081831115611440578485fd5b8660208085028301011115611453578485fd5b60200196919550909350505050565b600060208284031215611473578081fd5b5035919050565b6000806040838503121561148c578182fd5b50508035926020909101359150565b6000828483379101908152919050565b600082516114bd818460208701611696565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561155d57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101611529565b509095945050505050565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561160f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526115d2818989018a8501611696565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169590950186019450928501929085019060010161158d565b5092979650505050505050565b901515815260200190565b90815260200190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156116b1578181015183820152602001611699565b838111156116c0576000848401525b5050505056fea365627a7a72315820234dbfb1979e729e4b90ba58749ef12a931b7df77beb672b5d45d410d232fff36c6578706572696d656e74616cf564736f6c634300050c0040",
|
|
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x1AC JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8DA5CB5B GT PUSH2 0xEC JUMPI DUP1 PUSH4 0xC6F3A427 GT PUSH2 0x8A JUMPI DUP1 PUSH4 0xE8EEB3F8 GT PUSH2 0x64 JUMPI DUP1 PUSH4 0xE8EEB3F8 EQ PUSH2 0x511 JUMPI DUP1 PUSH4 0xEE99205C EQ PUSH2 0x526 JUMPI DUP1 PUSH4 0xF1876532 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x55B JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xC6F3A427 EQ PUSH2 0x4C5 JUMPI DUP1 PUSH4 0xD39DE6E9 EQ PUSH2 0x4DA JUMPI DUP1 PUSH4 0xE0EE036E EQ PUSH2 0x4FC JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0xA657E579 GT PUSH2 0xC6 JUMPI DUP1 PUSH4 0xA657E579 EQ PUSH2 0x45B JUMPI DUP1 PUSH4 0xB0531524 EQ PUSH2 0x470 JUMPI DUP1 PUSH4 0xB9181611 EQ PUSH2 0x485 JUMPI DUP1 PUSH4 0xC18C9141 EQ PUSH2 0x4A5 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x411 JUMPI DUP1 PUSH4 0x9AD26744 EQ PUSH2 0x426 JUMPI DUP1 PUSH4 0xA26171E2 EQ PUSH2 0x446 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x5BD4AB73 GT PUSH2 0x159 JUMPI DUP1 PUSH4 0x70712939 GT PUSH2 0x133 JUMPI DUP1 PUSH4 0x70712939 EQ PUSH2 0x38D JUMPI DUP1 PUSH4 0x76671808 EQ PUSH2 0x3AD JUMPI DUP1 PUSH4 0x81666796 EQ PUSH2 0x3C2 JUMPI DUP1 PUSH4 0x856A65EB EQ PUSH2 0x3E4 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x5BD4AB73 EQ PUSH2 0x32B JUMPI DUP1 PUSH4 0x63403801 EQ PUSH2 0x358 JUMPI DUP1 PUSH4 0x66615D56 EQ PUSH2 0x36D JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x42F1181E GT PUSH2 0x18A JUMPI DUP1 PUSH4 0x42F1181E EQ PUSH2 0x2BC JUMPI DUP1 PUSH4 0x494503D4 EQ PUSH2 0x2DC JUMPI DUP1 PUSH4 0x587DA023 EQ PUSH2 0x309 JUMPI PUSH2 0x1AC JUMP JUMPDEST DUP1 PUSH4 0x2A94C279 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0x37B006A6 EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0x38229D93 EQ PUSH2 0x28B JUMPI JUMPDEST PUSH1 0x3 SLOAD PUSH1 0x40 MLOAD PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP1 PUSH2 0x1DE SWAP1 DUP5 SWAP1 CALLDATASIZE SWAP1 PUSH2 0x149B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x219 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x21E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH1 0x0 DUP2 EQ PUSH2 0x234 JUMPI DUP2 MLOAD DUP3 PUSH1 0x20 ADD RETURN JUMPDEST DUP2 MLOAD DUP3 PUSH1 0x20 ADD REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x248 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x25C PUSH2 0x257 CALLDATASIZE PUSH1 0x4 PUSH2 0x147A JUMP JUMPDEST PUSH2 0x57B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x163E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x280 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x5A7 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x297 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2AB PUSH2 0x2A6 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x602 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x1654 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2C8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x2D7 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x631 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2E8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0x2F7 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x645 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x679 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1627 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x337 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x346 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x67F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x161C JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x364 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x694 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x379 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x388 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x69A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x3A8 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x6AB JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3B9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x765 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3CE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0x76B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1677 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x404 PUSH2 0x3FF CALLDATASIZE PUSH1 0x4 PUSH2 0x13F6 JUMP JUMPDEST PUSH2 0x777 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x1568 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x41D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0x904 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x432 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x441 CALLDATASIZE PUSH1 0x4 PUSH2 0x13CC JUMP JUMPDEST PUSH2 0x920 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x452 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x932 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x467 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x938 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x47C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x93E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x491 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34B PUSH2 0x4A0 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0x944 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x4C0 CALLDATASIZE PUSH1 0x4 PUSH2 0x1462 JUMP JUMPDEST PUSH2 0x959 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x96B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4EF PUSH2 0xA04 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26B SWAP2 SWAP1 PUSH2 0x150F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x508 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0xA74 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x51D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D7 PUSH2 0xA80 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x532 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2FC PUSH2 0xA94 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x547 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x31E PUSH2 0x556 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0xAB0 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x567 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x289 PUSH2 0x576 CALLDATASIZE PUSH1 0x4 PUSH2 0x13AA JUMP JUMPDEST PUSH2 0xAC2 JUMP JUMPDEST PUSH1 0x15 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 SWAP1 SWAP3 ADD SLOAD SWAP1 SWAP2 SWAP1 DUP4 JUMP JUMPDEST PUSH2 0x5AF PUSH2 0xB65 JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x6CAEDCB22A5C22C8EBD0CAF751FEC1228A6E006E6EE37169321E02D31ECC8183 SWAP1 PUSH1 0x0 SWAP1 LOG1 JUMP JUMPDEST PUSH1 0x16 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP3 ADD SLOAD PUSH1 0x2 DUP4 ADD SLOAD PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 SWAP1 SWAP5 ADD SLOAD SWAP3 SWAP4 SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 DUP6 JUMP JUMPDEST PUSH2 0x639 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0xBD1 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x2 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x652 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0xD SLOAD DUP2 JUMP JUMPDEST PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x11 SLOAD DUP2 JUMP JUMPDEST PUSH2 0x6A2 PUSH2 0xB65 JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0xD02 JUMP JUMPDEST PUSH2 0x6B3 PUSH2 0xB8A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x6F1 JUMPI PUSH2 0x6F1 PUSH2 0x6EC DUP3 PUSH2 0xE5D JUMP JUMPDEST PUSH2 0xEFC JUMP JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x2 SLOAD DUP2 LT ISZERO PUSH2 0x761 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x722 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x759 JUMPI PUSH2 0x754 DUP3 DUP3 PUSH2 0xF04 JUMP JUMPDEST PUSH2 0x761 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x6F4 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0xC SLOAD DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP3 DUP2 MSTORE PUSH1 0x20 DUP1 DUP5 MUL DUP3 ADD ADD SWAP1 SWAP2 MSTORE PUSH1 0x60 SWAP1 PUSH1 0x0 SWAP1 DUP3 SWAP1 DUP5 SWAP1 DUP2 DUP1 ISZERO PUSH2 0x7B4 JUMPI DUP2 PUSH1 0x20 ADD JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 PUSH1 0x1 SWAP1 SUB SWAP1 DUP2 PUSH2 0x79F JUMPI SWAP1 POP JUMPDEST POP PUSH1 0x3 SLOAD SWAP1 SWAP5 POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP1 PUSH2 0x7E1 JUMPI PUSH2 0x7E1 PUSH2 0x6EC PUSH2 0x1153 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 EQ PUSH2 0x8F8 JUMPI DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 DUP9 DUP4 DUP2 DUP2 LT PUSH2 0x80E JUMPI INVALID JUMPDEST PUSH1 0x20 MUL DUP3 ADD SWAP1 POP DUP1 CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 CALLDATASIZE DUP5 SWAP1 SUB ADD DUP2 SLT PUSH2 0x848 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 SWAP2 ADD PUSH1 0x20 DUP2 ADD SWAP2 POP CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x867 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLDATASIZE DUP2 SWAP1 SUB DUP3 SGT ISZERO PUSH2 0x877 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x885 SWAP3 SWAP2 SWAP1 PUSH2 0x149B JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x8C0 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x8C5 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP1 SWAP6 POP SWAP4 POP DUP5 PUSH2 0x8D8 JUMPI DUP4 MLOAD DUP5 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x8E5 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x7E4 JUMP JUMPDEST POP POP POP POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH2 0x928 PUSH2 0xB8A JUMP JUMPDEST PUSH2 0x761 DUP3 DUP3 PUSH2 0xF04 JUMP JUMPDEST PUSH1 0x13 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x17 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x11 SLOAD PUSH3 0x69780 DUP2 LT DUP1 PUSH2 0x981 JUMPI POP PUSH3 0x278D00 DUP2 GT JUMPDEST ISZERO PUSH2 0x993 JUMPI PUSH2 0x993 PUSH2 0x6EC PUSH1 0x4 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH4 0xFFFFFFFF PUSH5 0x100000000 DUP3 DIV DUP2 AND SWAP2 AND DUP2 LT DUP1 PUSH2 0x9B8 JUMPI POP PUSH4 0xFFFFFFFF DUP2 AND ISZERO JUMPDEST ISZERO PUSH2 0x9CA JUMPI PUSH2 0x9CA PUSH2 0x6EC PUSH1 0x0 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH3 0xF4240 PUSH4 0xFFFFFFFF SWAP1 SWAP2 AND GT ISZERO PUSH2 0x9EC JUMPI PUSH2 0x9EC PUSH2 0x6EC PUSH1 0x1 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x2 PUSH1 0x13 SLOAD LT ISZERO PUSH2 0x761 JUMPI PUSH2 0x761 PUSH2 0x6EC PUSH1 0x3 PUSH2 0x118A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x2 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0xA69 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xA3E JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x12 SLOAD PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 SLOAD PUSH5 0x100000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x9 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH2 0xACA PUSH2 0xB8A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xAF5 JUMPI PUSH2 0xAF0 PUSH2 0x6EC PUSH2 0x11C9 JUMP JUMPDEST PUSH2 0x642 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND SWAP1 DUP2 OR DUP3 SSTORE PUSH1 0x40 MLOAD SWAP1 SWAP2 CALLER SWAP2 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP2 SWAP1 LOG3 POP JUMP JUMPDEST CALLER PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xB88 JUMPI PUSH2 0xB88 PUSH2 0x6EC CALLER PUSH2 0x1200 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0xB88 JUMPI PUSH1 0x0 SLOAD PUSH2 0xB88 SWAP1 PUSH2 0x6EC SWAP1 CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x121B JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xBF7 JUMPI PUSH2 0xBF7 PUSH2 0x6EC PUSH2 0x12BD JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xC31 JUMPI PUSH2 0xC31 PUSH2 0x6EC DUP3 PUSH2 0x12F4 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP4 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD SWAP3 DUP4 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0x405787FA12A823E0F2B7631CC41B3BA8828B3321CA811111FA75CD3AA3BB5ACE SWAP1 SWAP2 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND DUP5 OR SWAP1 SSTORE MLOAD CALLER SWAP3 SWAP2 PUSH32 0x3147867C59D17E8FA9D522465651D44AAE0A9E38F902F3475B97E58072F0ED4C SWAP2 LOG3 POP JUMP JUMPDEST PUSH1 0x3 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x48368388F801041F7690185C4E28B6F3505C740C47BE8AC104B55DF666BFC84 SWAP1 PUSH2 0xD72 SWAP1 DUP4 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x3 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x4 DUP2 MSTORE PUSH1 0x24 DUP2 ADD DUP3 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xE1C7392A00000000000000000000000000000000000000000000000000000000 OR SWAP1 MSTORE SWAP1 MLOAD PUSH1 0x0 SWAP3 PUSH1 0x60 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 PUSH2 0xDFE SWAP2 SWAP1 PUSH2 0x14AB JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 GAS DELEGATECALL SWAP2 POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0xE39 JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0xE3E JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 PUSH2 0xE50 JUMPI DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH2 0xE58 PUSH2 0x96B JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH4 0xEB5108A2 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 DUP3 ADD REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xF3D JUMPI PUSH2 0xF3D PUSH2 0x6EC DUP4 PUSH2 0xE5D JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 LT PUSH2 0xF58 JUMPI PUSH2 0xF58 PUSH2 0x6EC DUP3 PUSH1 0x2 DUP1 SLOAD SWAP1 POP PUSH2 0x130F JUMP JUMPDEST DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x2 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xF7C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0xFDE JUMPI PUSH2 0xFDE PUSH2 0x6EC PUSH1 0x2 DUP4 DUP2 SLOAD DUP2 LT PUSH2 0xFB6 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH2 0x132C JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 ADD SWAP1 DUP2 LT PUSH2 0x1059 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x2 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0x108C JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x2 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 PUSH2 0x110B SWAP1 DUP3 PUSH2 0x1349 JUMP JUMPDEST POP PUSH1 0x40 MLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND SWAP1 PUSH32 0x1F32C1B084E2DE0713B8FB16BD46BB9DF710A3DBEAE2F3CA93AF46E016DCC6B0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x6EFF828500000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFC45BD1100000000000000000000000000000000000000000000000000000000 DUP3 PUSH1 0x4 DUP2 GT ISZERO PUSH2 0x11B9 JUMPI INVALID JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x1688 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0xE69EDC3E00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xB65A25B9 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x60 PUSH4 0x1DE45AD1 PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x14E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR SWAP1 SWAP2 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x57654FE400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xDE16F1A0 PUSH1 0xE0 SHL DUP3 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0xE78 SWAP2 SWAP1 PUSH2 0x14C7 JUMP JUMPDEST PUSH1 0x60 PUSH4 0xE9F83771 PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x1630 JUMP JUMPDEST PUSH1 0x60 PUSH4 0x140A84DB PUSH1 0xE0 SHL DUP4 DUP4 PUSH1 0x40 MLOAD PUSH1 0x24 ADD PUSH2 0x1238 SWAP3 SWAP2 SWAP1 PUSH2 0x14E8 JUMP JUMPDEST DUP2 SLOAD DUP2 DUP4 SSTORE DUP2 DUP2 GT ISZERO PUSH2 0xE58 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 PUSH2 0xE58 SWAP2 DUP2 ADD SWAP1 DUP4 ADD PUSH2 0xA71 SWAP2 SWAP1 JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x1382 JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x136E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x8FE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13BB JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x13C5 DUP4 DUP4 PUSH2 0x1386 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13DE JUMPI DUP1 DUP2 REVERT JUMPDEST PUSH2 0x13E8 DUP5 DUP5 PUSH2 0x1386 JUMP JUMPDEST SWAP5 PUSH1 0x20 SWAP4 SWAP1 SWAP4 ADD CALLDATALOAD SWAP4 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x20 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x1408 JUMPI DUP2 DUP3 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP3 GT ISZERO PUSH2 0x141F JUMPI DUP4 DUP5 REVERT JUMPDEST DUP2 DUP6 ADD DUP7 PUSH1 0x1F DUP3 ADD SLT PUSH2 0x1430 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP3 POP DUP2 DUP4 GT ISZERO PUSH2 0x1440 JUMPI DUP5 DUP6 REVERT JUMPDEST DUP7 PUSH1 0x20 DUP1 DUP6 MUL DUP4 ADD ADD GT ISZERO PUSH2 0x1453 JUMPI DUP5 DUP6 REVERT JUMPDEST PUSH1 0x20 ADD SWAP7 SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1473 JUMPI DUP1 DUP2 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x148C JUMPI DUP2 DUP3 REVERT JUMPDEST POP POP DUP1 CALLDATALOAD SWAP3 PUSH1 0x20 SWAP1 SWAP2 ADD CALLDATALOAD SWAP2 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 DUP4 CALLDATACOPY SWAP2 ADD SWAP1 DUP2 MSTORE SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 MLOAD PUSH2 0x14BD DUP2 DUP5 PUSH1 0x20 DUP8 ADD PUSH2 0x1696 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND DUP2 MSTORE SWAP2 AND PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 MSTORE DUP3 MLOAD DUP3 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x0 SWAP2 DUP5 ADD SWAP1 PUSH1 0x40 DUP5 ADD SWAP1 DUP4 JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x155D JUMPI DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1529 JUMP JUMPDEST POP SWAP1 SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP2 DUP5 MSTORE DUP1 DUP6 MLOAD DUP1 DUP4 MSTORE PUSH1 0x40 DUP7 ADD SWAP2 POP PUSH1 0x40 DUP5 DUP3 MUL DUP8 ADD ADD SWAP3 POP DUP4 DUP8 ADD DUP6 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x160F JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP9 DUP7 SUB ADD DUP5 MSTORE DUP2 MLOAD DUP1 MLOAD DUP1 DUP8 MSTORE PUSH2 0x15D2 DUP2 DUP10 DUP10 ADD DUP11 DUP6 ADD PUSH2 0x1696 JUMP JUMPDEST PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND SWAP6 SWAP1 SWAP6 ADD DUP7 ADD SWAP5 POP SWAP3 DUP6 ADD SWAP3 SWAP1 DUP6 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x158D JUMP JUMPDEST POP SWAP3 SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 ADD SWAP1 JUMP JUMPDEST SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP1 JUMP JUMPDEST SWAP5 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x40 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA0 ADD SWAP1 JUMP JUMPDEST PUSH4 0xFFFFFFFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x16B1 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x1699 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0x16C0 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP INVALID LOG3 PUSH6 0x627A7A723158 KECCAK256 0x23 0x4d 0xbf 0xb1 SWAP8 SWAP15 PUSH19 0x9E4B90BA58749EF12A931B7DF77BEB672B5D45 0xd4 LT 0xd2 ORIGIN SELFDESTRUCT RETURN PUSH13 0x6578706572696D656E74616CF5 PUSH5 0x736F6C6343 STOP SDIV 0xc STOP BLOCKHASH ",
|
|
"sourceMap": "839:6064:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1726:15;;:38;;1685:12;;1699:23;;1726:15;;;;;:38;;1685:12;;1755:8;;1726:38;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;1684:80:1;;;;1856:7;1881:1;1876:87;;;;2038:10;2032:17;2019:10;2013:4;2009:21;2002:48;1876:87;1937:10;1931:17;1918:10;1912:4;1908:21;1901:48;3430:84:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3430:84:7;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;2589:172:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2589:172:1;;;:::i;:::-;;3680:75:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3680:75:7;;;;;;;;:::i;:::-;;;;;;;;;;;;1275:131:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1275:131:53;;;;;;;;:::i;1055:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1055:28:53;;;;;;;;:::i;:::-;;;;;;;;2303:45:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2303:45:7;;;:::i;:::-;;;;;;;;2664:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2664:47:7;;;;;;;;:::i;:::-;;;;;;;;2789:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2789:37:7;;;:::i;2309:158:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2309:158:1;;;;;;;;:::i;1520:445:53:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1520:445:53;;;;;;;;:::i;2237:27:7:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2237:27:7;;;:::i;3107:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3107:39:7;;;:::i;:::-;;;;;;;;2966:1202:1;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2966:1202:1;;;;;;;;:::i;:::-;;;;;;;;749:20:62;;8:9:-1;5:2;;;30:1;27;20:12;5:2;749:20:62;;;:::i;2138:195:53:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2138:195:53;;;;;;;;:::i;3021:31:7:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3021:31:7;;;:::i;1871:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1871:25:7;;;:::i;3851:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3851:41:7;;;:::i;1006:43:53:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1006:43:53;;;;;;;;:::i;2158:51:7:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2158:51:7;;;;;;;;:::i;4461:1561:1:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4461:1561:1;;;:::i;2430:138:53:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2430:138:53;;;:::i;:::-;;;;;;;;2904:40:7;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2904:40:7;;;:::i;3203:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3203:41:7;;;:::i;1049:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1049:30:7;;;:::i;1957:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1957:49:7;;;;;;;;:::i;928:329:62:-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;928:329:62;;;;;;;;:::i;3430:84:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2589:172:1:-;955:27:53;:25;:27::i;:::-;2676:15:1;:29;;;;;;2720:34;;;;879:42:5;;2720:34:1;2589:172::o;3680:75:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1275:131:53:-;882:22:62;:20;:22::i;:::-;1370:29:53;1392:6;1370:21;:29::i;:::-;1275:131;:::o;1055:28::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1055:28:53;:::o;2303:45:7:-;;;;:::o;2664:47::-;;;;;;;;;;;;;;;:::o;2789:37::-;;;;:::o;2309:158:1:-;955:27:53;:25;:27::i;:::-;2420:40:1;2443:16;2420:22;:40::i;1520:445:53:-;882:22:62;:20;:22::i;:::-;1623:18:53;;;;;;;:10;:18;;;;;;;;1618:131;;1657:81;1679:58;1730:6;1679:50;:58::i;:::-;1657:21;:81::i;:::-;1763:9;1758:201;1782:11;:18;1778:22;;1758:201;;;1843:6;1825:24;;:11;1837:1;1825:14;;;;;;;;;;;;;;;;;;;;:24;1821:128;;;1869:42;1901:6;1909:1;1869:31;:42::i;:::-;1929:5;;1821:128;1802:3;;1758:201;;;;1520:445;:::o;2237:27:7:-;;;;:::o;3107:39::-;;;;;;:::o;2966:1202:1:-;3253:23;;;;;;;;;;;;;;;;3045:30;;3138:12;;3045:30;;3214:4;;;3253:23;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3304:15:1;;3235:41;;-1:-1:-1;3304:15:1;;3408:21;3404:160;;3445:108;3484:55;:53;:55::i;3445:108::-;3649:9;3644:485;3669:10;3664:1;:15;3644:485;;3793:7;:20;;3814:4;;3819:1;3814:7;;;;;;;;;;;;-1:-1:-1;30:25;;92:48;100:14;96:29;;;92:48;68:73;;58:2;;155:1;152;145:12;58:2;174:33;;;69:4;55:19;;;-1:-1;16:22;93:18;82:30;;79:2;;;125:1;122;115:12;79:2;155:14;151:37;;;137:52;;134:2;;;202:1;199;192:12;134:2;3793:29:1;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;-1:-1;3769:53:1;;-1:-1:-1;3769:53:1;-1:-1:-1;3769:53:1;3871:143;;3970:10;3964:17;3951:10;3945:4;3941:21;3934:48;3912:88;4108:10;4087:15;4103:1;4087:18;;;;;;;;;;;;;;;;;:31;3681:3;;3644:485;;;-1:-1:-1;;;;;2966:1202:1;;;;;:::o;749:20:62:-;;;;;;:::o;2138:195:53:-;882:22:62;:20;:22::i;:::-;2280:46:53;2312:6;2320:5;2280:31;:46::i;3021:31:7:-;;;;:::o;1871:25::-;;;;:::o;3851:41::-;;;;:::o;1006:43:53:-;;;;;;;;;;;;;;;:::o;2158:51:7:-;;;;;;;;;;;;;:::o;4461:1561:1:-;4632:22;;4694:6;4668:32;;;:69;;;4730:7;4704:23;:33;4668:69;4664:288;;;4753:188;4792:148;4857:69;4792:43;:148::i;4753:188::-;5036:27;;;;;;;;;5077:25;:56;-1:-1:-1;5077:56:1;:93;;-1:-1:-1;5137:33:1;;;;5077:93;5073:315;;;5186:191;5225:151;5290:72;5225:43;:151::i;5186:191::-;5455:26;;714:5:5;5455:44:1;:26;;;:44;5451:276;;;5515:201;5554:161;5619:82;5554:43;:161::i;5515:201::-;5797:1;5778:16;;:20;5774:242;;;5814:191;5853:151;5918:72;5853:43;:151::i;2430:138:53:-;2511:16;2550:11;2543:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2430:138;;:::o;2904:40:7:-;;;;;;:::o;3203:41::-;;;;;;;;;:::o;1049:30::-;;;;;;:::o;1957:49::-;;;;;;;;;;;;;:::o;928:329:62:-;882:22;:20;:22::i;:::-;1024;;;1020:231;;1062:70;1084:47;:45;:47::i;1062:70::-;1020:231;;;1163:5;:16;;;;;;;;;;;;1198:42;;1163:16;;1219:10;;1198:42;;1163:5;1198:42;928:329;:::o;2628:226:53:-;2725:10;2714:22;;;;:10;:22;;;;;;;;2709:139;;2752:85;2774:62;2825:10;2774:50;:62::i;2752:85::-;2628:226::o;1263:255:62:-;1357:5;;;;1343:10;:19;1339:173;;1481:5;;1378:123;;1400:100;;1453:10;;1481:5;;1400:35;:100::i;2940:602:53:-;3081:20;;;3077:127;;3117:76;3139:53;:51;:53::i;3117:76::-;3279:18;;;;;;;:10;:18;;;;;;;;3275:134;;;3313:85;3335:62;3390:6;3335:54;:62::i;3313:85::-;3419:18;;;;;;;3440:4;3419:18;;;;;;;;:25;;;;;;;;3454:11;27:10:-1;;23:18;;;45:23;;3454:24:53;;;;;;;;;;;;;;3493:42;3524:10;;3419:18;3493:42;;;2940:602;:::o;6185:716:1:-;6313:15;:34;;;;;;;;;;6362:48;;;;;;6313:34;;6362:48;;;;;;;;;;6546:15;;6588:53;;;22:32:-1;6:49;;6588:53:1;;;;;49:4:-1;25:18;;61:17;;6588:53:1;182:15:-1;6611:29:1;179::-1;160:49;;6546:105:1;;6494:19;;6515:27;;6546:15;;;;;:105;;6588:53;6546:105;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;6493:158:1;;;;6666:14;6661:142;;6763:14;6757:21;6750:4;6734:14;6730:25;6723:56;6705:88;6868:26;:24;:26::i;:::-;6185:716;;;:::o;2747:241:54:-;2844:12;1416:10;2915:36;;2965:6;2879:102;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;2879:102:54;;;49:4:-1;25:18;;61:17;;2879:102:54;182:15:-1;2879:102:54;;;;179:29:-1;;;;160:49;;;2879:102:54;-1:-1:-1;2747:241:54;;;:::o;1511:170:59:-;1654:9;1648:16;1641:4;1630:9;1626:20;1619:46;3715:887:53;3845:18;;;;;;;:10;:18;;;;;;;;3840:131;;3879:81;3901:58;3952:6;3901:50;:58::i;3879:81::-;3993:11;:18;3984:27;;3980:201;;4027:143;4049:120;4114:5;4137:11;:18;;;;4049:47;:120::i;4027:143::-;4216:6;4194:28;;:11;4206:5;4194:18;;;;;;;;;;;;;;;;;;;;:28;4190:212;;4238:153;4260:130;4334:11;4346:5;4334:18;;;;;;;;;;;;;;;;;;;;4370:6;4260:56;:130::i;4238:153::-;4419:18;;;;;;;:10;:18;;;;;4412:25;;;;;;4468:11;4480:18;;:22;;;;4468:35;;;;;;;;;;;;;;;;4447:11;:18;;4468:35;;;;;4459:5;;4447:18;;;;;;;;;;;;;;;:56;;;;;;;;;;;;;;;4513:11;:23;;;;;;;;;:::i;:::-;-1:-1:-1;4551:44:53;;4584:10;;4551:44;;;;;;;;;3715:887;;:::o;7782:170:19:-;7908:37;;;;;;;;;;;;;;;;;7782:170;:::o;7516:260::-;7629:12;7700:34;7754:4;7748:11;;;;;;;;7664:105;;;;;;;;;669:159:58;787:34;;;;;;;;;;;;;;;;;669:159;:::o;2245:241:54:-;2342:12;1106:10;2413:36;;2463:6;2377:102;;;;;;;;;387:276:58;511:12;183:10;582:25;;621:6;641:5;546:110;;;;;;;;;;;;;;22:32:-1;26:21;;;22:32;6:49;;546:110:58;;;49:4:-1;25:18;;61:17;;546:110:58;182:15:-1;546:110:58;;;;179:29:-1;;;;160:49;;;546:110:58;-1:-1:-1;387:276:58;;;;:::o;2994:161:54:-;3113:35;;;;;;;;;;;;;;;;;2994:161;:::o;2492:249::-;2593:12;1265:10;2664:40;;2718:6;2628:106;;;;;;;;;1947:292;2078:12;955:10;2149:34;;2197:5;2216:6;2113:119;;;;;;;;;;1622:319;1767:12;801:10;1838:42;;1894:10;1918:6;1802:132;;;;;;;;;;839:6064:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;13699:42;13688:54;;14611:35;;14601:2;;14660:1;;14650:12;799:241;;903:2;891:9;882:7;878:23;874:32;871:2;;;-1:-1;;909:12;871:2;971:53;1016:7;992:22;971:53;;;961:63;865:175;-1:-1;;;865:175;1047:366;;;1168:2;1156:9;1147:7;1143:23;1139:32;1136:2;;;-1:-1;;1174:12;1136:2;1236:53;1281:7;1257:22;1236:53;;;1226:63;1326:2;1365:22;;;;729:20;;-1:-1;;;1130:283;1420:411;;;1566:2;1554:9;1545:7;1541:23;1537:32;1534:2;;;-1:-1;;1572:12;1534:2;1630:17;1617:31;1668:18;;1660:6;1657:30;1654:2;;;-1:-1;;1690:12;1654:2;1798:6;1787:9;1783:22;295:3;288:4;280:6;276:17;272:27;262:2;;-1:-1;;303:12;262:2;346:6;333:20;323:30;;1668:18;365:6;362:30;359:2;;;-1:-1;;395:12;359:2;490:3;1566:2;;474:6;470:17;431:6;456:32;;453:41;450:2;;;-1:-1;;497:12;450:2;1566;427:17;;1718:97;;-1:-1;1528:303;;-1:-1;;;;1528:303;1838:241;;1942:2;1930:9;1921:7;1917:23;1913:32;1910:2;;;-1:-1;;1948:12;1910:2;-1:-1;592:20;;1904:175;-1:-1;1904:175;2086:366;;;2207:2;2195:9;2186:7;2182:23;2178:32;2175:2;;;-1:-1;;2213:12;2175:2;-1:-1;;592:20;;;2365:2;2404:22;;;729:20;;-1:-1;2169:283;6902:274;;14098:6;14093:3;14088;14075:30;14136:16;;14129:27;;;14136:16;7033:143;-1:-1;7033:143;7472:262;;6026:5;11987:12;6137:52;6182:6;6177:3;6170:4;6163:5;6159:16;6137:52;;;6201:16;;;;;7597:137;-1:-1;;7597:137;7741:213;13699:42;13688:54;;;;3136:37;;7859:2;7844:18;;7830:124;7961:324;13699:42;13688:54;;;3136:37;;13688:54;;8271:2;8256:18;;3136:37;8107:2;8092:18;;8078:207;8292:361;8460:2;8474:47;;;11987:12;;8445:18;;;12783:19;;;8292:361;;11678:14;;;12823;;;;8292:361;3744:260;3769:6;3766:1;3763:13;3744:260;;;3830:13;;13699:42;13688:54;3136:37;;8460:2;12518:14;;;;2861;;;;3791:1;3784:9;3744:260;;;-1:-1;8527:116;;8431:222;-1:-1;;;;;8431:222;8660:381;;8838:2;;8827:9;8823:18;8838:2;8859:17;8852:47;8913:118;4269:5;11987:12;12795:6;12790:3;12783:19;12823:14;8827:9;12823:14;4281:98;;12823:14;8838:2;4436:6;4432:17;8827:9;4423:27;;4411:39;;8838:2;4526:5;11678:14;-1:-1;4565:345;4590:6;4587:1;4584:13;4565:345;;;4642:20;8827:9;4646:4;4642:20;;4637:3;4630:33;4697:6;4691:13;6353:5;11987:12;12795:6;12790:3;12783:19;6436:52;6481:6;8838:2;12827:3;12823:14;8838:2;6462:5;6458:16;6436:52;;;14535:2;14515:14;14531:7;14511:28;6500:39;;;;;;;-1:-1;4889:14;;;;12518;;;;4612:1;4605:9;4565:345;;;-1:-1;8905:126;;8809:232;-1:-1;;;;;;;8809:232;9048:201;13521:13;;13514:21;5022:34;;9160:2;9145:18;;9131:118;9256:213;5139:37;;;9374:2;9359:18;;9345:124;9696:324;5139:37;;;10006:2;9991:18;;5139:37;9842:2;9827:18;;9813:207;10027:435;5139:37;;;10365:2;10350:18;;5139:37;;;;10448:2;10433:18;;5139:37;10201:2;10186:18;;10172:290;10469:659;5139:37;;;10864:2;10849:18;;5139:37;;;;10947:2;10932:18;;5139:37;;;;11030:2;11015:18;;5139:37;11113:3;11098:19;;5139:37;10699:3;10684:19;;10670:458;11135:209;13905:10;13894:22;;;;6740:36;;11251:2;11236:18;;11222:122;11351:205;13999:4;13988:16;;;;6855:35;;11465:2;11450:18;;11436:120;14171:268;14236:1;14243:101;14257:6;14254:1;14251:13;14243:101;;;14324:11;;;14318:18;14305:11;;;14298:39;14279:2;14272:10;14243:101;;;14359:6;14356:1;14353:13;14350:2;;;14236:1;14415:6;14410:3;14406:16;14399:27;14350:2;;14220:219;;;"
|
|
}
|
|
}
|
|
},
|
|
"sources": {
|
|
"src/StakingProxy.sol": {
|
|
"id": 1
|
|
},
|
|
"src/libs/LibSafeDowncast.sol": {
|
|
"id": 18
|
|
},
|
|
"@0x/contracts-utils/contracts/src/LibRichErrors.sol": {
|
|
"id": 59
|
|
},
|
|
"@0x/contracts-utils/contracts/src/LibSafeMathRichErrors.sol": {
|
|
"id": 61
|
|
},
|
|
"src/immutable/MixinStorage.sol": {
|
|
"id": 7
|
|
},
|
|
"@0x/contracts-utils/contracts/src/Authorizable.sol": {
|
|
"id": 53
|
|
},
|
|
"@0x/contracts-utils/contracts/src/interfaces/IAuthorizable.sol": {
|
|
"id": 63
|
|
},
|
|
"@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol": {
|
|
"id": 64
|
|
},
|
|
"@0x/contracts-utils/contracts/src/LibAuthorizableRichErrors.sol": {
|
|
"id": 54
|
|
},
|
|
"@0x/contracts-utils/contracts/src/Ownable.sol": {
|
|
"id": 62
|
|
},
|
|
"@0x/contracts-utils/contracts/src/LibOwnableRichErrors.sol": {
|
|
"id": 58
|
|
},
|
|
"src/immutable/MixinConstants.sol": {
|
|
"id": 5
|
|
},
|
|
"src/interfaces/IZrxVault.sol": {
|
|
"id": 14
|
|
},
|
|
"src/interfaces/IStructs.sol": {
|
|
"id": 13
|
|
},
|
|
"src/libs/LibStakingRichErrors.sol": {
|
|
"id": 19
|
|
},
|
|
"src/interfaces/IStorageInit.sol": {
|
|
"id": 12
|
|
},
|
|
"src/interfaces/IStakingProxy.sol": {
|
|
"id": 10
|
|
}
|
|
},
|
|
"sourceCodes": {
|
|
"src/StakingProxy.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\npragma experimental ABIEncoderV2;\n\nimport \"./libs/LibSafeDowncast.sol\";\nimport \"./immutable/MixinStorage.sol\";\nimport \"./immutable/MixinConstants.sol\";\nimport \"./interfaces/IStorageInit.sol\";\nimport \"./interfaces/IStakingProxy.sol\";\n\n\ncontract StakingProxy is\n IStakingProxy,\n MixinStorage,\n MixinConstants\n{\n using LibSafeDowncast for uint256;\n\n /// @dev Constructor.\n /// @param _stakingContract Staking contract to delegate calls to.\n constructor(address _stakingContract)\n public\n MixinStorage()\n {\n // Deployer address must be authorized in order to call `init`\n _addAuthorizedAddress(msg.sender);\n\n // Attach the staking contract and initialize state\n _attachStakingContract(_stakingContract);\n\n // Remove the sender as an authorized address\n _removeAuthorizedAddressAtIndex(msg.sender, 0);\n }\n\n /// @dev Delegates calls to the staking contract, if it is set.\n function ()\n external\n payable\n {\n // Call the staking contract with the provided calldata.\n (bool success, bytes memory returnData) = stakingContract.delegatecall(msg.data);\n\n // Revert on failure or return on success.\n assembly {\n switch success\n case 0 {\n revert(add(0x20, returnData), mload(returnData))\n }\n default {\n return(add(0x20, returnData), mload(returnData))\n }\n }\n }\n\n /// @dev Attach a staking contract; future calls will be delegated to the staking contract.\n /// Note that this is callable only by an authorized address.\n /// @param _stakingContract Address of staking contract.\n function attachStakingContract(address _stakingContract)\n external\n onlyAuthorized\n {\n _attachStakingContract(_stakingContract);\n }\n\n /// @dev Detach the current staking contract.\n /// Note that this is callable only by an authorized address.\n function detachStakingContract()\n external\n onlyAuthorized\n {\n stakingContract = NIL_ADDRESS;\n emit StakingContractDetachedFromProxy();\n }\n\n /// @dev Batch executes a series of calls to the staking contract.\n /// @param data An array of data that encodes a sequence of functions to\n /// call in the staking contracts.\n function batchExecute(bytes[] calldata data)\n external\n returns (bytes[] memory batchReturnData)\n {\n // Initialize commonly used variables.\n bool success;\n bytes memory returnData;\n uint256 dataLength = data.length;\n batchReturnData = new bytes[](dataLength);\n address staking = stakingContract;\n\n // Ensure that a staking contract has been attached to the proxy.\n if (staking == address(0)) {\n LibRichErrors.rrevert(\n LibStakingRichErrors.ProxyDestinationCannotBeNilError()\n );\n }\n\n // Execute all of the calls encoded in the provided calldata.\n for (uint256 i = 0; i != dataLength; i++) {\n // Call the staking contract with the provided calldata.\n (success, returnData) = staking.delegatecall(data[i]);\n\n // Revert on failure.\n if (!success) {\n assembly {\n revert(add(0x20, returnData), mload(returnData))\n }\n }\n\n // Add the returndata to the batch returndata.\n batchReturnData[i] = returnData;\n }\n\n return batchReturnData;\n }\n\n /// @dev Asserts that an epoch is between 5 and 30 days long.\n // Asserts that 0 < cobb douglas alpha value <= 1.\n // Asserts that a stake weight is <= 100%.\n // Asserts that pools allow >= 1 maker.\n // Asserts that all addresses are initialized.\n function assertValidStorageParams()\n public\n view\n {\n // Epoch length must be between 5 and 30 days long\n uint256 _epochDurationInSeconds = epochDurationInSeconds;\n if (_epochDurationInSeconds < 5 days || _epochDurationInSeconds > 30 days) {\n LibRichErrors.rrevert(\n LibStakingRichErrors.InvalidParamValueError(\n LibStakingRichErrors.InvalidParamValueErrorCodes.InvalidEpochDuration\n ));\n }\n\n // Alpha must be 0 < x <= 1\n uint32 _cobbDouglasAlphaDenominator = cobbDouglasAlphaDenominator;\n if (cobbDouglasAlphaNumerator > _cobbDouglasAlphaDenominator || _cobbDouglasAlphaDenominator == 0) {\n LibRichErrors.rrevert(\n LibStakingRichErrors.InvalidParamValueError(\n LibStakingRichErrors.InvalidParamValueErrorCodes.InvalidCobbDouglasAlpha\n ));\n }\n\n // Weight of delegated stake must be <= 100%\n if (rewardDelegatedStakeWeight > PPM_DENOMINATOR) {\n LibRichErrors.rrevert(\n LibStakingRichErrors.InvalidParamValueError(\n LibStakingRichErrors.InvalidParamValueErrorCodes.InvalidRewardDelegatedStakeWeight\n ));\n }\n\n // Minimum stake must be > 1\n if (minimumPoolStake < 2) {\n LibRichErrors.rrevert(\n LibStakingRichErrors.InvalidParamValueError(\n LibStakingRichErrors.InvalidParamValueErrorCodes.InvalidMinimumPoolStake\n ));\n }\n }\n\n /// @dev Attach a staking contract; future calls will be delegated to the staking contract.\n /// @param _stakingContract Address of staking contract.\n function _attachStakingContract(address _stakingContract)\n internal\n {\n // Attach the staking contract\n stakingContract = _stakingContract;\n emit StakingContractAttachedToProxy(_stakingContract);\n\n // Call `init()` on the staking contract to initialize storage.\n (bool didInitSucceed, bytes memory initReturnData) = stakingContract.delegatecall(\n abi.encodeWithSelector(IStorageInit(0).init.selector)\n );\n if (!didInitSucceed) {\n assembly {\n revert(add(initReturnData, 0x20), mload(initReturnData))\n }\n }\n\n // Assert initialized storage values are valid\n assertValidStorageParams();\n }\n}\n",
|
|
"src/libs/LibSafeDowncast.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\nimport \"@0x/contracts-utils/contracts/src/LibRichErrors.sol\";\nimport \"@0x/contracts-utils/contracts/src/LibSafeMathRichErrors.sol\";\n\n\nlibrary LibSafeDowncast {\n\n /// @dev Safely downcasts to a uint96\n /// Note that this reverts if the input value is too large.\n function downcastToUint96(uint256 a)\n internal\n pure\n returns (uint96 b)\n {\n b = uint96(a);\n if (uint256(b) != a) {\n LibRichErrors.rrevert(LibSafeMathRichErrors.Uint256DowncastError(\n LibSafeMathRichErrors.DowncastErrorCodes.VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96,\n a\n ));\n }\n return b;\n }\n\n /// @dev Safely downcasts to a uint64\n /// Note that this reverts if the input value is too large.\n function downcastToUint64(uint256 a)\n internal\n pure\n returns (uint64 b)\n {\n b = uint64(a);\n if (uint256(b) != a) {\n LibRichErrors.rrevert(LibSafeMathRichErrors.Uint256DowncastError(\n LibSafeMathRichErrors.DowncastErrorCodes.VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT64,\n a\n ));\n }\n return b;\n }\n\n /// @dev Safely downcasts to a uint32\n /// Note that this reverts if the input value is too large.\n function downcastToUint32(uint256 a)\n internal\n pure\n returns (uint32 b)\n {\n b = uint32(a);\n if (uint256(b) != a) {\n LibRichErrors.rrevert(LibSafeMathRichErrors.Uint256DowncastError(\n LibSafeMathRichErrors.DowncastErrorCodes.VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT32,\n a\n ));\n }\n return b;\n }\n}\n",
|
|
"@0x/contracts-utils/contracts/src/LibRichErrors.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\nlibrary LibRichErrors {\n\n // bytes4(keccak256(\"Error(string)\"))\n bytes4 internal constant STANDARD_ERROR_SELECTOR =\n 0x08c379a0;\n\n // solhint-disable func-name-mixedcase\n /// @dev ABI encode a standard, string revert error payload.\n /// This is the same payload that would be included by a `revert(string)`\n /// solidity statement. It has the function signature `Error(string)`.\n /// @param message The error string.\n /// @return The ABI encoded error.\n function StandardError(\n string memory message\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n STANDARD_ERROR_SELECTOR,\n bytes(message)\n );\n }\n // solhint-enable func-name-mixedcase\n\n /// @dev Reverts an encoded rich revert reason `errorData`.\n /// @param errorData ABI encoded error data.\n function rrevert(bytes memory errorData)\n internal\n pure\n {\n assembly {\n revert(add(errorData, 0x20), mload(errorData))\n }\n }\n}\n",
|
|
"@0x/contracts-utils/contracts/src/LibSafeMathRichErrors.sol": "pragma solidity ^0.5.9;\n\n\nlibrary LibSafeMathRichErrors {\n\n // bytes4(keccak256(\"Uint256BinOpError(uint8,uint256,uint256)\"))\n bytes4 internal constant UINT256_BINOP_ERROR_SELECTOR =\n 0xe946c1bb;\n\n // bytes4(keccak256(\"Uint256DowncastError(uint8,uint256)\"))\n bytes4 internal constant UINT256_DOWNCAST_ERROR_SELECTOR =\n 0xc996af7b;\n\n enum BinOpErrorCodes {\n ADDITION_OVERFLOW,\n MULTIPLICATION_OVERFLOW,\n SUBTRACTION_UNDERFLOW,\n DIVISION_BY_ZERO\n }\n\n enum DowncastErrorCodes {\n VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT32,\n VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT64,\n VALUE_TOO_LARGE_TO_DOWNCAST_TO_UINT96\n }\n\n // solhint-disable func-name-mixedcase\n function Uint256BinOpError(\n BinOpErrorCodes errorCode,\n uint256 a,\n uint256 b\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n UINT256_BINOP_ERROR_SELECTOR,\n errorCode,\n a,\n b\n );\n }\n\n function Uint256DowncastError(\n DowncastErrorCodes errorCode,\n uint256 a\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n UINT256_DOWNCAST_ERROR_SELECTOR,\n errorCode,\n a\n );\n }\n}\n",
|
|
"src/immutable/MixinStorage.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\npragma experimental ABIEncoderV2;\n\nimport \"@0x/contracts-utils/contracts/src/LibRichErrors.sol\";\nimport \"@0x/contracts-utils/contracts/src/Authorizable.sol\";\nimport \"./MixinConstants.sol\";\nimport \"../interfaces/IZrxVault.sol\";\nimport \"../interfaces/IStructs.sol\";\nimport \"../libs/LibStakingRichErrors.sol\";\n\n\n// solhint-disable max-states-count, no-empty-blocks\ncontract MixinStorage is\n Authorizable\n{\n // address of staking contract\n address public stakingContract;\n\n // mapping from StakeStatus to global stored balance\n // NOTE: only Status.DELEGATED is used to access this mapping, but this format\n // is used for extensibility\n mapping (uint8 => IStructs.StoredBalance) internal _globalStakeByStatus;\n\n // mapping from StakeStatus to address of staker to stored balance\n mapping (uint8 => mapping (address => IStructs.StoredBalance)) internal _ownerStakeByStatus;\n\n // Mapping from Owner to Pool Id to Amount Delegated\n mapping (address => mapping (bytes32 => IStructs.StoredBalance)) internal _delegatedStakeToPoolByOwner;\n\n // Mapping from Pool Id to Amount Delegated\n mapping (bytes32 => IStructs.StoredBalance) internal _delegatedStakeByPoolId;\n\n // tracking Pool Id, a unique identifier for each staking pool.\n bytes32 public lastPoolId;\n\n // mapping from Maker Address to Pool Id of maker\n mapping (address => bytes32) public poolIdByMaker;\n\n // mapping from Pool Id to Pool\n mapping (bytes32 => IStructs.Pool) internal _poolById;\n\n // mapping from PoolId to balance of members\n mapping (bytes32 => uint256) public rewardsByPoolId;\n\n // current epoch\n uint256 public currentEpoch;\n\n // current epoch start time\n uint256 public currentEpochStartTimeInSeconds;\n\n // mapping from Pool Id to Epoch to Reward Ratio\n mapping (bytes32 => mapping (uint256 => IStructs.Fraction)) internal _cumulativeRewardsByPool;\n\n // mapping from Pool Id to Epoch\n mapping (bytes32 => uint256) internal _cumulativeRewardsByPoolLastStored;\n\n // registered 0x Exchange contracts\n mapping (address => bool) public validExchanges;\n\n /* Tweakable parameters */\n\n // Minimum seconds between epochs.\n uint256 public epochDurationInSeconds;\n\n // How much delegated stake is weighted vs operator stake, in ppm.\n uint32 public rewardDelegatedStakeWeight;\n\n // Minimum amount of stake required in a pool to collect rewards.\n uint256 public minimumPoolStake;\n\n // Numerator for cobb douglas alpha factor.\n uint32 public cobbDouglasAlphaNumerator;\n\n // Denominator for cobb douglas alpha factor.\n uint32 public cobbDouglasAlphaDenominator;\n\n /* State for finalization */\n\n /// @dev Stats for each pool that generated fees with sufficient stake to earn rewards.\n /// See `_minimumPoolStake` in MixinParams.\n mapping (bytes32 => mapping (uint256 => IStructs.PoolStats)) public poolStatsByEpoch;\n\n /// @dev Aggregated stats across all pools that generated fees with sufficient stake to earn rewards.\n /// See `_minimumPoolStake` in MixinParams.\n mapping (uint256 => IStructs.AggregatedStats) public aggregatedStatsByEpoch;\n\n /// @dev The WETH balance of this contract that is reserved for pool reward payouts.\n uint256 public wethReservedForPoolRewards;\n}\n",
|
|
"@0x/contracts-utils/contracts/src/Authorizable.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\nimport \"./interfaces/IAuthorizable.sol\";\nimport \"./LibAuthorizableRichErrors.sol\";\nimport \"./LibRichErrors.sol\";\nimport \"./Ownable.sol\";\n\n\n// solhint-disable no-empty-blocks\ncontract Authorizable is\n Ownable,\n IAuthorizable\n{\n /// @dev Only authorized addresses can invoke functions with this modifier.\n modifier onlyAuthorized {\n _assertSenderIsAuthorized();\n _;\n }\n\n mapping (address => bool) public authorized;\n address[] public authorities;\n\n /// @dev Initializes the `owner` address.\n constructor()\n public\n Ownable()\n {}\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external\n onlyOwner\n {\n _addAuthorizedAddress(target);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external\n onlyOwner\n {\n if (!authorized[target]) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.TargetNotAuthorizedError(target));\n }\n for (uint256 i = 0; i < authorities.length; i++) {\n if (authorities[i] == target) {\n _removeAuthorizedAddressAtIndex(target, i);\n break;\n }\n }\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external\n onlyOwner\n {\n _removeAuthorizedAddressAtIndex(target, index);\n }\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory)\n {\n return authorities;\n }\n\n /// @dev Reverts if msg.sender is not authorized.\n function _assertSenderIsAuthorized()\n internal\n view\n {\n if (!authorized[msg.sender]) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.SenderNotAuthorizedError(msg.sender));\n }\n }\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function _addAuthorizedAddress(address target)\n internal\n {\n // Ensure that the target is not the zero address.\n if (target == address(0)) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.ZeroCantBeAuthorizedError());\n }\n\n // Ensure that the target is not already authorized.\n if (authorized[target]) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.TargetAlreadyAuthorizedError(target));\n }\n\n authorized[target] = true;\n authorities.push(target);\n emit AuthorizedAddressAdded(target, msg.sender);\n }\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function _removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n internal\n {\n if (!authorized[target]) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.TargetNotAuthorizedError(target));\n }\n if (index >= authorities.length) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.IndexOutOfBoundsError(\n index,\n authorities.length\n ));\n }\n if (authorities[index] != target) {\n LibRichErrors.rrevert(LibAuthorizableRichErrors.AuthorizedAddressMismatchError(\n authorities[index],\n target\n ));\n }\n\n delete authorized[target];\n authorities[index] = authorities[authorities.length - 1];\n authorities.length -= 1;\n emit AuthorizedAddressRemoved(target, msg.sender);\n }\n}\n",
|
|
"@0x/contracts-utils/contracts/src/interfaces/IAuthorizable.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\nimport \"./IOwnable.sol\";\n\n\ncontract IAuthorizable is\n IOwnable\n{\n // Event logged when a new address is authorized.\n event AuthorizedAddressAdded(\n address indexed target,\n address indexed caller\n );\n\n // Event logged when a currently authorized address is unauthorized.\n event AuthorizedAddressRemoved(\n address indexed target,\n address indexed caller\n );\n\n /// @dev Authorizes an address.\n /// @param target Address to authorize.\n function addAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n function removeAuthorizedAddress(address target)\n external;\n\n /// @dev Removes authorizion of an address.\n /// @param target Address to remove authorization from.\n /// @param index Index of target in authorities array.\n function removeAuthorizedAddressAtIndex(\n address target,\n uint256 index\n )\n external;\n\n /// @dev Gets all authorized addresses.\n /// @return Array of authorized addresses.\n function getAuthorizedAddresses()\n external\n view\n returns (address[] memory);\n}\n",
|
|
"@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ncontract IOwnable {\n\n /// @dev Emitted by Ownable when ownership is transferred.\n /// @param previousOwner The previous owner of the contract.\n /// @param newOwner The new owner of the contract.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @dev Transfers ownership of the contract to a new address.\n /// @param newOwner The address that will become the owner.\n function transferOwnership(address newOwner)\n public;\n}\n",
|
|
"@0x/contracts-utils/contracts/src/LibAuthorizableRichErrors.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\nlibrary LibAuthorizableRichErrors {\n\n // bytes4(keccak256(\"AuthorizedAddressMismatchError(address,address)\"))\n bytes4 internal constant AUTHORIZED_ADDRESS_MISMATCH_ERROR_SELECTOR =\n 0x140a84db;\n\n // bytes4(keccak256(\"IndexOutOfBoundsError(uint256,uint256)\"))\n bytes4 internal constant INDEX_OUT_OF_BOUNDS_ERROR_SELECTOR =\n 0xe9f83771;\n\n // bytes4(keccak256(\"SenderNotAuthorizedError(address)\"))\n bytes4 internal constant SENDER_NOT_AUTHORIZED_ERROR_SELECTOR =\n 0xb65a25b9;\n\n // bytes4(keccak256(\"TargetAlreadyAuthorizedError(address)\"))\n bytes4 internal constant TARGET_ALREADY_AUTHORIZED_ERROR_SELECTOR =\n 0xde16f1a0;\n\n // bytes4(keccak256(\"TargetNotAuthorizedError(address)\"))\n bytes4 internal constant TARGET_NOT_AUTHORIZED_ERROR_SELECTOR =\n 0xeb5108a2;\n\n // bytes4(keccak256(\"ZeroCantBeAuthorizedError()\"))\n bytes internal constant ZERO_CANT_BE_AUTHORIZED_ERROR_BYTES =\n hex\"57654fe4\";\n\n // solhint-disable func-name-mixedcase\n function AuthorizedAddressMismatchError(\n address authorized,\n address target\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n AUTHORIZED_ADDRESS_MISMATCH_ERROR_SELECTOR,\n authorized,\n target\n );\n }\n\n function IndexOutOfBoundsError(\n uint256 index,\n uint256 length\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n INDEX_OUT_OF_BOUNDS_ERROR_SELECTOR,\n index,\n length\n );\n }\n\n function SenderNotAuthorizedError(address sender)\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n SENDER_NOT_AUTHORIZED_ERROR_SELECTOR,\n sender\n );\n }\n\n function TargetAlreadyAuthorizedError(address target)\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n TARGET_ALREADY_AUTHORIZED_ERROR_SELECTOR,\n target\n );\n }\n\n function TargetNotAuthorizedError(address target)\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n TARGET_NOT_AUTHORIZED_ERROR_SELECTOR,\n target\n );\n }\n\n function ZeroCantBeAuthorizedError()\n internal\n pure\n returns (bytes memory)\n {\n return ZERO_CANT_BE_AUTHORIZED_ERROR_BYTES;\n }\n}\n",
|
|
"@0x/contracts-utils/contracts/src/Ownable.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\nimport \"./interfaces/IOwnable.sol\";\nimport \"./LibOwnableRichErrors.sol\";\nimport \"./LibRichErrors.sol\";\n\n\ncontract Ownable is\n IOwnable\n{\n address public owner;\n\n constructor ()\n public\n {\n owner = msg.sender;\n }\n\n modifier onlyOwner() {\n _assertSenderIsOwner();\n _;\n }\n\n function transferOwnership(address newOwner)\n public\n onlyOwner\n {\n if (newOwner == address(0)) {\n LibRichErrors.rrevert(LibOwnableRichErrors.TransferOwnerToZeroError());\n } else {\n owner = newOwner;\n emit OwnershipTransferred(msg.sender, newOwner);\n }\n }\n\n function _assertSenderIsOwner()\n internal\n view\n {\n if (msg.sender != owner) {\n LibRichErrors.rrevert(LibOwnableRichErrors.OnlyOwnerError(\n msg.sender,\n owner\n ));\n }\n }\n}\n",
|
|
"@0x/contracts-utils/contracts/src/LibOwnableRichErrors.sol": "pragma solidity ^0.5.9;\n\n\nlibrary LibOwnableRichErrors {\n\n // bytes4(keccak256(\"OnlyOwnerError(address,address)\"))\n bytes4 internal constant ONLY_OWNER_ERROR_SELECTOR =\n 0x1de45ad1;\n\n // bytes4(keccak256(\"TransferOwnerToZeroError()\"))\n bytes internal constant TRANSFER_OWNER_TO_ZERO_ERROR_BYTES =\n hex\"e69edc3e\";\n\n // solhint-disable func-name-mixedcase\n function OnlyOwnerError(\n address sender,\n address owner\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n ONLY_OWNER_ERROR_SELECTOR,\n sender,\n owner\n );\n }\n\n function TransferOwnerToZeroError()\n internal\n pure\n returns (bytes memory)\n {\n return TRANSFER_OWNER_TO_ZERO_ERROR_BYTES;\n }\n}\n",
|
|
"src/immutable/MixinConstants.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ncontract MixinConstants {\n\n // 100% in parts-per-million.\n uint32 constant internal PPM_DENOMINATOR = 10**6;\n\n bytes32 constant internal NIL_POOL_ID = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n address constant internal NIL_ADDRESS = 0x0000000000000000000000000000000000000000;\n\n uint256 constant internal MIN_TOKEN_VALUE = 10**18;\n}\n",
|
|
"src/interfaces/IZrxVault.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ninterface IZrxVault {\n\n /// @dev Emmitted whenever a StakingProxy is set in a vault.\n event StakingProxySet(address stakingProxyAddress);\n\n /// @dev Emitted when the Staking contract is put into Catastrophic Failure Mode\n /// @param sender Address of sender (`msg.sender`)\n event InCatastrophicFailureMode(address sender);\n\n /// @dev Emitted when Zrx Tokens are deposited into the vault.\n /// @param staker of Zrx Tokens.\n /// @param amount of Zrx Tokens deposited.\n event Deposit(\n address indexed staker,\n uint256 amount\n );\n\n /// @dev Emitted when Zrx Tokens are withdrawn from the vault.\n /// @param staker of Zrx Tokens.\n /// @param amount of Zrx Tokens withdrawn.\n event Withdraw(\n address indexed staker,\n uint256 amount\n );\n\n /// @dev Emitted whenever the ZRX AssetProxy is set.\n event ZrxProxySet(address zrxProxyAddress);\n\n /// @dev Sets the address of the StakingProxy contract.\n /// Note that only the contract staker can call this function.\n /// @param _stakingProxyAddress Address of Staking proxy contract.\n function setStakingProxy(address _stakingProxyAddress)\n external;\n\n /// @dev Vault enters into Catastrophic Failure Mode.\n /// *** WARNING - ONCE IN CATOSTROPHIC FAILURE MODE, YOU CAN NEVER GO BACK! ***\n /// Note that only the contract staker can call this function.\n function enterCatastrophicFailure()\n external;\n\n /// @dev Sets the Zrx proxy.\n /// Note that only the contract staker can call this.\n /// Note that this can only be called when *not* in Catastrophic Failure mode.\n /// @param zrxProxyAddress Address of the 0x Zrx Proxy.\n function setZrxProxy(address zrxProxyAddress)\n external;\n\n /// @dev Deposit an `amount` of Zrx Tokens from `staker` into the vault.\n /// Note that only the Staking contract can call this.\n /// Note that this can only be called when *not* in Catastrophic Failure mode.\n /// @param staker of Zrx Tokens.\n /// @param amount of Zrx Tokens to deposit.\n function depositFrom(address staker, uint256 amount)\n external;\n\n /// @dev Withdraw an `amount` of Zrx Tokens to `staker` from the vault.\n /// Note that only the Staking contract can call this.\n /// Note that this can only be called when *not* in Catastrophic Failure mode.\n /// @param staker of Zrx Tokens.\n /// @param amount of Zrx Tokens to withdraw.\n function withdrawFrom(address staker, uint256 amount)\n external;\n\n /// @dev Withdraw ALL Zrx Tokens to `staker` from the vault.\n /// Note that this can only be called when *in* Catastrophic Failure mode.\n /// @param staker of Zrx Tokens.\n function withdrawAllFrom(address staker)\n external\n returns (uint256);\n\n /// @dev Returns the balance in Zrx Tokens of the `staker`\n /// @return Balance in Zrx.\n function balanceOf(address staker)\n external\n view\n returns (uint256);\n\n /// @dev Returns the entire balance of Zrx tokens in the vault.\n function balanceOfZrxVault()\n external\n view\n returns (uint256);\n}\n",
|
|
"src/interfaces/IStructs.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ninterface IStructs {\n\n /// @dev Stats for a pool that earned rewards.\n /// @param feesCollected Fees collected in ETH by this pool.\n /// @param weightedStake Amount of weighted stake in the pool.\n /// @param membersStake Amount of non-operator stake in the pool.\n struct PoolStats {\n uint256 feesCollected;\n uint256 weightedStake;\n uint256 membersStake;\n }\n\n /// @dev Holds stats aggregated across a set of pools.\n /// @param rewardsAvailable Rewards (ETH) available to the epoch\n /// being finalized (the previous epoch). This is simply the balance\n /// of the contract at the end of the epoch.\n /// @param numPoolsToFinalize The number of pools that have yet to be finalized through `finalizePools()`.\n /// @param totalFeesCollected The total fees collected for the epoch being finalized.\n /// @param totalWeightedStake The total fees collected for the epoch being finalized.\n /// @param totalRewardsFinalized Amount of rewards that have been paid during finalization.\n struct AggregatedStats {\n uint256 rewardsAvailable;\n uint256 numPoolsToFinalize;\n uint256 totalFeesCollected;\n uint256 totalWeightedStake;\n uint256 totalRewardsFinalized;\n }\n\n /// @dev Encapsulates a balance for the current and next epochs.\n /// Note that these balances may be stale if the current epoch\n /// is greater than `currentEpoch`.\n /// @param currentEpoch the current epoch\n /// @param currentEpochBalance balance in the current epoch.\n /// @param nextEpochBalance balance in `currentEpoch+1`.\n struct StoredBalance {\n uint64 currentEpoch;\n uint96 currentEpochBalance;\n uint96 nextEpochBalance;\n }\n\n /// @dev Statuses that stake can exist in.\n /// Any stake can be (re)delegated effective at the next epoch\n /// Undelegated stake can be withdrawn if it is available in both the current and next epoch\n enum StakeStatus {\n UNDELEGATED,\n DELEGATED\n }\n\n /// @dev Info used to describe a status.\n /// @param status of the stake.\n /// @param poolId Unique Id of pool. This is set when status=DELEGATED.\n struct StakeInfo {\n StakeStatus status;\n bytes32 poolId;\n }\n\n /// @dev Struct to represent a fraction.\n /// @param numerator of fraction.\n /// @param denominator of fraction.\n struct Fraction {\n uint256 numerator;\n uint256 denominator;\n }\n\n /// @dev Holds the metadata for a staking pool.\n /// @param operator of the pool.\n /// @param operatorShare Fraction of the total balance owned by the operator, in ppm.\n struct Pool {\n address operator;\n uint32 operatorShare;\n }\n}\n",
|
|
"src/libs/LibStakingRichErrors.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\nimport \"@0x/contracts-utils/contracts/src/LibRichErrors.sol\";\nimport \"../interfaces/IStructs.sol\";\n\n\nlibrary LibStakingRichErrors {\n\n enum OperatorShareErrorCodes {\n OperatorShareTooLarge,\n CanOnlyDecreaseOperatorShare\n }\n\n enum InitializationErrorCodes {\n MixinSchedulerAlreadyInitialized,\n MixinParamsAlreadyInitialized\n }\n\n enum InvalidParamValueErrorCodes {\n InvalidCobbDouglasAlpha,\n InvalidRewardDelegatedStakeWeight,\n InvalidMaximumMakersInPool,\n InvalidMinimumPoolStake,\n InvalidEpochDuration\n }\n\n enum ExchangeManagerErrorCodes {\n ExchangeAlreadyRegistered,\n ExchangeNotRegistered\n }\n\n // bytes4(keccak256(\"OnlyCallableByExchangeError(address)\"))\n bytes4 internal constant ONLY_CALLABLE_BY_EXCHANGE_ERROR_SELECTOR =\n 0xb56d2df0;\n\n // bytes4(keccak256(\"ExchangeManagerError(uint8,address)\"))\n bytes4 internal constant EXCHANGE_MANAGER_ERROR_SELECTOR =\n 0xb9588e43;\n\n // bytes4(keccak256(\"InsufficientBalanceError(uint256,uint256)\"))\n bytes4 internal constant INSUFFICIENT_BALANCE_ERROR_SELECTOR =\n 0x84c8b7c9;\n\n // bytes4(keccak256(\"OnlyCallableByPoolOperatorError(address,bytes32)\"))\n bytes4 internal constant ONLY_CALLABLE_BY_POOL_OPERATOR_ERROR_SELECTOR =\n 0x82ded785;\n\n // bytes4(keccak256(\"BlockTimestampTooLowError(uint256,uint256)\"))\n bytes4 internal constant BLOCK_TIMESTAMP_TOO_LOW_ERROR_SELECTOR =\n 0xa6bcde47;\n\n // bytes4(keccak256(\"OnlyCallableByStakingContractError(address)\"))\n bytes4 internal constant ONLY_CALLABLE_BY_STAKING_CONTRACT_ERROR_SELECTOR =\n 0xca1d07a2;\n\n // bytes4(keccak256(\"OnlyCallableIfInCatastrophicFailureError()\"))\n bytes internal constant ONLY_CALLABLE_IF_IN_CATASTROPHIC_FAILURE_ERROR =\n hex\"3ef081cc\";\n\n // bytes4(keccak256(\"OnlyCallableIfNotInCatastrophicFailureError()\"))\n bytes internal constant ONLY_CALLABLE_IF_NOT_IN_CATASTROPHIC_FAILURE_ERROR =\n hex\"7dd020ce\";\n\n // bytes4(keccak256(\"OperatorShareError(uint8,bytes32,uint32)\"))\n bytes4 internal constant OPERATOR_SHARE_ERROR_SELECTOR =\n 0x22df9597;\n\n // bytes4(keccak256(\"PoolExistenceError(bytes32,bool)\"))\n bytes4 internal constant POOL_EXISTENCE_ERROR_SELECTOR =\n 0x9ae94f01;\n\n // bytes4(keccak256(\"ProxyDestinationCannotBeNilError()\"))\n bytes internal constant PROXY_DESTINATION_CANNOT_BE_NIL_ERROR =\n hex\"6eff8285\";\n\n // bytes4(keccak256(\"InitializationError(uint8)\"))\n bytes4 internal constant INITIALIZATION_ERROR_SELECTOR =\n 0x0b02d773;\n\n // bytes4(keccak256(\"InvalidParamValueError(uint8)\"))\n bytes4 internal constant INVALID_PARAM_VALUE_ERROR_SELECTOR =\n 0xfc45bd11;\n\n // bytes4(keccak256(\"InvalidProtocolFeePaymentError(uint256,uint256)\"))\n bytes4 internal constant INVALID_PROTOCOL_FEE_PAYMENT_ERROR_SELECTOR =\n 0x31d7a505;\n\n // bytes4(keccak256(\"PreviousEpochNotFinalizedError(uint256,uint256)\"))\n bytes4 internal constant PREVIOUS_EPOCH_NOT_FINALIZED_ERROR_SELECTOR =\n 0x614b800a;\n\n // bytes4(keccak256(\"PoolNotFinalizedError(bytes32,uint256)\"))\n bytes4 internal constant POOL_NOT_FINALIZED_ERROR_SELECTOR =\n 0x5caa0b05;\n\n // solhint-disable func-name-mixedcase\n function OnlyCallableByExchangeError(\n address senderAddress\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n ONLY_CALLABLE_BY_EXCHANGE_ERROR_SELECTOR,\n senderAddress\n );\n }\n\n function ExchangeManagerError(\n ExchangeManagerErrorCodes errorCodes,\n address exchangeAddress\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n EXCHANGE_MANAGER_ERROR_SELECTOR,\n errorCodes,\n exchangeAddress\n );\n }\n\n function InsufficientBalanceError(\n uint256 amount,\n uint256 balance\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n INSUFFICIENT_BALANCE_ERROR_SELECTOR,\n amount,\n balance\n );\n }\n\n function OnlyCallableByPoolOperatorError(\n address senderAddress,\n bytes32 poolId\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n ONLY_CALLABLE_BY_POOL_OPERATOR_ERROR_SELECTOR,\n senderAddress,\n poolId\n );\n }\n\n function BlockTimestampTooLowError(\n uint256 epochEndTime,\n uint256 currentBlockTimestamp\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n BLOCK_TIMESTAMP_TOO_LOW_ERROR_SELECTOR,\n epochEndTime,\n currentBlockTimestamp\n );\n }\n\n function OnlyCallableByStakingContractError(\n address senderAddress\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n ONLY_CALLABLE_BY_STAKING_CONTRACT_ERROR_SELECTOR,\n senderAddress\n );\n }\n\n function OnlyCallableIfInCatastrophicFailureError()\n internal\n pure\n returns (bytes memory)\n {\n return ONLY_CALLABLE_IF_IN_CATASTROPHIC_FAILURE_ERROR;\n }\n\n function OnlyCallableIfNotInCatastrophicFailureError()\n internal\n pure\n returns (bytes memory)\n {\n return ONLY_CALLABLE_IF_NOT_IN_CATASTROPHIC_FAILURE_ERROR;\n }\n\n function OperatorShareError(\n OperatorShareErrorCodes errorCodes,\n bytes32 poolId,\n uint32 operatorShare\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n OPERATOR_SHARE_ERROR_SELECTOR,\n errorCodes,\n poolId,\n operatorShare\n );\n }\n\n function PoolExistenceError(\n bytes32 poolId,\n bool alreadyExists\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n POOL_EXISTENCE_ERROR_SELECTOR,\n poolId,\n alreadyExists\n );\n }\n\n function InvalidProtocolFeePaymentError(\n uint256 expectedProtocolFeePaid,\n uint256 actualProtocolFeePaid\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n INVALID_PROTOCOL_FEE_PAYMENT_ERROR_SELECTOR,\n expectedProtocolFeePaid,\n actualProtocolFeePaid\n );\n }\n\n function InitializationError(InitializationErrorCodes code)\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n INITIALIZATION_ERROR_SELECTOR,\n uint8(code)\n );\n }\n\n function InvalidParamValueError(InvalidParamValueErrorCodes code)\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n INVALID_PARAM_VALUE_ERROR_SELECTOR,\n uint8(code)\n );\n }\n\n function ProxyDestinationCannotBeNilError()\n internal\n pure\n returns (bytes memory)\n {\n return PROXY_DESTINATION_CANNOT_BE_NIL_ERROR;\n }\n\n function PreviousEpochNotFinalizedError(\n uint256 unfinalizedEpoch,\n uint256 unfinalizedPoolsRemaining\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n PREVIOUS_EPOCH_NOT_FINALIZED_ERROR_SELECTOR,\n unfinalizedEpoch,\n unfinalizedPoolsRemaining\n );\n }\n\n function PoolNotFinalizedError(\n bytes32 poolId,\n uint256 epoch\n )\n internal\n pure\n returns (bytes memory)\n {\n return abi.encodeWithSelector(\n POOL_NOT_FINALIZED_ERROR_SELECTOR,\n poolId,\n epoch\n );\n }\n}\n",
|
|
"src/interfaces/IStorageInit.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\n\n\ninterface IStorageInit {\n\n /// @dev Initialize storage owned by this contract.\n function init()\n external;\n}\n",
|
|
"src/interfaces/IStakingProxy.sol": "/*\n\n Copyright 2019 ZeroEx Intl.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n*/\n\npragma solidity ^0.5.9;\npragma experimental ABIEncoderV2;\n\nimport \"./IStructs.sol\";\n\n\ncontract IStakingProxy {\n\n /// @dev Emitted by StakingProxy when a staking contract is attached.\n /// @param newStakingContractAddress Address of newly attached staking contract.\n event StakingContractAttachedToProxy(\n address newStakingContractAddress\n );\n\n /// @dev Emitted by StakingProxy when a staking contract is detached.\n event StakingContractDetachedFromProxy();\n\n /// @dev Attach a staking contract; future calls will be delegated to the staking contract.\n /// Note that this is callable only by an authorized address.\n /// @param _stakingContract Address of staking contract.\n function attachStakingContract(address _stakingContract)\n external;\n\n /// @dev Detach the current staking contract.\n /// Note that this is callable only by an authorized address.\n function detachStakingContract()\n external;\n\n /// @dev Asserts that an epoch is between 5 and 30 days long.\n // Asserts that 0 < cobb douglas alpha value <= 1.\n // Asserts that a stake weight is <= 100%.\n // Asserts that pools allow >= 1 maker.\n // Asserts that all addresses are initialized.\n function assertValidStorageParams()\n external\n view;\n}\n"
|
|
},
|
|
"sourceTreeHashHex": "0x9e6cebf28944709c8a61443cee34423818e2e28012df29d266d7f748afd6e805",
|
|
"compiler": {
|
|
"name": "solc",
|
|
"version": "soljson-v0.5.12+commit.7709ece9.js",
|
|
"settings": {
|
|
"optimizer": {
|
|
"enabled": true,
|
|
"runs": 1000000,
|
|
"details": {
|
|
"yul": true,
|
|
"deduplicate": true,
|
|
"cse": true,
|
|
"constantOptimizer": true
|
|
}
|
|
},
|
|
"outputSelection": {
|
|
"*": {
|
|
"*": [
|
|
"abi",
|
|
"devdoc",
|
|
"evm.bytecode.object",
|
|
"evm.bytecode.sourceMap",
|
|
"evm.deployedBytecode.object",
|
|
"evm.deployedBytecode.sourceMap"
|
|
]
|
|
}
|
|
},
|
|
"evmVersion": "constantinople",
|
|
"remappings": [
|
|
"@0x/contracts-erc20=/Users/alextowle/0x-monorepo-1/contracts/staking/node_modules/@0x/contracts-erc20",
|
|
"@0x/contracts-utils=/Users/alextowle/0x-monorepo-1/contracts/staking/node_modules/@0x/contracts-utils",
|
|
"@0x/contracts-exchange-libs=/Users/alextowle/0x-monorepo-1/node_modules/@0x/contracts-exchange-libs",
|
|
"@0x/contracts-asset-proxy=/Users/alextowle/0x-monorepo-1/contracts/staking/node_modules/@0x/contracts-asset-proxy"
|
|
]
|
|
}
|
|
},
|
|
"networks": {}
|
|
} |