Files
protocol/packages/contract-artifacts/artifacts/Staking.json
Lawrence Forman 23953d8a5a Update artifacts and wrappers (#145)
* `@0x/contract-artifacts`: Update artifacts.
`@0x/contract-wrappers`: Regenerate wrappers

* fix doc gen

Co-authored-by: Lawrence Forman <me@merklejerk.com>
2021-02-17 14:34:43 -05:00

964 lines
131 KiB
JSON

{
"schemaVersion": "2.0.0",
"contractName": "Staking",
"compilerOutput": {
"abi": [
{
"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": "uint256", "name": "epoch", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "numPoolsToFinalize", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "rewardsAvailable", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "totalFeesCollected", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "totalWeightedStake", "type": "uint256" }
],
"name": "EpochEnded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "uint256", "name": "epoch", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "rewardsPaid", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "rewardsRemaining", "type": "uint256" }
],
"name": "EpochFinalized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "internalType": "address", "name": "exchangeAddress", "type": "address" }
],
"name": "ExchangeAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "internalType": "address", "name": "exchangeAddress", "type": "address" }
],
"name": "ExchangeRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "makerAddress", "type": "address" },
{ "indexed": true, "internalType": "bytes32", "name": "poolId", "type": "bytes32" }
],
"name": "MakerStakingPoolSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "staker", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" },
{ "indexed": false, "internalType": "uint8", "name": "fromStatus", "type": "uint8" },
{ "indexed": true, "internalType": "bytes32", "name": "fromPool", "type": "bytes32" },
{ "indexed": false, "internalType": "uint8", "name": "toStatus", "type": "uint8" },
{ "indexed": true, "internalType": "bytes32", "name": "toPool", "type": "bytes32" }
],
"name": "MoveStake",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "bytes32", "name": "poolId", "type": "bytes32" },
{ "indexed": false, "internalType": "uint32", "name": "oldOperatorShare", "type": "uint32" },
{ "indexed": false, "internalType": "uint32", "name": "newOperatorShare", "type": "uint32" }
],
"name": "OperatorShareDecreased",
"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": "uint256",
"name": "epochDurationInSeconds",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint32",
"name": "rewardDelegatedStakeWeight",
"type": "uint32"
},
{ "indexed": false, "internalType": "uint256", "name": "minimumPoolStake", "type": "uint256" },
{
"indexed": false,
"internalType": "uint256",
"name": "cobbDouglasAlphaNumerator",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "cobbDouglasAlphaDenominator",
"type": "uint256"
}
],
"name": "ParamsSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "uint256", "name": "epoch", "type": "uint256" },
{ "indexed": true, "internalType": "bytes32", "name": "poolId", "type": "bytes32" },
{ "indexed": false, "internalType": "uint256", "name": "operatorReward", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "membersReward", "type": "uint256" }
],
"name": "RewardsPaid",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "staker", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "Stake",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "internalType": "bytes32", "name": "poolId", "type": "bytes32" },
{ "indexed": false, "internalType": "address", "name": "operator", "type": "address" },
{ "indexed": false, "internalType": "uint32", "name": "operatorShare", "type": "uint32" }
],
"name": "StakingPoolCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "uint256", "name": "epoch", "type": "uint256" },
{ "indexed": true, "internalType": "bytes32", "name": "poolId", "type": "bytes32" }
],
"name": "StakingPoolEarnedRewardsInEpoch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "staker", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "Unstake",
"type": "event"
},
{
"constant": false,
"inputs": [{ "internalType": "address", "name": "target", "type": "address" }],
"name": "addAuthorizedAddress",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
"name": "addExchangeAddress",
"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": [{ "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": 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": [
{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" },
{ "internalType": "address", "name": "member", "type": "address" }
],
"name": "computeRewardBalanceOfDelegator",
"outputs": [{ "internalType": "uint256", "name": "reward", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "computeRewardBalanceOfOperator",
"outputs": [{ "internalType": "uint256", "name": "reward", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "uint32", "name": "operatorShare", "type": "uint32" },
{ "internalType": "bool", "name": "addOperatorAsMaker", "type": "bool" }
],
"name": "createStakingPool",
"outputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"payable": false,
"stateMutability": "nonpayable",
"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": [
{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" },
{ "internalType": "uint32", "name": "newOperatorShare", "type": "uint32" }
],
"name": "decreaseStakingPoolOperatorShare",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "endEpoch",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "epochDurationInSeconds",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "finalizePool",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getAuthorizedAddresses",
"outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getCurrentEpochEarliestEndTimeInSeconds",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "enum IStructs.StakeStatus", "name": "stakeStatus", "type": "uint8" }],
"name": "getGlobalStakeByStatus",
"outputs": [
{
"components": [
{ "internalType": "uint64", "name": "currentEpoch", "type": "uint64" },
{ "internalType": "uint96", "name": "currentEpochBalance", "type": "uint96" },
{ "internalType": "uint96", "name": "nextEpochBalance", "type": "uint96" }
],
"internalType": "struct IStructs.StoredBalance",
"name": "balance",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "staker", "type": "address" },
{ "internalType": "enum IStructs.StakeStatus", "name": "stakeStatus", "type": "uint8" }
],
"name": "getOwnerStakeByStatus",
"outputs": [
{
"components": [
{ "internalType": "uint64", "name": "currentEpoch", "type": "uint64" },
{ "internalType": "uint96", "name": "currentEpochBalance", "type": "uint96" },
{ "internalType": "uint96", "name": "nextEpochBalance", "type": "uint96" }
],
"internalType": "struct IStructs.StoredBalance",
"name": "balance",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getParams",
"outputs": [
{ "internalType": "uint256", "name": "_epochDurationInSeconds", "type": "uint256" },
{ "internalType": "uint32", "name": "_rewardDelegatedStakeWeight", "type": "uint32" },
{ "internalType": "uint256", "name": "_minimumPoolStake", "type": "uint256" },
{ "internalType": "uint32", "name": "_cobbDouglasAlphaNumerator", "type": "uint32" },
{ "internalType": "uint32", "name": "_cobbDouglasAlphaDenominator", "type": "uint32" }
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "staker", "type": "address" },
{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }
],
"name": "getStakeDelegatedToPoolByOwner",
"outputs": [
{
"components": [
{ "internalType": "uint64", "name": "currentEpoch", "type": "uint64" },
{ "internalType": "uint96", "name": "currentEpochBalance", "type": "uint96" },
{ "internalType": "uint96", "name": "nextEpochBalance", "type": "uint96" }
],
"internalType": "struct IStructs.StoredBalance",
"name": "balance",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "getStakingPool",
"outputs": [
{
"components": [
{ "internalType": "address", "name": "operator", "type": "address" },
{ "internalType": "uint32", "name": "operatorShare", "type": "uint32" }
],
"internalType": "struct IStructs.Pool",
"name": "",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "getStakingPoolStatsThisEpoch",
"outputs": [
{
"components": [
{ "internalType": "uint256", "name": "feesCollected", "type": "uint256" },
{ "internalType": "uint256", "name": "weightedStake", "type": "uint256" },
{ "internalType": "uint256", "name": "membersStake", "type": "uint256" }
],
"internalType": "struct IStructs.PoolStats",
"name": "",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "address", "name": "staker", "type": "address" }],
"name": "getTotalStake",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "getTotalStakeDelegatedToPool",
"outputs": [
{
"components": [
{ "internalType": "uint64", "name": "currentEpoch", "type": "uint64" },
{ "internalType": "uint96", "name": "currentEpochBalance", "type": "uint96" },
{ "internalType": "uint96", "name": "nextEpochBalance", "type": "uint96" }
],
"internalType": "struct IStructs.StoredBalance",
"name": "balance",
"type": "tuple"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getWethContract",
"outputs": [{ "internalType": "contract IEtherToken", "name": "wethContract", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getZrxVault",
"outputs": [{ "internalType": "contract IZrxVault", "name": "zrxVault", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "init",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "joinStakingPoolAsMaker",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"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": false,
"inputs": [
{
"components": [
{ "internalType": "enum IStructs.StakeStatus", "name": "status", "type": "uint8" },
{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }
],
"internalType": "struct IStructs.StakeInfo",
"name": "from",
"type": "tuple"
},
{
"components": [
{ "internalType": "enum IStructs.StakeStatus", "name": "status", "type": "uint8" },
{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }
],
"internalType": "struct IStructs.StakeInfo",
"name": "to",
"type": "tuple"
},
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "moveStake",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "owner",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "makerAddress", "type": "address" },
{ "internalType": "address", "name": "payerAddress", "type": "address" },
{ "internalType": "uint256", "name": "protocolFee", "type": "uint256" }
],
"name": "payProtocolFee",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"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": false,
"inputs": [{ "internalType": "address", "name": "addr", "type": "address" }],
"name": "removeExchangeAddress",
"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": false,
"inputs": [
{ "internalType": "uint256", "name": "_epochDurationInSeconds", "type": "uint256" },
{ "internalType": "uint32", "name": "_rewardDelegatedStakeWeight", "type": "uint32" },
{ "internalType": "uint256", "name": "_minimumPoolStake", "type": "uint256" },
{ "internalType": "uint32", "name": "_cobbDouglasAlphaNumerator", "type": "uint32" },
{ "internalType": "uint32", "name": "_cobbDouglasAlphaDenominator", "type": "uint32" }
],
"name": "setParams",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }],
"name": "stake",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"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": false,
"inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }],
"name": "unstake",
"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"
},
{
"constant": false,
"inputs": [{ "internalType": "bytes32", "name": "poolId", "type": "bytes32" }],
"name": "withdrawDelegatorRewards",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"methods": {
"addAuthorizedAddress(address)": {
"details": "Authorizes an address.",
"params": { "target": "Address to authorize." }
},
"addExchangeAddress(address)": {
"details": "Adds a new exchange address",
"params": { "addr": "Address of exchange contract to add" }
},
"computeRewardBalanceOfDelegator(bytes32,address)": {
"details": "Computes the reward balance in ETH of a specific member of a pool.",
"params": { "member": "The member of the pool.", "poolId": "Unique id of pool." },
"return": "totalReward Balance in ETH."
},
"computeRewardBalanceOfOperator(bytes32)": {
"details": "Computes the reward balance in ETH of the operator of a pool.",
"params": { "poolId": "Unique id of pool." },
"return": "totalReward Balance in ETH."
},
"createStakingPool(uint32,bool)": {
"details": "Create a new staking pool. The sender will be the operator of this pool. Note that an operator must be payable.",
"params": {
"addOperatorAsMaker": "Adds operator to the created pool as a maker for convenience iff true.",
"operatorShare": "Portion of rewards owned by the operator, in ppm."
},
"return": "poolId The unique pool id generated for this pool."
},
"decreaseStakingPoolOperatorShare(bytes32,uint32)": {
"details": "Decreases the operator share for the given pool (i.e. increases pool rewards for members).",
"params": {
"newOperatorShare": "The newly decreased percentage of any rewards owned by the operator.",
"poolId": "Unique Id of pool."
}
},
"endEpoch()": {
"details": "Begins a new epoch, preparing the prior one for finalization. Throws if not enough time has passed between epochs or if the previous epoch was not fully finalized.",
"return": "numPoolsToFinalize The number of unfinalized pools."
},
"finalizePool(bytes32)": {
"details": "Instantly finalizes a single pool that earned rewards in the previous epoch, crediting it rewards for members and withdrawing operator's rewards as WETH. This can be called by internal functions that need to finalize a pool immediately. Does nothing if the pool is already finalized or did not earn rewards in the previous epoch.",
"params": { "poolId": "The pool ID to finalize." }
},
"getAuthorizedAddresses()": {
"details": "Gets all authorized addresses.",
"return": "Array of authorized addresses."
},
"getCurrentEpochEarliestEndTimeInSeconds()": {
"details": "Returns the earliest end time in seconds of this epoch. The next epoch can begin once this time is reached. Epoch period = [startTimeInSeconds..endTimeInSeconds)",
"return": "Time in seconds."
},
"getGlobalStakeByStatus(uint8)": {
"details": "Gets global stake for a given status.",
"params": { "stakeStatus": "UNDELEGATED or DELEGATED" },
"return": "Global stake for given status."
},
"getOwnerStakeByStatus(address,uint8)": {
"details": "Gets an owner's stake balances by status.",
"params": { "stakeStatus": "UNDELEGATED or DELEGATED", "staker": "Owner of stake." },
"return": "Owner's stake balances for given status."
},
"getParams()": {
"details": "Retrieves all configurable parameter values.",
"return": "_epochDurationInSeconds Minimum seconds between epochs._rewardDelegatedStakeWeight How much delegated stake is weighted vs operator stake, in ppm._minimumPoolStake Minimum amount of stake required in a pool to collect rewards._cobbDouglasAlphaNumerator Numerator for cobb douglas alpha factor._cobbDouglasAlphaDenominator Denominator for cobb douglas alpha factor."
},
"getStakeDelegatedToPoolByOwner(address,bytes32)": {
"details": "Returns the stake delegated to a specific staking pool, by a given staker.",
"params": { "poolId": "Unique Id of pool.", "staker": "of stake." },
"return": "Stake delegated to pool by staker."
},
"getStakingPool(bytes32)": {
"details": "Returns a staking pool",
"params": { "poolId": "Unique id of pool." }
},
"getStakingPoolStatsThisEpoch(bytes32)": {
"details": "Get stats on a staking pool in this epoch.",
"params": { "poolId": "Pool Id to query." },
"return": "PoolStats struct for pool id."
},
"getTotalStake(address)": {
"details": "Returns the total stake for a given staker.",
"params": { "staker": "of stake." },
"return": "Total ZRX staked by `staker`."
},
"getTotalStakeDelegatedToPool(bytes32)": {
"details": "Returns the total stake delegated to a specific staking pool, across all members.",
"params": { "poolId": "Unique Id of pool." },
"return": "Total stake delegated to pool."
},
"getWethContract()": {
"details": "An overridable way to access the deployed WETH contract. Must be view to allow overrides to access state.",
"return": "wethContract The WETH contract instance."
},
"getZrxVault()": {
"details": "An overridable way to access the deployed zrxVault. Must be view to allow overrides to access state.",
"return": "zrxVault The zrxVault contract."
},
"init()": {
"details": "Initialize storage owned by this contract. This function should not be called directly. The StakingProxy contract will call it in `attachStakingContract()`."
},
"joinStakingPoolAsMaker(bytes32)": {
"details": "Allows caller to join a staking pool as a maker.",
"params": { "poolId": "Unique id of pool." }
},
"moveStake((uint8,bytes32),(uint8,bytes32),uint256)": {
"details": "Moves stake between statuses: 'undelegated' or 'delegated'. Delegated stake can also be moved between pools. This change comes into effect next epoch.",
"params": {
"amount": "Amount of stake to move.",
"from": "Status to move stake out of.",
"to": "Status to move stake into."
}
},
"payProtocolFee(address,address,uint256)": {
"details": "Pays a protocol fee in ETH or WETH. Only a known 0x exchange can call this method. See (MixinExchangeManager).",
"params": {
"makerAddress": "The address of the order's maker.",
"payerAddress": "The address of the protocol fee payer.",
"protocolFee": "The protocol fee amount. This is either passed as ETH or transferred as WETH."
}
},
"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."
}
},
"removeExchangeAddress(address)": {
"details": "Removes an existing exchange address",
"params": { "addr": "Address of exchange contract to remove" }
},
"setParams(uint256,uint32,uint256,uint32,uint32)": {
"details": "Set all configurable parameters at once.",
"params": {
"_cobbDouglasAlphaDenominator": "Denominator for cobb douglas alpha factor.",
"_cobbDouglasAlphaNumerator": "Numerator for cobb douglas alpha factor.",
"_epochDurationInSeconds": "Minimum seconds between epochs.",
"_minimumPoolStake": "Minimum amount of stake required in a pool to collect rewards.",
"_rewardDelegatedStakeWeight": "How much delegated stake is weighted vs operator stake, in ppm."
}
},
"stake(uint256)": {
"details": "Stake ZRX tokens. Tokens are deposited into the ZRX Vault. Unstake to retrieve the ZRX. Stake is in the 'Active' status.",
"params": { "amount": "Amount of ZRX to stake." }
},
"transferOwnership(address)": {
"details": "Change the owner of this contract.",
"params": { "newOwner": "New owner address." }
},
"unstake(uint256)": {
"details": "Unstake. Tokens are withdrawn from the ZRX Vault and returned to the staker. Stake must be in the 'undelegated' status in both the current and next epoch in order to be unstaked.",
"params": { "amount": "Amount of ZRX to unstake." }
},
"withdrawDelegatorRewards(bytes32)": {
"details": "Withdraws the caller's WETH rewards that have accumulated until the last epoch.",
"params": { "poolId": "Unique id of pool." }
}
}
},
"evm": {
"bytecode": {
"object": "0x6080604052600080546001600160a01b031916331790556156b6806100256000396000f3fe6080604052600436106103295760003560e01c80638da5cb5b116101a5578063bb7ef7e0116100ec578063e8eeb3f811610095578063f18765321161006f578063f1876532146108bf578063f252b7a1146108df578063f2fde38b146108ff578063ff691b111461091f57610329565b8063e8eeb3f814610875578063e907f0031461088a578063ee99205c146108aa57610329565b8063e0ee036e116100c6578063e0ee036e1461082b578063e1c7392a14610840578063e804d0a41461085557610329565b8063bb7ef7e0146107c9578063c18c9141146107e9578063d39de6e91461080957610329565b8063a694fc3a1161014e578063b3e3337911610128578063b3e3337914610769578063b510879f14610789578063b9181611146107a957610329565b8063a694fc3a1461071f578063b05315241461073f578063b2baa33e1461075457610329565b8063a26171e21161017f578063a26171e2146106e2578063a3b4a327146106f7578063a657e5791461070a57610329565b80638da5cb5b1461068d5780639ad26744146106a25780639c3ccc82146106c257610329565b80634bcc3f6711610274578063624a72321161021d57806370712939116101f757806370712939146106165780637667180814610636578063816667961461064b5780638a2e271a1461066d57610329565b8063624a7232146105cc57806363403801146105e157806368a7d6cd146105f657610329565b80635bd4ab731161024e5780635bd4ab73146105595780635d91121d146105865780635e615a6b146105a657610329565b80634bcc3f67146104f7578063587da0231461052457806358f6c7e31461053957610329565b80633c277fc5116102d657806344a6958b116102b057806344a6958b1461048a57806346b97959146104aa578063494503d4146104d757610329565b80633c277fc51461041b5780633e4ad7321461043d57806342f1181e1461046a57610329565b80632a94c279116103075780632a94c2791461039b5780632e17de78146103ca57806338229d93146103ea57610329565b806301e28d841461032e5780630b9663db146103505780631e7ff8f61461037b575b600080fd5b34801561033a57600080fd5b5061034e610349366004614fd1565b61093f565b005b34801561035c57600080fd5b50610365610a0d565b6040516103729190615331565b60405180910390f35b34801561038757600080fd5b50610365610396366004614fd1565b610b5a565b3480156103a757600080fd5b506103bb6103b63660046150e5565b610bf4565b6040516103729392919061551e565b3480156103d657600080fd5b5061034e6103e53660046150a9565b610c20565b3480156103f657600080fd5b5061040a6104053660046150a9565b610dd5565b60405161037295949392919061554f565b34801561042757600080fd5b50610430610e04565b604051610372919061522e565b34801561044957600080fd5b5061045d6104583660046150a9565b610e1c565b60405161037291906154df565b34801561047657600080fd5b5061034e610485366004614fd1565b610e3b565b34801561049657600080fd5b5061045d6104a5366004615056565b610e4f565b3480156104b657600080fd5b506104ca6104c53660046150a9565b610eae565b604051610372919061548b565b3480156104e357600080fd5b506104306104f23660046150a9565b610ef9565b34801561050357600080fd5b506105176105123660046150a9565b610f2d565b60405161037291906154ac565b34801561053057600080fd5b50610365610f8f565b34801561054557600080fd5b5061034e61055436600461514e565b610f95565b34801561056557600080fd5b50610579610574366004614fd1565b611192565b6040516103729190615326565b34801561059257600080fd5b5061034e6105a1366004615106565b6111a7565b3480156105b257600080fd5b506105bb611270565b604051610372959493929190615572565b3480156105d857600080fd5b50610430611299565b3480156105ed57600080fd5b506103656112b1565b34801561060257600080fd5b50610365610611366004615201565b6112b7565b34801561062257600080fd5b5061034e610631366004614fd1565b6113f0565b34801561064257600080fd5b506103656114a5565b34801561065757600080fd5b506106606114ab565b60405161037291906155b6565b34801561067957600080fd5b5061034e610688366004614fd1565b6114b7565b34801561069957600080fd5b50610430611579565b3480156106ae57600080fd5b5061034e6106bd36600461502c565b611595565b3480156106ce57600080fd5b5061034e6106dd3660046151a3565b6115a7565b3480156106ee57600080fd5b50610365611621565b61034e610705366004614fec565b611627565b34801561071657600080fd5b50610365611877565b34801561072b57600080fd5b5061034e61073a3660046150a9565b61187d565b34801561074b57600080fd5b50610365611992565b34801561076057600080fd5b50610365611998565b34801561077557600080fd5b5061034e6107843660046150a9565b6119b6565b34801561079557600080fd5b5061034e6107a43660046150a9565b6119f6565b3480156107b557600080fd5b506105796107c4366004614fd1565b611a00565b3480156107d557600080fd5b506103656107e43660046150a9565b611a15565b3480156107f557600080fd5b506103656108043660046150a9565b611aa0565b34801561081557600080fd5b5061081e611ab2565b60405161037291906152cd565b34801561083757600080fd5b50610660611b21565b34801561084c57600080fd5b5061034e611b2d565b34801561086157600080fd5b5061045d610870366004615132565b611b47565b34801561088157600080fd5b50610660611c97565b34801561089657600080fd5b506103656108a53660046150c1565b611cab565b3480156108b657600080fd5b50610430611d48565b3480156108cb57600080fd5b506103656108da366004614fd1565b611d64565b3480156108eb57600080fd5b5061045d6108fa36600461502c565b611d76565b34801561090b57600080fd5b5061034e61091a366004614fd1565b611db7565b34801561092b57600080fd5b5061034e61093a3660046150a9565b611e5a565b610947612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610987576109876109826001836120aa565b61214c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a0290839061522e565b60405180910390a150565b600c5460009081610a2582600163ffffffff61215416565b6000818152601660205260409020600101549091508015610a4d57610a4d6109828383612173565b610a55612190565b610a5d612202565b600084815260166020526040902055610a74614eb9565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610af69491939291615534565b60405180910390a2610b066122a6565b6020810151610b4d57805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610b449160009161537c565b60405180910390a25b6020015193505050505b90565b6000610b64611299565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610b9c919061522e565b60206040518083038186803b158015610bb457600080fd5b505afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bec919081019061518b565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610c29614ee8565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610c76906122e9565b90506000610ca882602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff1661238f565b905080841115610cbf57610cbf61098285836123a5565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0d90856123c2565b610d15611299565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610d4f9291906152a7565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610dc79190615331565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b610e24614ee8565b6000828152600760205260409020610bec906122e9565b610e43612449565b610e4c81612490565b50565b610e57614ee8565b610ea560056000846001811115610e6a57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825290925290206122e9565b90505b92915050565b610eb6614f08565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b60028181548110610f0657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610f35614f29565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b600d5481565b3381610fa1575061118d565b6000610fb06020860186615132565b6001811115610fbb57fe5b148015610fdf57506000610fd26020850185615132565b6001811115610fdd57fe5b145b15610fea575061118d565b6001610ff96020860186615132565b600181111561100457fe5b141561101957611019846020013582846125c1565b60016110286020850185615132565b600181111561103357fe5b1415611048576110488360200135828461265a565b600060058161105a6020880188615132565b600181111561106557fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff86168252835290812092509060059082906110af90880188615132565b60018111156110ba57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff87168252909252902090506110fd8282866126f3565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d90889061114f908c615132565b600181111561115a57fe5b61116760208c018c615132565b600181111561117257fe5b6040516111819392919061559d565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b816111b1816127ec565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff166111e9848285612825565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610dc790849087906155c7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b73ba7f8b5fb1b19c1211c5d49550fcd149177a5eaf90565b60115481565b60085460009033906112d090600163ffffffff61286d16565b600881905591506112e582620f424086612825565b6112ed614f29565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906113d19085908590899061533a565b60405180910390a183156113e8576113e8836119b6565b505092915050565b6113f8612449565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166114315761143161098282612889565b60005b6002548110156114a1578173ffffffffffffffffffffffffffffffffffffffff166002828154811061146257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611499576114948282612928565b6114a1565b600101611434565b5050565b600c5481565b60145463ffffffff1681565b6114bf612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156114fb576114fb6109826000836120aa565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a0290839061522e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61159d612449565b6114a18282612928565b6115af612087565b6115bc8585858585612b77565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b15801561160257600080fd5b505afa158015611616573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661164a5761164a61098233612c3a565b61165381612c55565b3461172d57611660610e04565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161169c93929190615276565b602060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ee919081019061508d565b61172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490615454565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061175e575061118d565b600061176982610e1c565b602001516bffffffffffffffffffffffff16905060135481101561178e57505061118d565b600c5460008381526015602090815260408083208484528252808320601690925290912081548061183d576000806117c68888612c76565b6002870182905560018701819055600386015491935091506117ee908263ffffffff61286d16565b60038501556001808501546118089163ffffffff61286d16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b61184d818863ffffffff61286d16565b83556002820154611864908863ffffffff61286d16565b8260020181905550505050505050505050565b60085481565b33611886611299565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b81526004016118c09291906152a7565b600060405180830381600087803b1580156118da57600080fd5b505af11580156118ee573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc602052604090206119409083612d02565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a836040516119869190615331565b60405180910390a25050565b60175481565b60006119b1601154600d5461286d90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610e4c8133612d6c565b60016020526000908152604090205460ff1681565b6000611a1f614f29565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611a8385612f44565b91509150611a9683602001518383613001565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611b1757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611aec575b5050505050905090565b60125463ffffffff1681565b611b35612087565b611b3d613042565b611b45613055565b565b611b4f614ee8565b60016000526004602052611b827fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056122e9565b90506000826001811115611b9257fe5b1415610bef576000611ba2611299565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1f919081019061518b565b9050611c4e611c4983602001516bffffffffffffffffffffffff168361215490919063ffffffff16565b613080565b6bffffffffffffffffffffffff90811660208401526040830151611c7e91611c499184911663ffffffff61215416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611cb5614f29565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611d1986612f44565b915091506000611d2e84602001518484613001565b915050611d3d878783856130a4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611d7e614ee8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610ea5906122e9565b611dbf612449565b73ffffffffffffffffffffffffffffffffffffffff8116611dea57611de56109826131f1565b610e4c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c546000611e7082600163ffffffff61215416565b9050611e7a614eb9565b50600081815260166020908152604091829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152611ecf57505050610e4c565b611ed7614f08565b5060008481526015602090815260408083208584528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252611f255750505050610e4c565b6000858152601560209081526040808320868452909152812081815560018101829055600201819055611f588284613228565b9050600080611f6c8884866040015161329d565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c8484604051611fa392919061537c565b60405180910390a36000611fbd838363ffffffff61286d16565b6080870151909150611fd5908263ffffffff61286d16565b6080870181905260008881526016602090815260409091206004019190915586015161200890600163ffffffff61215416565b602080880182815260008a8152601690925260409091206001019190915551611616576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291612066908263ffffffff61215416565b60405161207492919061537c565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611b4557611b45610982336133ed565b606063b9588e4360e01b83836040516024016120c79291906153c4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60008282111561216d5761216d61098260028585613408565b50900390565b606063614b800a60e01b83836040516024016120c792919061537c565b478015610e4c5761219f610e04565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121e657600080fd5b505af11580156121fa573d6000803e3d6000fd5b505050505050565b60006119b1601754612212610e04565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161224a919061522e565b60206040518083038186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229a919081019061518b565b9063ffffffff61215416565b4260006122b1611998565b9050818111156122c8576122c861098282846134ad565b600c546000906122df90600163ffffffff61286d16565b600c555050600d55565b6122f1614ee8565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c54909181111561238957612364816134ca565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b600081831061239e5781610ea5565b5090919050565b60606384c8b7c960e01b83836040516024016120c792919061537c565b6123ca614ee8565b6123d3836122e9565b90506123fd611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242c91611c4991168463ffffffff61215416565b6bffffffffffffffffffffffff16602082015261118d83826134ea565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b4557600054611b459061098290339073ffffffffffffffffffffffffffffffffffffffff166135a4565b73ffffffffffffffffffffffffffffffffffffffff81166124b6576124b66109826135c1565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156124f0576124f0610982826135f8565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6125ca83613613565b6125d48383612d6c565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061260e908261364a565b6000838152600760205260409020612626908261364a565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261364a565b61266383613613565b61266d8383612d6c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206126a790826136a2565b60008381526007602052604090206126bf90826136a2565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826136a2565b6126fd83836136dd565b156127075761118d565b61270f614ee8565b612718846122e9565b9050612722614ee8565b61272b846122e9565b905081604001516bffffffffffffffffffffffff16831115612766576127666109828484604001516bffffffffffffffffffffffff166123a5565b604082015161278d90611c49906bffffffffffffffffffffffff168563ffffffff61215416565b6bffffffffffffffffffffffff9081166040808501919091528201516127be91611c4991168563ffffffff61286d16565b6bffffffffffffffffffffffff1660408201526127db85836134ea565b6127e584826134ea565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146114a1576114a161098233846136e4565b620f424063ffffffff8216111561284a5761284561098260008584613701565b61118d565b8163ffffffff168163ffffffff16111561118d5761118d61098260018584613701565b600082820183811015610ea557610ea561098260008686613408565b606063eb5108a260e01b826040516024016128a4919061522e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166129615761296161098283612889565b600254811061297c5761297c61098282600280549050613720565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481106129a057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612a0257612a02610982600283815481106129da57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461373d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612a7d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612ab057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612b2f9082614f40565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612c2b9087908790879087908790615572565b60405180910390a15050505050565b606063b56d2df060e01b826040516024016128a4919061522e565b803414158015612c6457503415155b15610e4c57610e4c610982823461375a565b6000828152600a602052604081205481908190612ca99073ffffffffffffffffffffffffffffffffffffffff1686611d76565b602001516bffffffffffffffffffffffff169050612ccd848263ffffffff61215416565b601254909350612cf890612ceb9063ffffffff16620f424086613777565b829063ffffffff61286d16565b9150509250929050565b612d0a614ee8565b612d13836122e9565b9050612d3d611c498383604001516bffffffffffffffffffffffff1661286d90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242c91611c4991168463ffffffff61286d16565b612d7582613799565b6000612d8483836000806130a4565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208784529091529020909150612dc0906122e9565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff95861602179092167401000000000000000000000000000000000000000093909216929092021790558015612f3b57612ea5838261380d565b612ead610e04565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612ee79291906152a7565b602060405180830381600087803b158015612f0157600080fd5b505af1158015612f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f39919081019061508d565b505b61118d83613855565b6000806000612f5f6001600c5461215490919063ffffffff16565b9050612f69614f08565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290612ff1908290613228565b9350806040015192505050915091565b600080826130115783915061303a565b61302563ffffffff8616620f424086613862565b9150613037848363ffffffff61215416565b90505b935093915050565b61304a613898565b42600d556001600c55565b61305d6138ad565b620d2f00620dbba068056bc75e2d63100000600260036127e58585858585612b77565b806bffffffffffffffffffffffff81168114610bef57610bef610982600284613912565b600c546000906130b2614ee8565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff6801000000000000000083048116948401949094527401000000000000000000000000000000000000000090910490921692810192909252821415613153576000925050506131e9565b61315f8183878761392f565b81519093506000906131829067ffffffffffffffff16600163ffffffff61286d16565b90506131c06131b38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff16856139b2565b859063ffffffff61286d16565b93506131e36131b38984604001516bffffffffffffffffffffffff1684876139b2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061323657610ea8565b8151835160408401516020860151606086015160145461326c95949392919063ffffffff80821691640100000000900416613a4b565b608083015183519192506000916132889163ffffffff61215416565b905081811015613296578091505b5092915050565b6000806132a8614f29565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261330c908686613001565b909350915082156133c95761331f610e04565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916133759187906004016152a7565b602060405180830381600087803b15801561338f57600080fd5b505af11580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c7919081019061508d565b505b81156133e4576133d98683613b0e565b6133e4868386613b4f565b50935093915050565b606063b65a25b960e01b826040516024016128a4919061522e565b606063e946c1bb60e01b8484846040516024016134279392919061538a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016120c792919061537c565b8067ffffffffffffffff81168114610bef57610bef610982600184613912565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b83836040516024016120c792919061524f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016128a4919061522e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e4c57610e4c610982826000613c38565b613652614ee8565b61365b836122e9565b9050613685611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff16604082015261118d83826134ea565b6136aa614ee8565b6136b3836122e9565b9050613685611c498383604001516bffffffffffffffffffffffff1661286d90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016120c79291906152a7565b60606322df959760e01b848484604051602401613427939291906153f6565b606063e9f8377160e01b83836040516024016120c792919061537c565b606063140a84db60e01b83836040516024016120c792919061524f565b60606331d7a50560e01b83836040516024016120c792919061537c565b60006131e98361378d868563ffffffff613c5516565b9063ffffffff613c8616565b600c546000906137b090600163ffffffff61215416565b90506137ba614f08565b50600082815260156020908152604080832084845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092521561118d5761118d6109828484613cb0565b6000828152600b602052604090205461382c908263ffffffff61215416565b6000838152600b602052604090205560175461384e908263ffffffff61215416565b6017555050565b610e4c8160006001613b4f565b60006131e98361378d61387c82600163ffffffff61215416565b61388c888763ffffffff613c5516565b9063ffffffff61286d16565b600d5415611b4557611b456109826000613ccd565b601154158015906138c5575060125463ffffffff1615155b80156138d2575060135415155b80156138e5575060145463ffffffff1615155b80156139005750601454640100000000900463ffffffff1615155b15611b4557611b456109826001613ccd565b606063c996af7b60e01b83836040516024016120c79291906153ac565b600082158061393c575081155b15613949575060006131e9565b600061395c85600163ffffffff61215416565b865167ffffffffffffffff16101561397857856040015161397e565b85602001515b6bffffffffffffffffffffffff1690508061399d5760009150506131e9565b6139a8848483613777565b9695505050505050565b60008315806139c057508183145b156139cd575060006131e9565b818310613a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061541d565b613a0e614f64565b613a188685613d0c565b9050613a22614f64565b613a2c8785613d0c565b9050611d3d81600001518260200151846000015185602001518a613e2a565b600080613a588888613eb6565b90506000613a668787613eb6565b9050811580613a73575080155b15613a84575060009150611d3d9050565b600081831315613a9d57613a988284613f08565b613aa7565b613aa78383613f08565b9050613ad0613acb613ab883613f27565b8863ffffffff168863ffffffff166145c9565b6145d8565b905081831315613ae957613ae48282613f08565b613af3565b613af38282614bc2565b9050613aff818c614bee565b9b9a5050505050505050505050565b6000828152600b6020526040902054613b2d908263ffffffff61286d16565b6000838152600b602052604090205560175461384e908263ffffffff61286d16565b6000838152600f6020526040902054600c5480821415613b7057505061118d565b613b78614f64565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613baf614f64565b613bb882614c30565b15613bf157613bd1826000015183602001518888614c39565b60208301819052818352613be59190614c9b565b60208301528152613bfc565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b83836040516024016120c792919061536c565b600082613c6457506000610ea8565b82820282848281613c7157fe5b0414610ea557610ea561098260018686613408565b600081613c9c57613c9c61098260038585613408565b6000828481613ca757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016120c792919061537c565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613cfc57fe5b6040516024016128a491906155de565b613d14614f64565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613d4c81614c30565b15613d5657610ea8565b6000613d6983600163ffffffff61215416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613da482614c30565b15613daf5750610ea8565b6000848152600f602052604090205483811015613e0c576000858152600e6020908152604080832084845282529182902082518084019093528054835260010154908201529250613dff83614c30565b15613e0c5750610ea89050565b50506040805180820190915260008152600160208201529392505050565b600081613e3957506000613ead565b83613e5957613e528561378d848963ffffffff613c5516565b9050613ead565b6000613e7e613e6e868863ffffffff613c5516565b61229a898763ffffffff613c5516565b90506000613e92828663ffffffff613c8616565b9050613ea88761378d868463ffffffff613c5516565b925050505b95945050505050565b600080831215613ece57613ece610982600185614cc4565b6000821215613ee557613ee5610982600184614cc4565b610ea5613f02846f80000000000000000000000000000000614d05565b83614d58565b6000610ea5613f02846f80000000000000000000000000000000614d05565b60006f80000000000000000000000000000000821315613f4f57613f4f610982600184614dd9565b60008213613f6557613f65610982600084614dd9565b6f80000000000000000000000000000000821415613f8557506000610bef565b640733048c5a8213613fb857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610bef565b60008060006a01c8464f761647600000008513614017577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e900000000000008513614075577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d7800000000000000085136140d7577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361413b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc000000000000000000851361419f577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614203577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be58280000000000000000008513614267577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c00000000000000000085136142cb577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361432f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816143a557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa038302816143d657fe5b05840193506f80000000000000000000000000000000818302816143f657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161442757fe5b05840193506f800000000000000000000000000000008183028161444757fe5b059150700400000000000000000000000000000000836f924924924924924924924924924924920383028161447857fe5b05840193506f800000000000000000000000000000008183028161449857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e038302816144c957fe5b05840193506f80000000000000000000000000000000818302816144e957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161451a57fe5b05840193506f800000000000000000000000000000008183028161453a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d890383028161456b57fe5b05840193506f800000000000000000000000000000008183028161458b57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816145bc57fe5b0584019350505050919050565b60006131e9613f028585614d05565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561460a57506000610bef565b8161462657506f80000000000000000000000000000000610bef565b600082131561463d5761463d610982600184614dd9565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816146a957fe5b05905080670168244fdac7800002830192506f80000000000000000000000000000000828202816146d657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161470257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161472e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161475a57fe5b059050806536e0f639b80002830192506f800000000000000000000000000000008282028161478557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816147b057fe5b05905080649c197dcc0002830192506f80000000000000000000000000000000828202816147da57fe5b05905080640e30dce40002830192506f800000000000000000000000000000008282028161480457fe5b0590508064012ebd130002830192506f800000000000000000000000000000008282028161482e57fe5b059050806317499f0002830192506f800000000000000000000000000000008282028161485757fe5b059050806301a9d48002830192506f800000000000000000000000000000008282028161488057fe5b05905080621c638002830192506f80000000000000000000000000000000828202816148a857fe5b059050806201c63802830192506f80000000000000000000000000000000828202816148d057fe5b05905080611ab802830192506f80000000000000000000000000000000828202816148f757fe5b0590508061017c02830192506f800000000000000000000000000000008282028161491e57fe5b05905080601402830192506f800000000000000000000000000000008282028161494457fe5b600095909503946721c3677c82b400009190059384010582016f80000000000000000000000000000000019290507010000000000000000000000000000000008416156149b3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b7008000000000000000000000000000000008416156149f5577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614a3757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614a79577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614abb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614afb576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614b3b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614b7b576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614bbb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614bdf8484614d05565b81614be657fe5b059392505050565b600080821215614c0657614c06610982600184614cc4565b6000614c128484614d05565b905060008113614c26576000915050610ea8565b607f1c9392505050565b60200151151590565b60008085614c4b575082905081614c92565b83614c5a575084905083614c92565b614c7d614c6d858763ffffffff613c5516565b61388c888663ffffffff613c5516565b9150614c8f858463ffffffff613c5516565b90505b94509492505050565b600080614cb984846f80000000000000000000000000000000614e08565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614cf357fe5b836040516024016120c79291906155ec565b6000821580614d12575081155b15614d1f57506000610ea8565b5081810281838281614d2d57fe5b05141580614d44575082828281614d4057fe5b0514155b15610ea857610ea861098260018585614e76565b600081614d6e57614d6e61098260028585614e76565b7f800000000000000000000000000000000000000000000000000000000000000083148015614dbc5750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b15614dd057614dd061098260038585614e76565b818381614be657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614cf357fe5b60008082851180614e1857508284115b15614e6d57600084861015614e2d5784614e2f565b855b9050614e41818563ffffffff613c8616565b9050614e53868263ffffffff613c8616565b9250614e65858263ffffffff613c8616565b91505061303a565b50929391925050565b60607f8c12dfe700000000000000000000000000000000000000000000000000000000846003811115614ea557fe5b8484604051602401613427939291906155ff565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b81548183558181111561118d5760008381526020902061118d918101908301614f7e565b604051806040016040528060008152602001600081525090565b610b5791905b80821115614f985760008155600101614f84565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ea857600080fd5b600060408284031215612389578081fd5b600060208284031215614fe2578081fd5b610ea58383614f9c565b600080600060608486031215615000578182fd5b833561500b81615624565b9250602084013561501b81615624565b929592945050506040919091013590565b6000806040838503121561503e578182fd5b6150488484614f9c565b946020939093013593505050565b60008060408385031215615068578182fd5b6150728484614f9c565b9150602083013561508281615654565b809150509250929050565b60006020828403121561509e578081fd5b8151610ea581615646565b6000602082840312156150ba578081fd5b5035919050565b600080604083850312156150d3578182fd5b82359150602083013561508281615624565b600080604083850312156150f7578182fd5b50508035926020909101359150565b60008060408385031215615118578182fd5b82359150602083013563ffffffff81168114615082578182fd5b600060208284031215615143578081fd5b8135610ea581615654565b600080600060a08486031215615162578283fd5b61516c8585614fc0565b925061517b8560408601614fc0565b9150608084013590509250925092565b60006020828403121561519c578081fd5b5051919050565b600080600080600060a086880312156151ba578283fd5b8535945060208601356151cc81615661565b93506040860135925060608601356151e381615661565b915060808601356151f381615661565b809150509295509295909350565b60008060408385031215615213578182fd5b823561521e81615661565b9150602083013561508281615646565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561531b57835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016152e7565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b606081016004851061539857fe5b938152602081019290925260409091015290565b60408101600384106153ba57fe5b9281526020015290565b604081016153d18461561a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016154038561561a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610e4c57fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610e4c57600080fd5b8015158114610e4c57600080fd5b60028110610e4c57600080fd5b63ffffffff81168114610e4c57600080fdfea365627a7a72315820a6a9e743f24e60f8d91fcb2ea17bf39b75a82219e5ec59615ab639919ab3d1526c6578706572696d656e74616cf564736f6c63430005110040"
},
"deployedBytecode": {
"object": "0x6080604052600436106103295760003560e01c80638da5cb5b116101a5578063bb7ef7e0116100ec578063e8eeb3f811610095578063f18765321161006f578063f1876532146108bf578063f252b7a1146108df578063f2fde38b146108ff578063ff691b111461091f57610329565b8063e8eeb3f814610875578063e907f0031461088a578063ee99205c146108aa57610329565b8063e0ee036e116100c6578063e0ee036e1461082b578063e1c7392a14610840578063e804d0a41461085557610329565b8063bb7ef7e0146107c9578063c18c9141146107e9578063d39de6e91461080957610329565b8063a694fc3a1161014e578063b3e3337911610128578063b3e3337914610769578063b510879f14610789578063b9181611146107a957610329565b8063a694fc3a1461071f578063b05315241461073f578063b2baa33e1461075457610329565b8063a26171e21161017f578063a26171e2146106e2578063a3b4a327146106f7578063a657e5791461070a57610329565b80638da5cb5b1461068d5780639ad26744146106a25780639c3ccc82146106c257610329565b80634bcc3f6711610274578063624a72321161021d57806370712939116101f757806370712939146106165780637667180814610636578063816667961461064b5780638a2e271a1461066d57610329565b8063624a7232146105cc57806363403801146105e157806368a7d6cd146105f657610329565b80635bd4ab731161024e5780635bd4ab73146105595780635d91121d146105865780635e615a6b146105a657610329565b80634bcc3f67146104f7578063587da0231461052457806358f6c7e31461053957610329565b80633c277fc5116102d657806344a6958b116102b057806344a6958b1461048a57806346b97959146104aa578063494503d4146104d757610329565b80633c277fc51461041b5780633e4ad7321461043d57806342f1181e1461046a57610329565b80632a94c279116103075780632a94c2791461039b5780632e17de78146103ca57806338229d93146103ea57610329565b806301e28d841461032e5780630b9663db146103505780631e7ff8f61461037b575b600080fd5b34801561033a57600080fd5b5061034e610349366004614fd1565b61093f565b005b34801561035c57600080fd5b50610365610a0d565b6040516103729190615331565b60405180910390f35b34801561038757600080fd5b50610365610396366004614fd1565b610b5a565b3480156103a757600080fd5b506103bb6103b63660046150e5565b610bf4565b6040516103729392919061551e565b3480156103d657600080fd5b5061034e6103e53660046150a9565b610c20565b3480156103f657600080fd5b5061040a6104053660046150a9565b610dd5565b60405161037295949392919061554f565b34801561042757600080fd5b50610430610e04565b604051610372919061522e565b34801561044957600080fd5b5061045d6104583660046150a9565b610e1c565b60405161037291906154df565b34801561047657600080fd5b5061034e610485366004614fd1565b610e3b565b34801561049657600080fd5b5061045d6104a5366004615056565b610e4f565b3480156104b657600080fd5b506104ca6104c53660046150a9565b610eae565b604051610372919061548b565b3480156104e357600080fd5b506104306104f23660046150a9565b610ef9565b34801561050357600080fd5b506105176105123660046150a9565b610f2d565b60405161037291906154ac565b34801561053057600080fd5b50610365610f8f565b34801561054557600080fd5b5061034e61055436600461514e565b610f95565b34801561056557600080fd5b50610579610574366004614fd1565b611192565b6040516103729190615326565b34801561059257600080fd5b5061034e6105a1366004615106565b6111a7565b3480156105b257600080fd5b506105bb611270565b604051610372959493929190615572565b3480156105d857600080fd5b50610430611299565b3480156105ed57600080fd5b506103656112b1565b34801561060257600080fd5b50610365610611366004615201565b6112b7565b34801561062257600080fd5b5061034e610631366004614fd1565b6113f0565b34801561064257600080fd5b506103656114a5565b34801561065757600080fd5b506106606114ab565b60405161037291906155b6565b34801561067957600080fd5b5061034e610688366004614fd1565b6114b7565b34801561069957600080fd5b50610430611579565b3480156106ae57600080fd5b5061034e6106bd36600461502c565b611595565b3480156106ce57600080fd5b5061034e6106dd3660046151a3565b6115a7565b3480156106ee57600080fd5b50610365611621565b61034e610705366004614fec565b611627565b34801561071657600080fd5b50610365611877565b34801561072b57600080fd5b5061034e61073a3660046150a9565b61187d565b34801561074b57600080fd5b50610365611992565b34801561076057600080fd5b50610365611998565b34801561077557600080fd5b5061034e6107843660046150a9565b6119b6565b34801561079557600080fd5b5061034e6107a43660046150a9565b6119f6565b3480156107b557600080fd5b506105796107c4366004614fd1565b611a00565b3480156107d557600080fd5b506103656107e43660046150a9565b611a15565b3480156107f557600080fd5b506103656108043660046150a9565b611aa0565b34801561081557600080fd5b5061081e611ab2565b60405161037291906152cd565b34801561083757600080fd5b50610660611b21565b34801561084c57600080fd5b5061034e611b2d565b34801561086157600080fd5b5061045d610870366004615132565b611b47565b34801561088157600080fd5b50610660611c97565b34801561089657600080fd5b506103656108a53660046150c1565b611cab565b3480156108b657600080fd5b50610430611d48565b3480156108cb57600080fd5b506103656108da366004614fd1565b611d64565b3480156108eb57600080fd5b5061045d6108fa36600461502c565b611d76565b34801561090b57600080fd5b5061034e61091a366004614fd1565b611db7565b34801561092b57600080fd5b5061034e61093a3660046150a9565b611e5a565b610947612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610987576109876109826001836120aa565b61214c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a0290839061522e565b60405180910390a150565b600c5460009081610a2582600163ffffffff61215416565b6000818152601660205260409020600101549091508015610a4d57610a4d6109828383612173565b610a55612190565b610a5d612202565b600084815260166020526040902055610a74614eb9565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610af69491939291615534565b60405180910390a2610b066122a6565b6020810151610b4d57805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610b449160009161537c565b60405180910390a25b6020015193505050505b90565b6000610b64611299565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610b9c919061522e565b60206040518083038186803b158015610bb457600080fd5b505afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bec919081019061518b565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610c29614ee8565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610c76906122e9565b90506000610ca882602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff1661238f565b905080841115610cbf57610cbf61098285836123a5565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0d90856123c2565b610d15611299565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610d4f9291906152a7565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610dc79190615331565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b610e24614ee8565b6000828152600760205260409020610bec906122e9565b610e43612449565b610e4c81612490565b50565b610e57614ee8565b610ea560056000846001811115610e6a57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825290925290206122e9565b90505b92915050565b610eb6614f08565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b60028181548110610f0657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610f35614f29565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b600d5481565b3381610fa1575061118d565b6000610fb06020860186615132565b6001811115610fbb57fe5b148015610fdf57506000610fd26020850185615132565b6001811115610fdd57fe5b145b15610fea575061118d565b6001610ff96020860186615132565b600181111561100457fe5b141561101957611019846020013582846125c1565b60016110286020850185615132565b600181111561103357fe5b1415611048576110488360200135828461265a565b600060058161105a6020880188615132565b600181111561106557fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff86168252835290812092509060059082906110af90880188615132565b60018111156110ba57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff87168252909252902090506110fd8282866126f3565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d90889061114f908c615132565b600181111561115a57fe5b61116760208c018c615132565b600181111561117257fe5b6040516111819392919061559d565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b816111b1816127ec565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff166111e9848285612825565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610dc790849087906155c7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b73ba7f8b5fb1b19c1211c5d49550fcd149177a5eaf90565b60115481565b60085460009033906112d090600163ffffffff61286d16565b600881905591506112e582620f424086612825565b6112ed614f29565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906113d19085908590899061533a565b60405180910390a183156113e8576113e8836119b6565b505092915050565b6113f8612449565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166114315761143161098282612889565b60005b6002548110156114a1578173ffffffffffffffffffffffffffffffffffffffff166002828154811061146257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611499576114948282612928565b6114a1565b600101611434565b5050565b600c5481565b60145463ffffffff1681565b6114bf612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156114fb576114fb6109826000836120aa565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a0290839061522e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61159d612449565b6114a18282612928565b6115af612087565b6115bc8585858585612b77565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b15801561160257600080fd5b505afa158015611616573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661164a5761164a61098233612c3a565b61165381612c55565b3461172d57611660610e04565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161169c93929190615276565b602060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ee919081019061508d565b61172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490615454565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061175e575061118d565b600061176982610e1c565b602001516bffffffffffffffffffffffff16905060135481101561178e57505061118d565b600c5460008381526015602090815260408083208484528252808320601690925290912081548061183d576000806117c68888612c76565b6002870182905560018701819055600386015491935091506117ee908263ffffffff61286d16565b60038501556001808501546118089163ffffffff61286d16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b61184d818863ffffffff61286d16565b83556002820154611864908863ffffffff61286d16565b8260020181905550505050505050505050565b60085481565b33611886611299565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b81526004016118c09291906152a7565b600060405180830381600087803b1580156118da57600080fd5b505af11580156118ee573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc602052604090206119409083612d02565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a836040516119869190615331565b60405180910390a25050565b60175481565b60006119b1601154600d5461286d90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610e4c8133612d6c565b60016020526000908152604090205460ff1681565b6000611a1f614f29565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611a8385612f44565b91509150611a9683602001518383613001565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611b1757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611aec575b5050505050905090565b60125463ffffffff1681565b611b35612087565b611b3d613042565b611b45613055565b565b611b4f614ee8565b60016000526004602052611b827fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056122e9565b90506000826001811115611b9257fe5b1415610bef576000611ba2611299565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1f919081019061518b565b9050611c4e611c4983602001516bffffffffffffffffffffffff168361215490919063ffffffff16565b613080565b6bffffffffffffffffffffffff90811660208401526040830151611c7e91611c499184911663ffffffff61215416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611cb5614f29565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611d1986612f44565b915091506000611d2e84602001518484613001565b915050611d3d878783856130a4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611d7e614ee8565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610ea5906122e9565b611dbf612449565b73ffffffffffffffffffffffffffffffffffffffff8116611dea57611de56109826131f1565b610e4c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c546000611e7082600163ffffffff61215416565b9050611e7a614eb9565b50600081815260166020908152604091829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152611ecf57505050610e4c565b611ed7614f08565b5060008481526015602090815260408083208584528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252611f255750505050610e4c565b6000858152601560209081526040808320868452909152812081815560018101829055600201819055611f588284613228565b9050600080611f6c8884866040015161329d565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c8484604051611fa392919061537c565b60405180910390a36000611fbd838363ffffffff61286d16565b6080870151909150611fd5908263ffffffff61286d16565b6080870181905260008881526016602090815260409091206004019190915586015161200890600163ffffffff61215416565b602080880182815260008a8152601690925260409091206001019190915551611616576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291612066908263ffffffff61215416565b60405161207492919061537c565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611b4557611b45610982336133ed565b606063b9588e4360e01b83836040516024016120c79291906153c4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60008282111561216d5761216d61098260028585613408565b50900390565b606063614b800a60e01b83836040516024016120c792919061537c565b478015610e4c5761219f610e04565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121e657600080fd5b505af11580156121fa573d6000803e3d6000fd5b505050505050565b60006119b1601754612212610e04565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161224a919061522e565b60206040518083038186803b15801561226257600080fd5b505afa158015612276573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229a919081019061518b565b9063ffffffff61215416565b4260006122b1611998565b9050818111156122c8576122c861098282846134ad565b600c546000906122df90600163ffffffff61286d16565b600c555050600d55565b6122f1614ee8565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c54909181111561238957612364816134ca565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b600081831061239e5781610ea5565b5090919050565b60606384c8b7c960e01b83836040516024016120c792919061537c565b6123ca614ee8565b6123d3836122e9565b90506123fd611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242c91611c4991168463ffffffff61215416565b6bffffffffffffffffffffffff16602082015261118d83826134ea565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b4557600054611b459061098290339073ffffffffffffffffffffffffffffffffffffffff166135a4565b73ffffffffffffffffffffffffffffffffffffffff81166124b6576124b66109826135c1565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156124f0576124f0610982826135f8565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6125ca83613613565b6125d48383612d6c565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061260e908261364a565b6000838152600760205260409020612626908261364a565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261364a565b61266383613613565b61266d8383612d6c565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206126a790826136a2565b60008381526007602052604090206126bf90826136a2565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826136a2565b6126fd83836136dd565b156127075761118d565b61270f614ee8565b612718846122e9565b9050612722614ee8565b61272b846122e9565b905081604001516bffffffffffffffffffffffff16831115612766576127666109828484604001516bffffffffffffffffffffffff166123a5565b604082015161278d90611c49906bffffffffffffffffffffffff168563ffffffff61215416565b6bffffffffffffffffffffffff9081166040808501919091528201516127be91611c4991168563ffffffff61286d16565b6bffffffffffffffffffffffff1660408201526127db85836134ea565b6127e584826134ea565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146114a1576114a161098233846136e4565b620f424063ffffffff8216111561284a5761284561098260008584613701565b61118d565b8163ffffffff168163ffffffff16111561118d5761118d61098260018584613701565b600082820183811015610ea557610ea561098260008686613408565b606063eb5108a260e01b826040516024016128a4919061522e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff166129615761296161098283612889565b600254811061297c5761297c61098282600280549050613720565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481106129a057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612a0257612a02610982600283815481106129da57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461373d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612a7d57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612ab057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612b2f9082614f40565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612c2b9087908790879087908790615572565b60405180910390a15050505050565b606063b56d2df060e01b826040516024016128a4919061522e565b803414158015612c6457503415155b15610e4c57610e4c610982823461375a565b6000828152600a602052604081205481908190612ca99073ffffffffffffffffffffffffffffffffffffffff1686611d76565b602001516bffffffffffffffffffffffff169050612ccd848263ffffffff61215416565b601254909350612cf890612ceb9063ffffffff16620f424086613777565b829063ffffffff61286d16565b9150509250929050565b612d0a614ee8565b612d13836122e9565b9050612d3d611c498383604001516bffffffffffffffffffffffff1661286d90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242c91611c4991168463ffffffff61286d16565b612d7582613799565b6000612d8483836000806130a4565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208784529091529020909150612dc0906122e9565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff95861602179092167401000000000000000000000000000000000000000093909216929092021790558015612f3b57612ea5838261380d565b612ead610e04565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612ee79291906152a7565b602060405180830381600087803b158015612f0157600080fd5b505af1158015612f15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f39919081019061508d565b505b61118d83613855565b6000806000612f5f6001600c5461215490919063ffffffff16565b9050612f69614f08565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290612ff1908290613228565b9350806040015192505050915091565b600080826130115783915061303a565b61302563ffffffff8616620f424086613862565b9150613037848363ffffffff61215416565b90505b935093915050565b61304a613898565b42600d556001600c55565b61305d6138ad565b620d2f00620dbba068056bc75e2d63100000600260036127e58585858585612b77565b806bffffffffffffffffffffffff81168114610bef57610bef610982600284613912565b600c546000906130b2614ee8565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff6801000000000000000083048116948401949094527401000000000000000000000000000000000000000090910490921692810192909252821415613153576000925050506131e9565b61315f8183878761392f565b81519093506000906131829067ffffffffffffffff16600163ffffffff61286d16565b90506131c06131b38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff16856139b2565b859063ffffffff61286d16565b93506131e36131b38984604001516bffffffffffffffffffffffff1684876139b2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061323657610ea8565b8151835160408401516020860151606086015160145461326c95949392919063ffffffff80821691640100000000900416613a4b565b608083015183519192506000916132889163ffffffff61215416565b905081811015613296578091505b5092915050565b6000806132a8614f29565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261330c908686613001565b909350915082156133c95761331f610e04565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916133759187906004016152a7565b602060405180830381600087803b15801561338f57600080fd5b505af11580156133a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c7919081019061508d565b505b81156133e4576133d98683613b0e565b6133e4868386613b4f565b50935093915050565b606063b65a25b960e01b826040516024016128a4919061522e565b606063e946c1bb60e01b8484846040516024016134279392919061538a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016120c792919061537c565b8067ffffffffffffffff81168114610bef57610bef610982600184613912565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b83836040516024016120c792919061524f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016128a4919061522e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e4c57610e4c610982826000613c38565b613652614ee8565b61365b836122e9565b9050613685611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff16604082015261118d83826134ea565b6136aa614ee8565b6136b3836122e9565b9050613685611c498383604001516bffffffffffffffffffffffff1661286d90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016120c79291906152a7565b60606322df959760e01b848484604051602401613427939291906153f6565b606063e9f8377160e01b83836040516024016120c792919061537c565b606063140a84db60e01b83836040516024016120c792919061524f565b60606331d7a50560e01b83836040516024016120c792919061537c565b60006131e98361378d868563ffffffff613c5516565b9063ffffffff613c8616565b600c546000906137b090600163ffffffff61215416565b90506137ba614f08565b50600082815260156020908152604080832084845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092521561118d5761118d6109828484613cb0565b6000828152600b602052604090205461382c908263ffffffff61215416565b6000838152600b602052604090205560175461384e908263ffffffff61215416565b6017555050565b610e4c8160006001613b4f565b60006131e98361378d61387c82600163ffffffff61215416565b61388c888763ffffffff613c5516565b9063ffffffff61286d16565b600d5415611b4557611b456109826000613ccd565b601154158015906138c5575060125463ffffffff1615155b80156138d2575060135415155b80156138e5575060145463ffffffff1615155b80156139005750601454640100000000900463ffffffff1615155b15611b4557611b456109826001613ccd565b606063c996af7b60e01b83836040516024016120c79291906153ac565b600082158061393c575081155b15613949575060006131e9565b600061395c85600163ffffffff61215416565b865167ffffffffffffffff16101561397857856040015161397e565b85602001515b6bffffffffffffffffffffffff1690508061399d5760009150506131e9565b6139a8848483613777565b9695505050505050565b60008315806139c057508183145b156139cd575060006131e9565b818310613a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061541d565b613a0e614f64565b613a188685613d0c565b9050613a22614f64565b613a2c8785613d0c565b9050611d3d81600001518260200151846000015185602001518a613e2a565b600080613a588888613eb6565b90506000613a668787613eb6565b9050811580613a73575080155b15613a84575060009150611d3d9050565b600081831315613a9d57613a988284613f08565b613aa7565b613aa78383613f08565b9050613ad0613acb613ab883613f27565b8863ffffffff168863ffffffff166145c9565b6145d8565b905081831315613ae957613ae48282613f08565b613af3565b613af38282614bc2565b9050613aff818c614bee565b9b9a5050505050505050505050565b6000828152600b6020526040902054613b2d908263ffffffff61286d16565b6000838152600b602052604090205560175461384e908263ffffffff61286d16565b6000838152600f6020526040902054600c5480821415613b7057505061118d565b613b78614f64565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613baf614f64565b613bb882614c30565b15613bf157613bd1826000015183602001518888614c39565b60208301819052818352613be59190614c9b565b60208301528152613bfc565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b83836040516024016120c792919061536c565b600082613c6457506000610ea8565b82820282848281613c7157fe5b0414610ea557610ea561098260018686613408565b600081613c9c57613c9c61098260038585613408565b6000828481613ca757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016120c792919061537c565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613cfc57fe5b6040516024016128a491906155de565b613d14614f64565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613d4c81614c30565b15613d5657610ea8565b6000613d6983600163ffffffff61215416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613da482614c30565b15613daf5750610ea8565b6000848152600f602052604090205483811015613e0c576000858152600e6020908152604080832084845282529182902082518084019093528054835260010154908201529250613dff83614c30565b15613e0c5750610ea89050565b50506040805180820190915260008152600160208201529392505050565b600081613e3957506000613ead565b83613e5957613e528561378d848963ffffffff613c5516565b9050613ead565b6000613e7e613e6e868863ffffffff613c5516565b61229a898763ffffffff613c5516565b90506000613e92828663ffffffff613c8616565b9050613ea88761378d868463ffffffff613c5516565b925050505b95945050505050565b600080831215613ece57613ece610982600185614cc4565b6000821215613ee557613ee5610982600184614cc4565b610ea5613f02846f80000000000000000000000000000000614d05565b83614d58565b6000610ea5613f02846f80000000000000000000000000000000614d05565b60006f80000000000000000000000000000000821315613f4f57613f4f610982600184614dd9565b60008213613f6557613f65610982600084614dd9565b6f80000000000000000000000000000000821415613f8557506000610bef565b640733048c5a8213613fb857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610bef565b60008060006a01c8464f761647600000008513614017577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e900000000000008513614075577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d7800000000000000085136140d7577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361413b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc000000000000000000851361419f577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614203577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be58280000000000000000008513614267577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c00000000000000000085136142cb577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361432f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816143a557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa038302816143d657fe5b05840193506f80000000000000000000000000000000818302816143f657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161442757fe5b05840193506f800000000000000000000000000000008183028161444757fe5b059150700400000000000000000000000000000000836f924924924924924924924924924924920383028161447857fe5b05840193506f800000000000000000000000000000008183028161449857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e038302816144c957fe5b05840193506f80000000000000000000000000000000818302816144e957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161451a57fe5b05840193506f800000000000000000000000000000008183028161453a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d890383028161456b57fe5b05840193506f800000000000000000000000000000008183028161458b57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816145bc57fe5b0584019350505050919050565b60006131e9613f028585614d05565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561460a57506000610bef565b8161462657506f80000000000000000000000000000000610bef565b600082131561463d5761463d610982600184614dd9565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816146a957fe5b05905080670168244fdac7800002830192506f80000000000000000000000000000000828202816146d657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161470257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161472e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161475a57fe5b059050806536e0f639b80002830192506f800000000000000000000000000000008282028161478557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816147b057fe5b05905080649c197dcc0002830192506f80000000000000000000000000000000828202816147da57fe5b05905080640e30dce40002830192506f800000000000000000000000000000008282028161480457fe5b0590508064012ebd130002830192506f800000000000000000000000000000008282028161482e57fe5b059050806317499f0002830192506f800000000000000000000000000000008282028161485757fe5b059050806301a9d48002830192506f800000000000000000000000000000008282028161488057fe5b05905080621c638002830192506f80000000000000000000000000000000828202816148a857fe5b059050806201c63802830192506f80000000000000000000000000000000828202816148d057fe5b05905080611ab802830192506f80000000000000000000000000000000828202816148f757fe5b0590508061017c02830192506f800000000000000000000000000000008282028161491e57fe5b05905080601402830192506f800000000000000000000000000000008282028161494457fe5b600095909503946721c3677c82b400009190059384010582016f80000000000000000000000000000000019290507010000000000000000000000000000000008416156149b3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b7008000000000000000000000000000000008416156149f5577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614a3757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614a79577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614abb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614afb576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614b3b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614b7b576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614bbb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614bdf8484614d05565b81614be657fe5b059392505050565b600080821215614c0657614c06610982600184614cc4565b6000614c128484614d05565b905060008113614c26576000915050610ea8565b607f1c9392505050565b60200151151590565b60008085614c4b575082905081614c92565b83614c5a575084905083614c92565b614c7d614c6d858763ffffffff613c5516565b61388c888663ffffffff613c5516565b9150614c8f858463ffffffff613c5516565b90505b94509492505050565b600080614cb984846f80000000000000000000000000000000614e08565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614cf357fe5b836040516024016120c79291906155ec565b6000821580614d12575081155b15614d1f57506000610ea8565b5081810281838281614d2d57fe5b05141580614d44575082828281614d4057fe5b0514155b15610ea857610ea861098260018585614e76565b600081614d6e57614d6e61098260028585614e76565b7f800000000000000000000000000000000000000000000000000000000000000083148015614dbc5750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b15614dd057614dd061098260038585614e76565b818381614be657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614cf357fe5b60008082851180614e1857508284115b15614e6d57600084861015614e2d5784614e2f565b855b9050614e41818563ffffffff613c8616565b9050614e53868263ffffffff613c8616565b9250614e65858263ffffffff613c8616565b91505061303a565b50929391925050565b60607f8c12dfe700000000000000000000000000000000000000000000000000000000846003811115614ea557fe5b8484604051602401613427939291906155ff565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b81548183558181111561118d5760008381526020902061118d918101908301614f7e565b604051806040016040528060008152602001600081525090565b610b5791905b80821115614f985760008155600101614f84565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ea857600080fd5b600060408284031215612389578081fd5b600060208284031215614fe2578081fd5b610ea58383614f9c565b600080600060608486031215615000578182fd5b833561500b81615624565b9250602084013561501b81615624565b929592945050506040919091013590565b6000806040838503121561503e578182fd5b6150488484614f9c565b946020939093013593505050565b60008060408385031215615068578182fd5b6150728484614f9c565b9150602083013561508281615654565b809150509250929050565b60006020828403121561509e578081fd5b8151610ea581615646565b6000602082840312156150ba578081fd5b5035919050565b600080604083850312156150d3578182fd5b82359150602083013561508281615624565b600080604083850312156150f7578182fd5b50508035926020909101359150565b60008060408385031215615118578182fd5b82359150602083013563ffffffff81168114615082578182fd5b600060208284031215615143578081fd5b8135610ea581615654565b600080600060a08486031215615162578283fd5b61516c8585614fc0565b925061517b8560408601614fc0565b9150608084013590509250925092565b60006020828403121561519c578081fd5b5051919050565b600080600080600060a086880312156151ba578283fd5b8535945060208601356151cc81615661565b93506040860135925060608601356151e381615661565b915060808601356151f381615661565b809150509295509295909350565b60008060408385031215615213578182fd5b823561521e81615661565b9150602083013561508281615646565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561531b57835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016152e7565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b606081016004851061539857fe5b938152602081019290925260409091015290565b60408101600384106153ba57fe5b9281526020015290565b604081016153d18461561a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016154038561561a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610e4c57fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610e4c57600080fd5b8015158114610e4c57600080fd5b60028110610e4c57600080fd5b63ffffffff81168114610e4c57600080fdfea365627a7a72315820a6a9e743f24e60f8d91fcb2ea17bf39b75a82219e5ec59615ab639919ab3d1526c6578706572696d656e74616cf564736f6c63430005110040"
}
}
},
"compiler": {
"name": "solc",
"version": "0.5.17+commit.d19bba13",
"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": "istanbul"
}
},
"chains": {}
}