Files
protocol/packages/contract-artifacts/artifacts/Staking.json
2019-11-12 13:53:58 -08:00

969 lines
134 KiB
JSON
Generated

{
"schemaVersion": "2.0.0",
"contractName": "Staking",
"compilerOutput": {
"abi": [
{
"inputs": [
{ "internalType": "address", "name": "wethAddress", "type": "address" },
{ "internalType": "address", "name": "zrxVaultAddress", "type": "address" }
],
"payable": false,
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "target", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "caller", "type": "address" }
],
"name": "AuthorizedAddressAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "target", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "caller", "type": "address" }
],
"name": "AuthorizedAddressRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "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": "Returns the current weth contract address",
"return": "wethContract The WETH contract instance."
},
"getZrxVault()": {
"details": "Returns the current zrxVault address.",
"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": "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": "of ZRX to stake." }
},
"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": "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": "0x60806040523480156200001157600080fd5b50604051620059be380380620059be833981016040819052620000349162000071565b600080546001600160a01b03199081163317909155601880546001600160a01b0394851690831617905560198054929093169116179055620000c8565b6000806040838503121562000084578182fd5b82516200009181620000af565b6020840151909250620000a481620000af565b809150509250929050565b6001600160a01b0381168114620000c557600080fd5b50565b6158e680620000d86000396000f3fe6080604052600436106103555760003560e01c80639051c3ee116101bb578063bb7ef7e0116100f7578063e8eeb3f811610095578063f18765321161006f578063f187653214610955578063f252b7a114610975578063f2fde38b14610995578063ff691b11146109b557610355565b8063e8eeb3f81461090b578063e907f00314610920578063ee99205c1461094057610355565b8063dcb31f76116100d1578063dcb31f76146108ac578063e0ee036e146108c1578063e1c7392a146108d6578063e804d0a4146108eb57610355565b8063bb7ef7e01461084a578063c18c91411461086a578063d39de6e91461088a57610355565b8063a694fc3a11610164578063b2baa33e1161013e578063b2baa33e146107d5578063b3e33379146107ea578063b510879f1461080a578063b91816111461082a57610355565b8063a694fc3a14610780578063abe0906a146107a0578063b0531524146107c057610355565b8063a26171e211610195578063a26171e214610743578063a3b4a32714610758578063a657e5791461076b57610355565b80639051c3ee146106ee5780639ad26744146107035780639c3ccc821461072357610355565b80634e67339f116102955780636340380111610233578063766718081161020d578063766718081461068257806381666796146106975780638a2e271a146106b95780638da5cb5b146106d957610355565b8063634038011461062d57806368a7d6cd14610642578063707129391461066257610355565b80635bd4ab731161026f5780635bd4ab73146105a55780635d91121d146105d25780635e615a6b146105f2578063624a72321461061857610355565b80634e67339f14610550578063587da0231461057057806358f6c7e31461058557610355565b80633c277fc51161030257806344a6958b116102dc57806344a6958b146104b657806346b97959146104d6578063494503d4146105035780634bcc3f671461052357610355565b80633c277fc5146104475780633e4ad7321461046957806342f1181e1461049657610355565b80632a94c279116103335780632a94c279146103c75780632e17de78146103f657806338229d931461041657610355565b806301e28d841461035a5780630b9663db1461037c5780631e7ff8f6146103a7575b600080fd5b34801561036657600080fd5b5061037a6103753660046151e2565b6109d5565b005b34801561038857600080fd5b50610391610aa3565b60405161039e9190615561565b60405180910390f35b3480156103b357600080fd5b506103916103c23660046151e2565b610bf0565b3480156103d357600080fd5b506103e76103e2366004615315565b610c8a565b60405161039e9392919061574e565b34801561040257600080fd5b5061037a6104113660046152d9565b610cb6565b34801561042257600080fd5b506104366104313660046152d9565b610e6b565b60405161039e95949392919061577f565b34801561045357600080fd5b5061045c610e9a565b60405161039e919061545e565b34801561047557600080fd5b506104896104843660046152d9565b610f43565b60405161039e919061570f565b3480156104a257600080fd5b5061037a6104b13660046151e2565b610f62565b3480156104c257600080fd5b506104896104d1366004615285565b610f76565b3480156104e257600080fd5b506104f66104f13660046152d9565b610fd5565b60405161039e91906156bb565b34801561050f57600080fd5b5061045c61051e3660046152d9565b611020565b34801561052f57600080fd5b5061054361053e3660046152d9565b611054565b60405161039e91906156dc565b34801561055c57600080fd5b5061037a61056b3660046151e2565b6110b6565b34801561057c57600080fd5b506103916110fd565b34801561059157600080fd5b5061037a6105a036600461537e565b611103565b3480156105b157600080fd5b506105c56105c03660046151e2565b611300565b60405161039e9190615556565b3480156105de57600080fd5b5061037a6105ed366004615336565b611315565b3480156105fe57600080fd5b506106076113de565b60405161039e9594939291906157a2565b34801561062457600080fd5b5061045c611407565b34801561063957600080fd5b50610391611472565b34801561064e57600080fd5b5061039161065d366004615431565b611478565b34801561066e57600080fd5b5061037a61067d3660046151e2565b6115b1565b34801561068e57600080fd5b50610391611666565b3480156106a357600080fd5b506106ac61166c565b60405161039e91906157e6565b3480156106c557600080fd5b5061037a6106d43660046151e2565b611678565b3480156106e557600080fd5b5061045c61173a565b3480156106fa57600080fd5b5061045c611756565b34801561070f57600080fd5b5061037a61071e36600461525a565b611772565b34801561072f57600080fd5b5061037a61073e3660046153d3565b611784565b34801561074f57600080fd5b506103916117fe565b61037a61076636600461521a565b611804565b34801561077757600080fd5b50610391611a54565b34801561078c57600080fd5b5061037a61079b3660046152d9565b611a5a565b3480156107ac57600080fd5b5061037a6107bb3660046151e2565b611b6f565b3480156107cc57600080fd5b50610391611bb6565b3480156107e157600080fd5b50610391611bbc565b3480156107f657600080fd5b5061037a6108053660046152d9565b611bda565b34801561081657600080fd5b5061037a6108253660046152d9565b611c1a565b34801561083657600080fd5b506105c56108453660046151e2565b611c24565b34801561085657600080fd5b506103916108653660046152d9565b611c39565b34801561087657600080fd5b506103916108853660046152d9565b611cc4565b34801561089657600080fd5b5061089f611cd6565b60405161039e91906154fd565b3480156108b857600080fd5b5061045c611d45565b3480156108cd57600080fd5b506106ac611d61565b3480156108e257600080fd5b5061037a611d6d565b3480156108f757600080fd5b50610489610906366004615362565b611d87565b34801561091757600080fd5b506106ac611ed7565b34801561092c57600080fd5b5061039161093b3660046152f1565b611eeb565b34801561094c57600080fd5b5061045c611f88565b34801561096157600080fd5b506103916109703660046151e2565b611fa4565b34801561098157600080fd5b5061048961099036600461525a565b611fb6565b3480156109a157600080fd5b5061037a6109b03660046151e2565b611ff7565b3480156109c157600080fd5b5061037a6109d03660046152d9565b61209a565b6109dd6122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610a1d57610a1d610a186001836122ea565b61238c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a9890839061545e565b60405180910390a150565b600c5460009081610abb82600163ffffffff61239416565b6000818152601660205260409020600101549091508015610ae357610ae3610a1883836123b3565b610aeb6123d0565b610af3612443565b600084815260166020526040902055610b0a6150ee565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610b8c9491939291615764565b60405180910390a2610b9c6124e7565b6020810151610be357805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610bda916000916155ac565b60405180910390a25b6020015193505050505b90565b6000610bfa611407565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c32919061545e565b60206040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8291908101906153bb565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610cbf61511d565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0c9061252a565b90506000610d3e82602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff166125d0565b905080841115610d5557610d55610a1885836125e6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610da39085612603565b610dab611407565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610de59291906154d7565b600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610e5d9190615561565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcb31f766040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b505afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f3d91908101906151fe565b91505090565b610f4b61511d565b6000828152600760205260409020610c829061252a565b610f6a61268a565b610f73816126d1565b50565b610f7e61511d565b610fcc60056000846001811115610f9157fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff88168252909252902061252a565b90505b92915050565b610fdd61513d565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b6002818154811061102d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61105c61515e565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b601980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5481565b338161110f57506112fb565b600061111e6020860186615362565b600181111561112957fe5b14801561114d575060006111406020850185615362565b600181111561114b57fe5b145b1561115857506112fb565b60016111676020860186615362565b600181111561117257fe5b14156111875761118784602001358284612802565b60016111966020850185615362565b60018111156111a157fe5b14156111b6576111b68360200135828461289b565b60006005816111c86020880188615362565b60018111156111d357fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff861682528352908120925090600590829061121d90880188615362565b600181111561122857fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff871682529092529020905061126b828286612934565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d9088906112bd908c615362565b60018111156112c857fe5b6112d560208c018c615362565b60018111156112e057fe5b6040516112ef939291906157cd565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b8161131f81612a2d565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff16611357848285612a66565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610e5d90849087906157f7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639051c3ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b60115481565b600854600090339061149190600163ffffffff612aad16565b600881905591506114a682620f424086612a66565b6114ae61515e565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906115929085908590899061556a565b60405180910390a183156115a9576115a983611bda565b505092915050565b6115b961268a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166115f2576115f2610a1882612ac9565b60005b600254811015611662578173ffffffffffffffffffffffffffffffffffffffff166002828154811061162357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561165a576116558282612b68565b611662565b6001016115f5565b5050565b600c5481565b60145463ffffffff1681565b6116806122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156116bc576116bc610a186000836122ea565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a9890839061545e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60195473ffffffffffffffffffffffffffffffffffffffff1681565b61177a61268a565b6116628282612b68565b61178c6122c7565b6117998585858585612db7565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661182757611827610a1833612e7a565b61183081612e95565b3461190a5761183d610e9a565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611879939291906154a6565b602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118cb91908101906152bd565b61190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190615684565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061193b57506112fb565b600061194682610f43565b602001516bffffffffffffffffffffffff16905060135481101561196b5750506112fb565b600c54600083815260156020908152604080832084845282528083206016909252909120815480611a1a576000806119a38888612eb6565b6002870182905560018701819055600386015491935091506119cb908263ffffffff612aad16565b60038501556001808501546119e59163ffffffff612aad16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b611a2a818863ffffffff612aad16565b83556002820154611a41908863ffffffff612aad16565b8260020181905550505050505050505050565b60085481565b33611a63611407565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b8152600401611a9d9291906154d7565b600060405180830381600087803b158015611ab757600080fd5b505af1158015611acb573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020611b1d9083612f42565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a83604051611b639190615561565b60405180910390a25050565b601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60175481565b6000611bd5601154600d54612aad90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610f738133612fac565b60016020526000908152604090205460ff1681565b6000611c4361515e565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611ca785613184565b91509150611cba83602001518383613241565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611d10575b5050505050905090565b60185473ffffffffffffffffffffffffffffffffffffffff1681565b60125463ffffffff1681565b611d756122c7565b611d7d613282565b611d85613295565b565b611d8f61511d565b60016000526004602052611dc27fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0561252a565b90506000826001811115611dd257fe5b1415610c85576000611de2611407565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906153bb565b9050611e8e611e8983602001516bffffffffffffffffffffffff168361239490919063ffffffff16565b6132c0565b6bffffffffffffffffffffffff90811660208401526040830151611ebe91611e899184911663ffffffff61239416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611ef561515e565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611f5986613184565b915091506000611f6e84602001518484613241565b915050611f7d878783856132e4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611fbe61511d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610fcc9061252a565b611fff61268a565b73ffffffffffffffffffffffffffffffffffffffff811661202a57612025610a18613431565b610f73565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c5460006120b082600163ffffffff61239416565b90506120ba6150ee565b50600081815260166020908152604091829020825160a0810184528154815260018201549281018390526002820154938101939093526003810154606084015260040154608083015261210f57505050610f73565b61211761513d565b50600084815260156020908152604080832085845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092526121655750505050610f73565b60008581526015602090815260408083208684529091528120818155600181018290556002018190556121988284613468565b90506000806121ac888486604001516134dd565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c84846040516121e39291906155ac565b60405180910390a360006121fd838363ffffffff612aad16565b6080870151909150612215908263ffffffff612aad16565b6080870181905260008881526016602090815260409091206004019190915586015161224890600163ffffffff61239416565b602080880182815260008a81526016909252604090912060010191909155516117f3576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b2916122a6908263ffffffff61239416565b6040516122b49291906155ac565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611d8557611d85610a183361362d565b606063b9588e4360e01b83836040516024016123079291906155f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b6000828211156123ad576123ad610a1860028585613648565b50900390565b606063614b800a60e01b83836040516024016123079291906155ac565b30318015610f73576123e0610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050505050565b6000611bd5601754612453610e9a565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161248b919061545e565b60206040518083038186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124db91908101906153bb565b9063ffffffff61239416565b4260006124f2611bbc565b90508181111561250957612509610a1882846136ed565b600c5460009061252090600163ffffffff612aad16565b600c555050600d55565b61253261511d565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c5490918111156125ca576125a58161370a565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b60008183106125df5781610fcc565b5090919050565b60606384c8b7c960e01b83836040516024016123079291906155ac565b61260b61511d565b6126148361252a565b905061263e611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff61239416565b6bffffffffffffffffffffffff1660208201526112fb838261372a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d8557600054611d8590610a1890339073ffffffffffffffffffffffffffffffffffffffff166137e4565b73ffffffffffffffffffffffffffffffffffffffff81166126f7576126f7610a18613801565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561273157612731610a1882613838565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b61280b83613853565b6128158383612fac565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061284f908261388a565b6000838152600760205260409020612867908261388a565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261388a565b6128a483613853565b6128ae8383612fac565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206128e890826138e2565b600083815260076020526040902061290090826138e2565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826138e2565b61293e838361391d565b15612948576112fb565b61295061511d565b6129598461252a565b905061296361511d565b61296c8461252a565b905081604001516bffffffffffffffffffffffff168311156129a7576129a7610a188484604001516bffffffffffffffffffffffff166125e6565b60408201516129ce90611e89906bffffffffffffffffffffffff168563ffffffff61239416565b6bffffffffffffffffffffffff9081166040808501919091528201516129ff91611e8991168563ffffffff612aad16565b6bffffffffffffffffffffffff166040820152612a1c858361372a565b612a26848261372a565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811461166257611662610a183384613924565b620f424063ffffffff82161115612a8b57612a86610a1860008584613941565b6112fb565b8163ffffffff168163ffffffff16106112fb576112fb610a1860018584613941565b600082820183811015610fcc57610fcc610a1860008686613648565b606063eb5108a260e01b82604051602401612ae4919061545e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612ba157612ba1610a1883612ac9565b6002548110612bbc57612bbc610a1882600280549050613960565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110612be057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612c4257612c42610a1860028381548110612c1a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461397d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612cbd57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612cf057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612d6f9082615175565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612e6b90879087908790879087906157a2565b60405180910390a15050505050565b606063b56d2df060e01b82604051602401612ae4919061545e565b803414158015612ea457503415155b15610f7357610f73610a18823461399a565b6000828152600a602052604081205481908190612ee99073ffffffffffffffffffffffffffffffffffffffff1686611fb6565b602001516bffffffffffffffffffffffff169050612f0d848263ffffffff61239416565b601254909350612f3890612f2b9063ffffffff16620f4240866139b7565b829063ffffffff612aad16565b9150509250929050565b612f4a61511d565b612f538361252a565b9050612f7d611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff612aad16565b612fb5826139d9565b6000612fc483836000806132e4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832087845290915290209091506130009061252a565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff9586160217909216740100000000000000000000000000000000000000009390921692909202179055801561317b576130e58382613a4d565b6130ed610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016131279291906154d7565b602060405180830381600087803b15801561314157600080fd5b505af1158015613155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061317991908101906152bd565b505b6112fb83613a95565b600080600061319f6001600c5461239490919063ffffffff16565b90506131a961513d565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290613231908290613468565b9350806040015192505050915091565b600080826132515783915061327a565b61326563ffffffff8616620f424086613aa2565b9150613277848363ffffffff61239416565b90505b935093915050565b61328a613ad8565b42600d556001600c55565b61329d613aed565b620d2f00620dbba068056bc75e2d6310000060026003612a268585858585612db7565b806bffffffffffffffffffffffff81168114610c8557610c85610a18600284613b52565b600c546000906132f261511d565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811694840194909452740100000000000000000000000000000000000000009091049092169281019290925282141561339357600092505050613429565b61339f81838787613b6f565b81519093506000906133c29067ffffffffffffffff16600163ffffffff612aad16565b90506134006133f38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff1685613bf2565b859063ffffffff612aad16565b93506134236133f38984604001516bffffffffffffffffffffffff168487613bf2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061347657610fcf565b815183516040840151602086015160608601516014546134ac95949392919063ffffffff80821691640100000000900416613c8b565b608083015183519192506000916134c89163ffffffff61239416565b9050818110156134d6578091505b5092915050565b6000806134e861515e565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261354c908686613241565b909350915082156136095761355f610e9a565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916135b59187906004016154d7565b602060405180830381600087803b1580156135cf57600080fd5b505af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061360791908101906152bd565b505b8115613624576136198683613d4e565b613624868386613d8f565b50935093915050565b606063b65a25b960e01b82604051602401612ae4919061545e565b606063e946c1bb60e01b848484604051602401613667939291906155ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016123079291906155ac565b8067ffffffffffffffff81168114610c8557610c85610a18600184613b52565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b838360405160240161230792919061547f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401612ae4919061545e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610f7357610f73610a18826000613e78565b61389261511d565b61389b8361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff1660408201526112fb838261372a565b6138ea61511d565b6138f38361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016123079291906154d7565b60606322df959760e01b84848460405160240161366793929190615626565b606063e9f8377160e01b83836040516024016123079291906155ac565b606063140a84db60e01b838360405160240161230792919061547f565b60606331d7a50560e01b83836040516024016123079291906155ac565b6000613429836139cd868563ffffffff613e9516565b9063ffffffff613ec616565b600c546000906139f090600163ffffffff61239416565b90506139fa61513d565b5060008281526015602090815260408083208484528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252156112fb576112fb610a188484613ef0565b6000828152600b6020526040902054613a6c908263ffffffff61239416565b6000838152600b6020526040902055601754613a8e908263ffffffff61239416565b6017555050565b610f738160006001613d8f565b6000613429836139cd613abc82600163ffffffff61239416565b613acc888763ffffffff613e9516565b9063ffffffff612aad16565b600d5415611d8557611d85610a186000613f0d565b60115415801590613b05575060125463ffffffff1615155b8015613b12575060135415155b8015613b25575060145463ffffffff1615155b8015613b405750601454640100000000900463ffffffff1615155b15611d8557611d85610a186001613f0d565b606063c996af7b60e01b83836040516024016123079291906155dc565b6000821580613b7c575081155b15613b8957506000613429565b6000613b9c85600163ffffffff61239416565b865167ffffffffffffffff161015613bb8578560400151613bbe565b85602001515b6bffffffffffffffffffffffff16905080613bdd576000915050613429565b613be88484836139b7565b9695505050505050565b6000831580613c0057508183145b15613c0d57506000613429565b818310613c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061564d565b613c4e615199565b613c588685613f4c565b9050613c62615199565b613c6c8785613f4c565b9050611f7d81600001518260200151846000015185602001518a61406a565b600080613c9888886140f6565b90506000613ca687876140f6565b9050811580613cb3575080155b15613cc4575060009150611f7d9050565b600081831315613cdd57613cd88284614148565b613ce7565b613ce78383614148565b9050613d10613d0b613cf883614167565b8863ffffffff168863ffffffff16614809565b614818565b905081831315613d2957613d248282614148565b613d33565b613d338282614e02565b9050613d3f818c614e2e565b9b9a5050505050505050505050565b6000828152600b6020526040902054613d6d908263ffffffff612aad16565b6000838152600b6020526040902055601754613a8e908263ffffffff612aad16565b6000838152600f6020526040902054600c5480821415613db05750506112fb565b613db8615199565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613def615199565b613df882614e70565b15613e3157613e11826000015183602001518888614e79565b60208301819052818352613e259190614edb565b60208301528152613e3c565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b838360405160240161230792919061559c565b600082613ea457506000610fcf565b82820282848281613eb157fe5b0414610fcc57610fcc610a1860018686613648565b600081613edc57613edc610a1860038585613648565b6000828481613ee757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016123079291906155ac565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613f3c57fe5b604051602401612ae4919061580e565b613f54615199565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613f8c81614e70565b15613f9657610fcf565b6000613fa983600163ffffffff61239416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613fe482614e70565b15613fef5750610fcf565b6000848152600f60205260409020548381101561404c576000858152600e602090815260408083208484528252918290208251808401909352805483526001015490820152925061403f83614e70565b1561404c5750610fcf9050565b50506040805180820190915260008152600160208201529392505050565b600081614079575060006140ed565b8361409957614092856139cd848963ffffffff613e9516565b90506140ed565b60006140be6140ae868863ffffffff613e9516565b6124db898763ffffffff613e9516565b905060006140d2828663ffffffff613ec616565b90506140e8876139cd868463ffffffff613e9516565b925050505b95945050505050565b60008083121561410e5761410e610a18600185614f04565b600082121561412557614125610a18600184614f04565b610fcc614142846f80000000000000000000000000000000614f45565b83614f8d565b6000610fcc614142846f80000000000000000000000000000000614f45565b60006f8000000000000000000000000000000082131561418f5761418f610a1860018461500e565b600082136141a5576141a5610a1860008461500e565b6f800000000000000000000000000000008214156141c557506000610c85565b640733048c5a82136141f857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610c85565b60008060006a01c8464f761647600000008513614257577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e9000000000000085136142b5577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d780000000000000008513614317577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361437b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136143df577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614443577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be582800000000000000000085136144a7577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c000000000000000000851361450b577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361456f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816145e557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161461657fe5b05840193506f800000000000000000000000000000008183028161463657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161466757fe5b05840193506f800000000000000000000000000000008183028161468757fe5b059150700400000000000000000000000000000000836f92492492492492492492492492492492038302816146b857fe5b05840193506f80000000000000000000000000000000818302816146d857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e0383028161470957fe5b05840193506f800000000000000000000000000000008183028161472957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161475a57fe5b05840193506f800000000000000000000000000000008183028161477a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d89038302816147ab57fe5b05840193506f80000000000000000000000000000000818302816147cb57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816147fc57fe5b0584019350505050919050565b60006134296141428585614f45565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561484a57506000610c85565b8161486657506f80000000000000000000000000000000610c85565b600082131561487d5761487d610a1860018461500e565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816148e957fe5b05905080670168244fdac7800002830192506f800000000000000000000000000000008282028161491657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161494257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161496e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161499a57fe5b059050806536e0f639b80002830192506f80000000000000000000000000000000828202816149c557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816149f057fe5b05905080649c197dcc0002830192506f8000000000000000000000000000000082820281614a1a57fe5b05905080640e30dce40002830192506f8000000000000000000000000000000082820281614a4457fe5b0590508064012ebd130002830192506f8000000000000000000000000000000082820281614a6e57fe5b059050806317499f0002830192506f8000000000000000000000000000000082820281614a9757fe5b059050806301a9d48002830192506f8000000000000000000000000000000082820281614ac057fe5b05905080621c638002830192506f8000000000000000000000000000000082820281614ae857fe5b059050806201c63802830192506f8000000000000000000000000000000082820281614b1057fe5b05905080611ab802830192506f8000000000000000000000000000000082820281614b3757fe5b0590508061017c02830192506f8000000000000000000000000000000082820281614b5e57fe5b05905080601402830192506f8000000000000000000000000000000082820281614b8457fe5b600095909503946721c3677c82b400009190059384010582016f8000000000000000000000000000000001929050701000000000000000000000000000000000841615614bf3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b700800000000000000000000000000000000841615614c35577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614c7757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614cb9577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614cfb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614d3b576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614d7b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614dbb576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614dfb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614e1f8484614f45565b81614e2657fe5b059392505050565b600080821215614e4657614e46610a18600184614f04565b6000614e528484614f45565b905060008113614e66576000915050610fcf565b607f1c9392505050565b60200151151590565b60008085614e8b575082905081614ed2565b83614e9a575084905083614ed2565b614ebd614ead858763ffffffff613e9516565b613acc888663ffffffff613e9516565b9150614ecf858463ffffffff613e9516565b90505b94509492505050565b600080614ef984846f8000000000000000000000000000000061503d565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b8360405160240161230792919061581c565b600082614f5457506000610fcf565b5081810281838281614f6257fe5b05141580614f79575082828281614f7557fe5b0514155b15610fcf57610fcf610a18600185856150ab565b600081614fa357614fa3610a18600285856150ab565b7f800000000000000000000000000000000000000000000000000000000000000083148015614ff15750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b1561500557615005610a18600385856150ab565b818381614e2657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b6000808285118061504d57508284115b156150a2576000848610156150625784615064565b855b9050615076818563ffffffff613ec616565b9050615088868263ffffffff613ec616565b925061509a858263ffffffff613ec616565b91505061327a565b50929391925050565b60607f8c12dfe7000000000000000000000000000000000000000000000000000000008460038111156150da57fe5b84846040516024016136679392919061582f565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b8154818355818111156112fb576000838152602090206112fb9181019083016151b3565b604051806040016040528060008152602001600081525090565b610bed91905b808211156151cd57600081556001016151b9565b5090565b6000604082840312156125ca578081fd5b6000602082840312156151f3578081fd5b8135610fcc81615854565b60006020828403121561520f578081fd5b8151610fcc81615854565b60008060006060848603121561522e578182fd5b833561523981615854565b9250602084013561524981615854565b929592945050506040919091013590565b6000806040838503121561526c578182fd5b823561527781615854565b946020939093013593505050565b60008060408385031215615297578182fd5b82356152a281615854565b915060208301356152b281615884565b809150509250929050565b6000602082840312156152ce578081fd5b8151610fcc81615876565b6000602082840312156152ea578081fd5b5035919050565b60008060408385031215615303578182fd5b8235915060208301356152b281615854565b60008060408385031215615327578182fd5b50508035926020909101359150565b60008060408385031215615348578182fd5b82359150602083013563ffffffff811681146152b2578182fd5b600060208284031215615373578081fd5b8135610fcc81615884565b600080600060a08486031215615392578283fd5b61539c85856151d1565b92506153ab85604086016151d1565b9150608084013590509250925092565b6000602082840312156153cc578081fd5b5051919050565b600080600080600060a086880312156153ea578283fd5b8535945060208601356153fc81615891565b935060408601359250606086013561541381615891565b9150608086013561542381615891565b809150509295509295909350565b60008060408385031215615443578182fd5b823561544e81615891565b915060208301356152b281615876565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561554b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101615517565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b60608101600485106155c857fe5b938152602081019290925260409091015290565b60408101600384106155ea57fe5b9281526020015290565b604081016156018461584a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016156338561584a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610f7357fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610f7357600080fd5b8015158114610f7357600080fd5b60028110610f7357600080fd5b63ffffffff81168114610f7357600080fdfea365627a7a72315820cd4dcb64a07325df26d38404ffcca0f57d30f570cbe815c03c543316add5e5a46c6578706572696d656e74616cf564736f6c634300050c0040"
},
"deployedBytecode": {
"object": "0x6080604052600436106103555760003560e01c80639051c3ee116101bb578063bb7ef7e0116100f7578063e8eeb3f811610095578063f18765321161006f578063f187653214610955578063f252b7a114610975578063f2fde38b14610995578063ff691b11146109b557610355565b8063e8eeb3f81461090b578063e907f00314610920578063ee99205c1461094057610355565b8063dcb31f76116100d1578063dcb31f76146108ac578063e0ee036e146108c1578063e1c7392a146108d6578063e804d0a4146108eb57610355565b8063bb7ef7e01461084a578063c18c91411461086a578063d39de6e91461088a57610355565b8063a694fc3a11610164578063b2baa33e1161013e578063b2baa33e146107d5578063b3e33379146107ea578063b510879f1461080a578063b91816111461082a57610355565b8063a694fc3a14610780578063abe0906a146107a0578063b0531524146107c057610355565b8063a26171e211610195578063a26171e214610743578063a3b4a32714610758578063a657e5791461076b57610355565b80639051c3ee146106ee5780639ad26744146107035780639c3ccc821461072357610355565b80634e67339f116102955780636340380111610233578063766718081161020d578063766718081461068257806381666796146106975780638a2e271a146106b95780638da5cb5b146106d957610355565b8063634038011461062d57806368a7d6cd14610642578063707129391461066257610355565b80635bd4ab731161026f5780635bd4ab73146105a55780635d91121d146105d25780635e615a6b146105f2578063624a72321461061857610355565b80634e67339f14610550578063587da0231461057057806358f6c7e31461058557610355565b80633c277fc51161030257806344a6958b116102dc57806344a6958b146104b657806346b97959146104d6578063494503d4146105035780634bcc3f671461052357610355565b80633c277fc5146104475780633e4ad7321461046957806342f1181e1461049657610355565b80632a94c279116103335780632a94c279146103c75780632e17de78146103f657806338229d931461041657610355565b806301e28d841461035a5780630b9663db1461037c5780631e7ff8f6146103a7575b600080fd5b34801561036657600080fd5b5061037a6103753660046151e2565b6109d5565b005b34801561038857600080fd5b50610391610aa3565b60405161039e9190615561565b60405180910390f35b3480156103b357600080fd5b506103916103c23660046151e2565b610bf0565b3480156103d357600080fd5b506103e76103e2366004615315565b610c8a565b60405161039e9392919061574e565b34801561040257600080fd5b5061037a6104113660046152d9565b610cb6565b34801561042257600080fd5b506104366104313660046152d9565b610e6b565b60405161039e95949392919061577f565b34801561045357600080fd5b5061045c610e9a565b60405161039e919061545e565b34801561047557600080fd5b506104896104843660046152d9565b610f43565b60405161039e919061570f565b3480156104a257600080fd5b5061037a6104b13660046151e2565b610f62565b3480156104c257600080fd5b506104896104d1366004615285565b610f76565b3480156104e257600080fd5b506104f66104f13660046152d9565b610fd5565b60405161039e91906156bb565b34801561050f57600080fd5b5061045c61051e3660046152d9565b611020565b34801561052f57600080fd5b5061054361053e3660046152d9565b611054565b60405161039e91906156dc565b34801561055c57600080fd5b5061037a61056b3660046151e2565b6110b6565b34801561057c57600080fd5b506103916110fd565b34801561059157600080fd5b5061037a6105a036600461537e565b611103565b3480156105b157600080fd5b506105c56105c03660046151e2565b611300565b60405161039e9190615556565b3480156105de57600080fd5b5061037a6105ed366004615336565b611315565b3480156105fe57600080fd5b506106076113de565b60405161039e9594939291906157a2565b34801561062457600080fd5b5061045c611407565b34801561063957600080fd5b50610391611472565b34801561064e57600080fd5b5061039161065d366004615431565b611478565b34801561066e57600080fd5b5061037a61067d3660046151e2565b6115b1565b34801561068e57600080fd5b50610391611666565b3480156106a357600080fd5b506106ac61166c565b60405161039e91906157e6565b3480156106c557600080fd5b5061037a6106d43660046151e2565b611678565b3480156106e557600080fd5b5061045c61173a565b3480156106fa57600080fd5b5061045c611756565b34801561070f57600080fd5b5061037a61071e36600461525a565b611772565b34801561072f57600080fd5b5061037a61073e3660046153d3565b611784565b34801561074f57600080fd5b506103916117fe565b61037a61076636600461521a565b611804565b34801561077757600080fd5b50610391611a54565b34801561078c57600080fd5b5061037a61079b3660046152d9565b611a5a565b3480156107ac57600080fd5b5061037a6107bb3660046151e2565b611b6f565b3480156107cc57600080fd5b50610391611bb6565b3480156107e157600080fd5b50610391611bbc565b3480156107f657600080fd5b5061037a6108053660046152d9565b611bda565b34801561081657600080fd5b5061037a6108253660046152d9565b611c1a565b34801561083657600080fd5b506105c56108453660046151e2565b611c24565b34801561085657600080fd5b506103916108653660046152d9565b611c39565b34801561087657600080fd5b506103916108853660046152d9565b611cc4565b34801561089657600080fd5b5061089f611cd6565b60405161039e91906154fd565b3480156108b857600080fd5b5061045c611d45565b3480156108cd57600080fd5b506106ac611d61565b3480156108e257600080fd5b5061037a611d6d565b3480156108f757600080fd5b50610489610906366004615362565b611d87565b34801561091757600080fd5b506106ac611ed7565b34801561092c57600080fd5b5061039161093b3660046152f1565b611eeb565b34801561094c57600080fd5b5061045c611f88565b34801561096157600080fd5b506103916109703660046151e2565b611fa4565b34801561098157600080fd5b5061048961099036600461525a565b611fb6565b3480156109a157600080fd5b5061037a6109b03660046151e2565b611ff7565b3480156109c157600080fd5b5061037a6109d03660046152d9565b61209a565b6109dd6122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610a1d57610a1d610a186001836122ea565b61238c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a9890839061545e565b60405180910390a150565b600c5460009081610abb82600163ffffffff61239416565b6000818152601660205260409020600101549091508015610ae357610ae3610a1883836123b3565b610aeb6123d0565b610af3612443565b600084815260166020526040902055610b0a6150ee565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610b8c9491939291615764565b60405180910390a2610b9c6124e7565b6020810151610be357805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610bda916000916155ac565b60405180910390a25b6020015193505050505b90565b6000610bfa611407565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610c32919061545e565b60206040518083038186803b158015610c4a57600080fd5b505afa158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8291908101906153bb565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610cbf61511d565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0c9061252a565b90506000610d3e82602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff166125d0565b905080841115610d5557610d55610a1885836125e6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610da39085612603565b610dab611407565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610de59291906154d7565b600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610e5d9190615561565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcb31f766040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b505afa158015610f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f3d91908101906151fe565b91505090565b610f4b61511d565b6000828152600760205260409020610c829061252a565b610f6a61268a565b610f73816126d1565b50565b610f7e61511d565b610fcc60056000846001811115610f9157fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff88168252909252902061252a565b90505b92915050565b610fdd61513d565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b6002818154811061102d57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b61105c61515e565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b601980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600d5481565b338161110f57506112fb565b600061111e6020860186615362565b600181111561112957fe5b14801561114d575060006111406020850185615362565b600181111561114b57fe5b145b1561115857506112fb565b60016111676020860186615362565b600181111561117257fe5b14156111875761118784602001358284612802565b60016111966020850185615362565b60018111156111a157fe5b14156111b6576111b68360200135828461289b565b60006005816111c86020880188615362565b60018111156111d357fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff861682528352908120925090600590829061121d90880188615362565b600181111561122857fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff871682529092529020905061126b828286612934565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d9088906112bd908c615362565b60018111156112c857fe5b6112d560208c018c615362565b60018111156112e057fe5b6040516112ef939291906157cd565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b8161131f81612a2d565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff16611357848285612a66565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610e5d90849087906157f7565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639051c3ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0557600080fd5b60115481565b600854600090339061149190600163ffffffff612aad16565b600881905591506114a682620f424086612a66565b6114ae61515e565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906115929085908590899061556a565b60405180910390a183156115a9576115a983611bda565b505092915050565b6115b961268a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff166115f2576115f2610a1882612ac9565b60005b600254811015611662578173ffffffffffffffffffffffffffffffffffffffff166002828154811061162357fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16141561165a576116558282612b68565b611662565b6001016115f5565b5050565b600c5481565b60145463ffffffff1681565b6116806122c7565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156116bc576116bc610a186000836122ea565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a9890839061545e565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60195473ffffffffffffffffffffffffffffffffffffffff1681565b61177a61268a565b6116628282612b68565b61178c6122c7565b6117998585858585612db7565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661182757611827610a1833612e7a565b61183081612e95565b3461190a5761183d610e9a565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401611879939291906154a6565b602060405180830381600087803b15801561189357600080fd5b505af11580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118cb91908101906152bd565b61190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190615684565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061193b57506112fb565b600061194682610f43565b602001516bffffffffffffffffffffffff16905060135481101561196b5750506112fb565b600c54600083815260156020908152604080832084845282528083206016909252909120815480611a1a576000806119a38888612eb6565b6002870182905560018701819055600386015491935091506119cb908263ffffffff612aad16565b60038501556001808501546119e59163ffffffff612aad16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b611a2a818863ffffffff612aad16565b83556002820154611a41908863ffffffff612aad16565b8260020181905550505050505050505050565b60085481565b33611a63611407565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b8152600401611a9d9291906154d7565b600060405180830381600087803b158015611ab757600080fd5b505af1158015611acb573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020611b1d9083612f42565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a83604051611b639190615561565b60405180910390a25050565b601880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60175481565b6000611bd5601154600d54612aad90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610f738133612fac565b60016020526000908152604090205460ff1681565b6000611c4361515e565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611ca785613184565b91509150611cba83602001518383613241565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611d3b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611d10575b5050505050905090565b60185473ffffffffffffffffffffffffffffffffffffffff1681565b60125463ffffffff1681565b611d756122c7565b611d7d613282565b611d85613295565b565b611d8f61511d565b60016000526004602052611dc27fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0561252a565b90506000826001811115611dd257fe5b1415610c85576000611de2611407565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2757600080fd5b505afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e5f91908101906153bb565b9050611e8e611e8983602001516bffffffffffffffffffffffff168361239490919063ffffffff16565b6132c0565b6bffffffffffffffffffffffff90811660208401526040830151611ebe91611e899184911663ffffffff61239416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611ef561515e565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611f5986613184565b915091506000611f6e84602001518484613241565b915050611f7d878783856132e4565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611fbe61511d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610fcc9061252a565b611fff61268a565b73ffffffffffffffffffffffffffffffffffffffff811661202a57612025610a18613431565b610f73565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c5460006120b082600163ffffffff61239416565b90506120ba6150ee565b50600081815260166020908152604091829020825160a0810184528154815260018201549281018390526002820154938101939093526003810154606084015260040154608083015261210f57505050610f73565b61211761513d565b50600084815260156020908152604080832085845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092526121655750505050610f73565b60008581526015602090815260408083208684529091528120818155600181018290556002018190556121988284613468565b90506000806121ac888486604001516134dd565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c84846040516121e39291906155ac565b60405180910390a360006121fd838363ffffffff612aad16565b6080870151909150612215908263ffffffff612aad16565b6080870181905260008881526016602090815260409091206004019190915586015161224890600163ffffffff61239416565b602080880182815260008a81526016909252604090912060010191909155516117f3576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b2916122a6908263ffffffff61239416565b6040516122b49291906155ac565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611d8557611d85610a183361362d565b606063b9588e4360e01b83836040516024016123079291906155f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b6000828211156123ad576123ad610a1860028585613648565b50900390565b606063614b800a60e01b83836040516024016123079291906155ac565b30318015610f73576123e0610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561242757600080fd5b505af115801561243b573d6000803e3d6000fd5b505050505050565b6000611bd5601754612453610e9a565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161248b919061545e565b60206040518083038186803b1580156124a357600080fd5b505afa1580156124b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124db91908101906153bb565b9063ffffffff61239416565b4260006124f2611bbc565b90508181111561250957612509610a1882846136ed565b600c5460009061252090600163ffffffff612aad16565b600c555050600d55565b61253261511d565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c5490918111156125ca576125a58161370a565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b60008183106125df5781610fcc565b5090919050565b60606384c8b7c960e01b83836040516024016123079291906155ac565b61260b61511d565b6126148361252a565b905061263e611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff61239416565b6bffffffffffffffffffffffff1660208201526112fb838261372a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611d8557600054611d8590610a1890339073ffffffffffffffffffffffffffffffffffffffff166137e4565b73ffffffffffffffffffffffffffffffffffffffff81166126f7576126f7610a18613801565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff161561273157612731610a1882613838565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b61280b83613853565b6128158383612fac565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061284f908261388a565b6000838152600760205260409020612867908261388a565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261388a565b6128a483613853565b6128ae8383612fac565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206128e890826138e2565b600083815260076020526040902061290090826138e2565b600160005260046020526112fb7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826138e2565b61293e838361391d565b15612948576112fb565b61295061511d565b6129598461252a565b905061296361511d565b61296c8461252a565b905081604001516bffffffffffffffffffffffff168311156129a7576129a7610a188484604001516bffffffffffffffffffffffff166125e6565b60408201516129ce90611e89906bffffffffffffffffffffffff168563ffffffff61239416565b6bffffffffffffffffffffffff9081166040808501919091528201516129ff91611e8991168563ffffffff612aad16565b6bffffffffffffffffffffffff166040820152612a1c858361372a565b612a26848261372a565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff1633811461166257611662610a183384613924565b620f424063ffffffff82161115612a8b57612a86610a1860008584613941565b6112fb565b8163ffffffff168163ffffffff16106112fb576112fb610a1860018584613941565b600082820183811015610fcc57610fcc610a1860008686613648565b606063eb5108a260e01b82604051602401612ae4919061545e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612ba157612ba1610a1883612ac9565b6002548110612bbc57612bbc610a1882600280549050613960565b8173ffffffffffffffffffffffffffffffffffffffff1660028281548110612be057fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612c4257612c42610a1860028381548110612c1a57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461397d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612cbd57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612cf057fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612d6f9082615175565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612e6b90879087908790879087906157a2565b60405180910390a15050505050565b606063b56d2df060e01b82604051602401612ae4919061545e565b803414158015612ea457503415155b15610f7357610f73610a18823461399a565b6000828152600a602052604081205481908190612ee99073ffffffffffffffffffffffffffffffffffffffff1686611fb6565b602001516bffffffffffffffffffffffff169050612f0d848263ffffffff61239416565b601254909350612f3890612f2b9063ffffffff16620f4240866139b7565b829063ffffffff612aad16565b9150509250929050565b612f4a61511d565b612f538361252a565b9050612f7d611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161266d91611e8991168463ffffffff612aad16565b612fb5826139d9565b6000612fc483836000806132e4565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604080832087845290915290209091506130009061252a565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff9586160217909216740100000000000000000000000000000000000000009390921692909202179055801561317b576130e58382613a4d565b6130ed610e9a565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016131279291906154d7565b602060405180830381600087803b15801561314157600080fd5b505af1158015613155573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061317991908101906152bd565b505b6112fb83613a95565b600080600061319f6001600c5461239490919063ffffffff16565b90506131a961513d565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290613231908290613468565b9350806040015192505050915091565b600080826132515783915061327a565b61326563ffffffff8616620f424086613aa2565b9150613277848363ffffffff61239416565b90505b935093915050565b61328a613ad8565b42600d556001600c55565b61329d613aed565b620d2f00620dbba068056bc75e2d6310000060026003612a268585858585612db7565b806bffffffffffffffffffffffff81168114610c8557610c85610a18600284613b52565b600c546000906132f261511d565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811694840194909452740100000000000000000000000000000000000000009091049092169281019290925282141561339357600092505050613429565b61339f81838787613b6f565b81519093506000906133c29067ffffffffffffffff16600163ffffffff612aad16565b90506134006133f38984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff1685613bf2565b859063ffffffff612aad16565b93506134236133f38984604001516bffffffffffffffffffffffff168487613bf2565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061347657610fcf565b815183516040840151602086015160608601516014546134ac95949392919063ffffffff80821691640100000000900416613c8b565b608083015183519192506000916134c89163ffffffff61239416565b9050818110156134d6578091505b5092915050565b6000806134e861515e565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261354c908686613241565b909350915082156136095761355f610e9a565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb916135b59187906004016154d7565b602060405180830381600087803b1580156135cf57600080fd5b505af11580156135e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061360791908101906152bd565b505b8115613624576136198683613d4e565b613624868386613d8f565b50935093915050565b606063b65a25b960e01b82604051602401612ae4919061545e565b606063e946c1bb60e01b848484604051602401613667939291906155ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016123079291906155ac565b8067ffffffffffffffff81168114610c8557610c85610a18600184613b52565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b838360405160240161230792919061547f565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b82604051602401612ae4919061545e565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610f7357610f73610a18826000613e78565b61389261511d565b61389b8361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff1661239490919063ffffffff16565b6bffffffffffffffffffffffff1660408201526112fb838261372a565b6138ea61511d565b6138f38361252a565b90506138c5611e898383604001516bffffffffffffffffffffffff16612aad90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016123079291906154d7565b60606322df959760e01b84848460405160240161366793929190615626565b606063e9f8377160e01b83836040516024016123079291906155ac565b606063140a84db60e01b838360405160240161230792919061547f565b60606331d7a50560e01b83836040516024016123079291906155ac565b6000613429836139cd868563ffffffff613e9516565b9063ffffffff613ec616565b600c546000906139f090600163ffffffff61239416565b90506139fa61513d565b5060008281526015602090815260408083208484528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252156112fb576112fb610a188484613ef0565b6000828152600b6020526040902054613a6c908263ffffffff61239416565b6000838152600b6020526040902055601754613a8e908263ffffffff61239416565b6017555050565b610f738160006001613d8f565b6000613429836139cd613abc82600163ffffffff61239416565b613acc888763ffffffff613e9516565b9063ffffffff612aad16565b600d5415611d8557611d85610a186000613f0d565b60115415801590613b05575060125463ffffffff1615155b8015613b12575060135415155b8015613b25575060145463ffffffff1615155b8015613b405750601454640100000000900463ffffffff1615155b15611d8557611d85610a186001613f0d565b606063c996af7b60e01b83836040516024016123079291906155dc565b6000821580613b7c575081155b15613b8957506000613429565b6000613b9c85600163ffffffff61239416565b865167ffffffffffffffff161015613bb8578560400151613bbe565b85602001515b6bffffffffffffffffffffffff16905080613bdd576000915050613429565b613be88484836139b7565b9695505050505050565b6000831580613c0057508183145b15613c0d57506000613429565b818310613c46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061564d565b613c4e615199565b613c588685613f4c565b9050613c62615199565b613c6c8785613f4c565b9050611f7d81600001518260200151846000015185602001518a61406a565b600080613c9888886140f6565b90506000613ca687876140f6565b9050811580613cb3575080155b15613cc4575060009150611f7d9050565b600081831315613cdd57613cd88284614148565b613ce7565b613ce78383614148565b9050613d10613d0b613cf883614167565b8863ffffffff168863ffffffff16614809565b614818565b905081831315613d2957613d248282614148565b613d33565b613d338282614e02565b9050613d3f818c614e2e565b9b9a5050505050505050505050565b6000828152600b6020526040902054613d6d908263ffffffff612aad16565b6000838152600b6020526040902055601754613a8e908263ffffffff612aad16565b6000838152600f6020526040902054600c5480821415613db05750506112fb565b613db8615199565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613def615199565b613df882614e70565b15613e3157613e11826000015183602001518888614e79565b60208301819052818352613e259190614edb565b60208301528152613e3c565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b838360405160240161230792919061559c565b600082613ea457506000610fcf565b82820282848281613eb157fe5b0414610fcc57610fcc610a1860018686613648565b600081613edc57613edc610a1860038585613648565b6000828481613ee757fe5b04949350505050565b6060635caa0b0560e01b83836040516024016123079291906155ac565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613f3c57fe5b604051602401612ae4919061580e565b613f54615199565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613f8c81614e70565b15613f9657610fcf565b6000613fa983600163ffffffff61239416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613fe482614e70565b15613fef5750610fcf565b6000848152600f60205260409020548381101561404c576000858152600e602090815260408083208484528252918290208251808401909352805483526001015490820152925061403f83614e70565b1561404c5750610fcf9050565b50506040805180820190915260008152600160208201529392505050565b600081614079575060006140ed565b8361409957614092856139cd848963ffffffff613e9516565b90506140ed565b60006140be6140ae868863ffffffff613e9516565b6124db898763ffffffff613e9516565b905060006140d2828663ffffffff613ec616565b90506140e8876139cd868463ffffffff613e9516565b925050505b95945050505050565b60008083121561410e5761410e610a18600185614f04565b600082121561412557614125610a18600184614f04565b610fcc614142846f80000000000000000000000000000000614f45565b83614f8d565b6000610fcc614142846f80000000000000000000000000000000614f45565b60006f8000000000000000000000000000000082131561418f5761418f610a1860018461500e565b600082136141a5576141a5610a1860008461500e565b6f800000000000000000000000000000008214156141c557506000610c85565b640733048c5a82136141f857507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610c85565b60008060006a01c8464f761647600000008513614257577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e9000000000000085136142b5577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d780000000000000008513614317577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361437b577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136143df577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614443577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be582800000000000000000085136144a7577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c000000000000000000851361450b577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d851361456f577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816145e557fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0383028161461657fe5b05840193506f800000000000000000000000000000008183028161463657fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161466757fe5b05840193506f800000000000000000000000000000008183028161468757fe5b059150700400000000000000000000000000000000836f92492492492492492492492492492492038302816146b857fe5b05840193506f80000000000000000000000000000000818302816146d857fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e0383028161470957fe5b05840193506f800000000000000000000000000000008183028161472957fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161475a57fe5b05840193506f800000000000000000000000000000008183028161477a57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d89038302816147ab57fe5b05840193506f80000000000000000000000000000000818302816147cb57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816147fc57fe5b0584019350505050919050565b60006134296141428585614f45565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561484a57506000610c85565b8161486657506f80000000000000000000000000000000610c85565b600082131561487d5761487d610a1860018461500e565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816148e957fe5b05905080670168244fdac7800002830192506f800000000000000000000000000000008282028161491657fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161494257fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161496e57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161499a57fe5b059050806536e0f639b80002830192506f80000000000000000000000000000000828202816149c557fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816149f057fe5b05905080649c197dcc0002830192506f8000000000000000000000000000000082820281614a1a57fe5b05905080640e30dce40002830192506f8000000000000000000000000000000082820281614a4457fe5b0590508064012ebd130002830192506f8000000000000000000000000000000082820281614a6e57fe5b059050806317499f0002830192506f8000000000000000000000000000000082820281614a9757fe5b059050806301a9d48002830192506f8000000000000000000000000000000082820281614ac057fe5b05905080621c638002830192506f8000000000000000000000000000000082820281614ae857fe5b059050806201c63802830192506f8000000000000000000000000000000082820281614b1057fe5b05905080611ab802830192506f8000000000000000000000000000000082820281614b3757fe5b0590508061017c02830192506f8000000000000000000000000000000082820281614b5e57fe5b05905080601402830192506f8000000000000000000000000000000082820281614b8457fe5b600095909503946721c3677c82b400009190059384010582016f8000000000000000000000000000000001929050701000000000000000000000000000000000841615614bf3577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b700800000000000000000000000000000000841615614c35577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614c7757701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614cb9577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614cfb5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614d3b576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614d7b576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614dbb576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614dfb576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614e1f8484614f45565b81614e2657fe5b059392505050565b600080821215614e4657614e46610a18600184614f04565b6000614e528484614f45565b905060008113614e66576000915050610fcf565b607f1c9392505050565b60200151151590565b60008085614e8b575082905081614ed2565b83614e9a575084905083614ed2565b614ebd614ead858763ffffffff613e9516565b613acc888663ffffffff613e9516565b9150614ecf858463ffffffff613e9516565b90505b94509492505050565b600080614ef984846f8000000000000000000000000000000061503d565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b8360405160240161230792919061581c565b600082614f5457506000610fcf565b5081810281838281614f6257fe5b05141580614f79575082828281614f7557fe5b0514155b15610fcf57610fcf610a18600185856150ab565b600081614fa357614fa3610a18600285856150ab565b7f800000000000000000000000000000000000000000000000000000000000000083148015614ff15750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b1561500557615005610a18600385856150ab565b818381614e2657fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614f3357fe5b6000808285118061504d57508284115b156150a2576000848610156150625784615064565b855b9050615076818563ffffffff613ec616565b9050615088868263ffffffff613ec616565b925061509a858263ffffffff613ec616565b91505061327a565b50929391925050565b60607f8c12dfe7000000000000000000000000000000000000000000000000000000008460038111156150da57fe5b84846040516024016136679392919061582f565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b8154818355818111156112fb576000838152602090206112fb9181019083016151b3565b604051806040016040528060008152602001600081525090565b610bed91905b808211156151cd57600081556001016151b9565b5090565b6000604082840312156125ca578081fd5b6000602082840312156151f3578081fd5b8135610fcc81615854565b60006020828403121561520f578081fd5b8151610fcc81615854565b60008060006060848603121561522e578182fd5b833561523981615854565b9250602084013561524981615854565b929592945050506040919091013590565b6000806040838503121561526c578182fd5b823561527781615854565b946020939093013593505050565b60008060408385031215615297578182fd5b82356152a281615854565b915060208301356152b281615884565b809150509250929050565b6000602082840312156152ce578081fd5b8151610fcc81615876565b6000602082840312156152ea578081fd5b5035919050565b60008060408385031215615303578182fd5b8235915060208301356152b281615854565b60008060408385031215615327578182fd5b50508035926020909101359150565b60008060408385031215615348578182fd5b82359150602083013563ffffffff811681146152b2578182fd5b600060208284031215615373578081fd5b8135610fcc81615884565b600080600060a08486031215615392578283fd5b61539c85856151d1565b92506153ab85604086016151d1565b9150608084013590509250925092565b6000602082840312156153cc578081fd5b5051919050565b600080600080600060a086880312156153ea578283fd5b8535945060208601356153fc81615891565b935060408601359250606086013561541381615891565b9150608086013561542381615891565b809150509295509295909350565b60008060408385031215615443578182fd5b823561544e81615891565b915060208301356152b281615876565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561554b57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101615517565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b60608101600485106155c857fe5b938152602081019290925260409091015290565b60408101600384106155ea57fe5b9281526020015290565b604081016156018461584a565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016156338561584a565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610f7357fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610f7357600080fd5b8015158114610f7357600080fd5b60028110610f7357600080fd5b63ffffffff81168114610f7357600080fdfea365627a7a72315820cd4dcb64a07325df26d38404ffcca0f57d30f570cbe815c03c543316add5e5a46c6578706572696d656e74616cf564736f6c634300050c0040"
}
}
},
"compiler": {
"name": "solc",
"version": "soljson-v0.5.12+commit.7709ece9.js",
"settings": {
"optimizer": {
"enabled": true,
"runs": 1000000,
"details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true }
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap"
]
}
},
"evmVersion": "constantinople"
}
},
"chains": {}
}