1 tx
50 calls
constructor
No constructor.
functions
BASE_SHARES_PER_WEI
viewfunction BASE_SHARES_PER_WEI() view returns (uint256)
calculateReward
purefunction calculateReward(uint256 unlockedRewards, uint256 stakeAmount, uint256 stakeDuration, uint256 totalStakeUnits, tuple rewardScaling) pure returns (uint256 reward)
calculateRewardFromStakes
purefunction calculateRewardFromStakes(tuple[] stakes, uint256 unstakeAmount, uint256 unlockedRewards, uint256 totalStakeUnits, uint256 timestamp, tuple rewardScaling) pure returns (tuple out)
calculateStakeUnits
purefunction calculateStakeUnits(uint256 amount, uint256 start, uint256 end) pure returns (uint256 stakeUnits)
calculateTotalStakeUnits
purefunction calculateTotalStakeUnits(tuple[] stakes, uint256 timestamp) pure returns (uint256 totalStakeUnits)
calculateUnlockedRewards
purefunction calculateUnlockedRewards(tuple[] rewardSchedules, uint256 rewardBalance, uint256 sharesOutstanding, uint256 timestamp) pure returns (uint256 unlockedRewards)
computeAvailableStakingBalance
viewfunction computeAvailableStakingBalance(address vault) view returns (uint256)
getBonusTokenAtIndex
viewfunction getBonusTokenAtIndex(uint256 index) view returns (address bonusToken)
getBonusTokenSetLength
viewfunction getBonusTokenSetLength() view returns (uint256 length)
getCurrentStakeReward
viewfunction getCurrentStakeReward(address vault, uint256 stakeAmount) view returns (uint256 reward)
getCurrentTotalStakeUnits
viewfunction getCurrentTotalStakeUnits() view returns (uint256 totalStakeUnits)
getCurrentUnlockedRewards
viewfunction getCurrentUnlockedRewards() view returns (uint256 unlockedRewards)
getCurrentVaultReward
viewfunction getCurrentVaultReward(address vault) view returns (uint256 reward)
getCurrentVaultStakeUnits
viewfunction getCurrentVaultStakeUnits(address vault) view returns (uint256 stakeUnits)
getFutureStakeReward
viewfunction getFutureStakeReward(address vault, uint256 stakeAmount, uint256 timestamp) view returns (uint256 reward)
getFutureTotalStakeUnits
viewfunction getFutureTotalStakeUnits(uint256 timestamp) view returns (uint256 totalStakeUnits)
getFutureUnlockedRewards
viewfunction getFutureUnlockedRewards(uint256 timestamp) view returns (uint256 unlockedRewards)
getFutureVaultReward
viewfunction getFutureVaultReward(address vault, uint256 timestamp) view returns (uint256 reward)
getFutureVaultStakeUnits
viewfunction getFutureVaultStakeUnits(address vault, uint256 timestamp) view returns (uint256 stakeUnits)
getGeyserData
viewfunction getGeyserData() view returns (tuple geyser)
getPowerController
viewfunction getPowerController() view returns (address controller)
getPowerSwitch
viewfunction getPowerSwitch() view returns (address powerSwitch)
getVaultData
viewfunction getVaultData(address vault) view returns (tuple vaultData)
getVaultFactoryAtIndex
viewfunction getVaultFactoryAtIndex(uint256 index) view returns (address factory)
getVaultFactorySetLength
viewfunction getVaultFactorySetLength() view returns (uint256 length)
isOffline
viewfunction isOffline() view returns (bool status)
isOnline
viewfunction isOnline() view returns (bool status)
isShutdown
viewfunction isShutdown() view returns (bool status)
isValidAddress
viewfunction isValidAddress(address target) view returns (bool validity)
isValidVault
viewfunction isValidVault(address target) view returns (bool validity)
MAX_REWARD_TOKENS
viewfunction MAX_REWARD_TOKENS() view returns (uint256)
MAX_STAKES_PER_VAULT
viewfunction MAX_STAKES_PER_VAULT() view returns (uint256)
owner
viewfunction owner() view returns (address)
fundGeyser
nonpayablefunction fundGeyser(uint256 amount, uint256 duration)
initialize
nonpayablefunction initialize(address ownerAddress, address rewardPoolFactory, address powerSwitchFactory, address stakingToken, address rewardToken, tuple rewardScaling)
initializeLock
nonpayablefunction initializeLock()
rageQuit
nonpayablefunction rageQuit()
registerBonusToken
nonpayablefunction registerBonusToken(address bonusToken)
registerVaultFactory
nonpayablefunction registerVaultFactory(address factory)
removeVaultFactory
nonpayablefunction removeVaultFactory(address factory)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokensFromRewardPool
nonpayablefunction rescueTokensFromRewardPool(address token, address recipient, uint256 amount)
stake
nonpayablefunction stake(address vault, uint256 amount, bytes permission)
terminateRewardSchedule
nonpayablefunction terminateRewardSchedule(uint256 index)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstakeAndClaim
nonpayablefunction unstakeAndClaim(address vault, uint256 amount, bytes permission)
events
BonusTokenRegistered
event BonusTokenRegistered(address token)
GeyserCreated
event GeyserCreated(address rewardPool, address powerSwitch)
GeyserFunded
event GeyserFunded(uint256 amount, uint256 duration)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RewardClaimed
event RewardClaimed(address vault, address token, uint256 amount)
Staked
event Staked(address vault, uint256 amount)
Unstaked
event Unstaked(address vault, uint256 amount)
VaultFactoryRegistered
event VaultFactoryRegistered(address factory)
VaultFactoryRemoved
event VaultFactoryRemoved(address factory)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b50613e69806100206000396000f3fe608060405234801561001057600080fd5b50600436106103085760003560e01c8063777c265c1161019c57806399493c51116100ee578063c7edd76611610097578063e2c0042311610071578063e2c00423146105dc578063f2fde38b146105ef578063f90394371461060257610308565b8063c7edd766146105ac578063ce100129146105cc578063e2bb9c0f146105d457610308565b8063b22fdd38116100c8578063b22fdd381461057e578063b3173f9f14610591578063bf86d690146105a457610308565b806399493c5114610550578063a9526fae14610563578063b0ccbf8c1461057657610308565b80638382840c116101505780638da5cb5b1161012a5780638da5cb5b146105225780638e0ef6361461052a57806398322ab21461053d57610308565b80638382840c146104f45780638531a636146105075780638539a69a1461050f57610308565b8063785b547911610181578063785b5479146104c65780637985cf56146104d95780637df98acf146104ec57610308565b8063777c265c146104a057806378561435146104b357610308565b8063438cae7e116102605780636471aadb1161020957806371406a32116101e357806371406a3214610488578063715018a614610490578063766f13bc1461049857610308565b80636471aadb1461045a578063664ab18e1461046d5780636d9022101461047557610308565b80635d0cde971161023a5780635d0cde9714610437578063642194501461043f578063643cd8781461045257610308565b8063438cae7e146103ef5780634dd878d9146103f757806356360f711461041757610308565b806313eb9224116102c25780632ee0b2bc1161029c5780632ee0b2bc146103b65780633e12170f146103c957806342c026c7146103dc57610308565b806313eb92241461037b5780631df5dda8146103905780632857edd4146103a357610308565b80630513247b116102f35780630513247b1461034b5780630670fafd146103605780630b2c5c141461037357610308565b80623f07fa1461030d5780624414df14610336575b600080fd5b61032061031b366004613282565b610615565b60405161032d9190613832565b60405180910390f35b61033e6106a2565b60405161032d9190613ce1565b61035e610359366004613282565b6106b2565b005b61033e61036e366004613432565b610798565b61033e610861565b610383610868565b60405161032d9190613bba565b61035e61039e366004613682565b610964565b61033e6103b1366004613518565b610bd5565b61035e6103c4366004613282565b610c2e565b61035e6103d73660046133ae565b610d00565b61033e6103ea366004613652565b610d18565b610320610d58565b61040a610405366004613652565b610dd8565b60405161032d9190613781565b61042a610425366004613282565b610de5565b60405161032d9190613c7d565b61033e610e8c565b61032061044d366004613282565b610e91565b61033e610f4c565b61035e6104683660046133ae565b610f58565b61032061159e565b61035e6104833660046132ba565b6115ed565b61033e6118d6565b61035e6118db565b61040a611999565b61035e6104ae366004613652565b6119e8565b61033e6104c1366004613282565b611ab3565b61033e6104d4366004613282565b611abf565b61033e6104e7366004613383565b611b9c565b61035e611c4d565b61033e6105023660046136ce565b611d06565b61040a611dc3565b61033e61051d3660046136a3565b611dd2565b61040a611df4565b61035e610538366004613282565b611e03565b61033e61054b366004613383565b611ef1565b61040a61055e366004613652565b611f7c565b61033e610571366004613383565b611f89565b61035e612011565b61033e61058c366004613282565b612146565b61033e61059f366004613466565b61233f565b61032061241a565b6105bf6105ba36600461355b565b612469565b60405161032d9190613c52565b61033e61259c565b61033e6125a7565b61033e6105ea366004613652565b6125b3565b61035e6105fd366004613282565b6126c6565b61035e610610366004613343565b6127db565b60006001600160a01b038216301480159061063857506001600160a01b03821615155b801561065257506065546001600160a01b03838116911614155b801561066c57506066546001600160a01b03838116911614155b801561068657506067546001600160a01b03838116911614155b801561069a57506106986071836128c2565b155b90505b919050565b60006106ad42610d18565b905090565b6106ba6128d7565b6001600160a01b03166106cb611df4565b6001600160a01b031614610726576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61072e6128db565b610739607382612937565b61075e5760405162461bcd60e51b81526004016107559061395b565b60405180910390fd5b7f040b321f0ccd1b9d7890282c99da1d97cbf2de30c3af0782aba31fbd952832438160405161078d9190613781565b60405180910390a150565b6001600160a01b0383166000908152607060209081526040808320600101805482518185028101850190935280835261085593859084015b82821015610816578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906107d0565b5050505084610824856125b3565b61082d86610d18565b6040805160608101825260685481526069546020820152606a54918101919091528790612469565b60400151949350505050565b620f424081565b610870613093565b6040805161012081018252606580546001600160a01b039081168352606654811660208085019190915260675490911683850152835160608181018652606854825260695482840152606a5482870152840152606b546080840152606c5460a0840152606d5460c0840152606e5460e0840152606f8054855181840281018401909652808652939492936101008601939260009084015b828210156109575783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190610907565b5050505081525050905090565b61096c6128d7565b6001600160a01b031661097d611df4565b6001600160a01b0316146109d8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6109e061294c565b806109fd5760405162461bcd60e51b8152600401610755906139b8565b606b5460009015610ab4576066546067546040516370a0823160e01b81526000926001600160a01b03908116926370a0823192610a409290911690600401613781565b60206040518083038186803b158015610a5857600080fd5b505afa158015610a6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a90919061366a565b606b54909150610aac908290610aa690876129a5565b906129fe565b915050610ac4565b610ac183620f42406129a5565b90505b606b54610ad19082612a65565b606b55604080516060810182528381524260208201908152918101838152606f805460018101825560009190915291517f39f2babe526038520877fc7c33d81accf578af4a06c5fa6b0d038cae36e1271160039093029283015591517f39f2babe526038520877fc7c33d81accf578af4a06c5fa6b0d038cae36e1271282015590517f39f2babe526038520877fc7c33d81accf578af4a06c5fa6b0d038cae36e1271390910155606654606754610b97916001600160a01b039081169133911686612abf565b7f20b304fdf699a6156a9c7bf19be559fd19dd45e01378fd9024b1d2580a01871e8383604051610bc8929190613cea565b60405180910390a1505050565b6000805b8351811015610c27576000848281518110610bf057fe5b602002602001015190506000610c0f8260000151836020015187611dd2565b9050610c1b8482612a65565b93505050600101610bd9565b5092915050565b610c366128d7565b6001600160a01b0316610c47611df4565b6001600160a01b031614610ca2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610caa6128db565b610cb5607382612c49565b610cd15760405162461bcd60e51b815260040161075590613a4c565b7f059b5054f04b000050b3cbdf0ad2d8bce0dfca886836a4742ab837cc948cd1af8160405161078d9190613781565b60405162461bcd60e51b815260040161075590613b83565b606e54600090821415610d2e5750606d5461069d565b606c54606e54600091610d419185611dd2565b606d54909150610d519082612a65565b9392505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663438cae7e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610da757600080fd5b505afa158015610dbb573d6000803e3d6000fd5b505050506040513d6020811015610dd157600080fd5b5051905090565b600061069a607183612c5e565b610ded6130e6565b6001600160a01b038216600090815260706020908152604080832081518083018352815481526001820180548451818702810187019095528085529195929486810194939192919084015b82821015610e7e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610e38565b505050915250909392505050565b603281565b6000805b610e9f6073612c6a565b811015610f4357610eb1607382612c5e565b6001600160a01b0316636b44e6be846040518263ffffffff1660e01b8152600401610edc9190613781565b60206040518083038186803b158015610ef457600080fd5b505afa158015610f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2c91906135ce565b15610f3b57600191505061069d565b600101610e95565b50600092915050565b60006106ad6073612c6a565b610f6061294c565b6001600160a01b038416600090815260706020526040902083610f955760405162461bcd60e51b815260040161075590613b17565b8054841115610fb65760405162461bcd60e51b815260040161075590613b4e565b606c54841115610fc257fe5b610fca612c75565b6066546067546040516370a0823160e01b81526000926001600160a01b03908116926370a08231926110029290911690600401613781565b60206040518083038186803b15801561101a57600080fd5b505afa15801561102e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611052919061366a565b905060006110df6065600a01805480602002602001604051908101604052809291908181526020016000905b828210156110ce578382906000526020600020906003020160405180606001604052908160008201548152602001600182015481526020016002820154815250508152602001906001019061107e565b50505050836065600601544261233f565b9050600061118384600101805480602002602001604051908101604052809291908181526020016000905b828210156111505783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061110a565b5050606d546040805160608101825260685481526069546020820152606a54918101919091528c93508792504290612469565b90508060200151600014156111a5576111a0600185016000613100565b61121e565b6020810151600185015411156111e557836001018054806111c257fe5b6000828152602081206002600019909301928302018181556001015590556111a5565b80511561121e578051602082015160018087019161120291612c86565b8154811061120c57fe5b60009182526020909120600290910201555b835461122a9088612c86565b8455606c546112399088612c86565b606c556060810151606d556065546040517fabee08030000000000000000000000000000000000000000000000000000000081526001600160a01b038a81169263abee08039261129592909116908b908b908b906004016137ec565b600060405180830381600087803b1580156112af57600080fd5b505af11580156112c3573d6000803e3d6000fd5b505050507f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7588886040516112f8929190613795565b60405180910390a160408101511561159457600061132c84610aa684604001516065600601546129a590919063ffffffff16565b606b5490915061133c9082612c86565b606b55600061134b6071612c6a565b11156114d95760005b61135e6071612c6a565b8110156114d7576000611372607183612c5e565b60408086015160675491516370a0823160e01b815292935060009261140f928a92610aa69290916001600160a01b03808916926370a08231926113b9921690600401613781565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611409919061366a565b906129a5565b905080156114cd57606560020160009054906101000a90046001600160a01b03166001600160a01b0316638f975a64838e846040518463ffffffff1660e01b815260040161145f939291906137c8565b600060405180830381600087803b15801561147957600080fd5b505af115801561148d573d6000803e3d6000fd5b505050507f0aa4d283470c904c551d18bb894d37e17674920f3261a7f854be501e25f421b78c83836040516114c4939291906137c8565b60405180910390a15b5050600101611354565b505b60675460665460408085015190516323e5d69960e21b81526001600160a01b0393841693638f975a6493611515939116918e91906004016137c8565b600060405180830381600087803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b505060665460408086015190517f0aa4d283470c904c551d18bb894d37e17674920f3261a7f854be501e25f421b7945061158a93508d926001600160a01b031691906137c8565b60405180910390a1505b5050505050505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663664ab18e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610da757600080fd5b600054600160a81b900460ff16806116085750611608612ce3565b8061161d5750600054600160a01b900460ff16155b6116585760405162461bcd60e51b815260040180806020018281038252602e815260200180613de5602e913960400191505060405180910390fd5b600054600160a81b900460ff1615801561168f576000805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b6020820135823511156116b45760405162461bcd60e51b8152600401610755906138c7565b60408201356116d55760405162461bcd60e51b8152600401610755906139ef565b6000856001600160a01b031663cf5ba53f896040516020016116f79190613781565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401611722919061383d565b602060405180830381600087803b15801561173c57600080fd5b505af1158015611750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611774919061329e565b90506000876001600160a01b031663cf5ba53f836040516020016117989190613781565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016117c3919061383d565b602060405180830381600087803b1580156117dd57600080fd5b505af11580156117f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611815919061329e565b905061181f612cf4565b611828896126c6565b61183182612da6565b606580546001600160a01b038089166001600160a01b03199283161790925560668054888416908316179055606780549284169290911691909117905583606861187b8282613d3a565b9050507fbdbe2e84b98fef97ba20d65c292616b160a3fbe3f7a8369d2747dafc21dfe26e81836040516118af9291906137ae565b60405180910390a1505080156118cd576000805460ff60a81b191690555b50505050505050565b601e81565b6118e36128d7565b6001600160a01b03166118f4611df4565b6001600160a01b03161461194f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60008060009054906101000a90046001600160a01b03166001600160a01b031663766f13bc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610da757600080fd5b6119f06128d7565b6001600160a01b0316611a01611df4565b6001600160a01b031614611a5c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60006065600a018281548110611a6e57fe5b9060005260206000209060030201905042816000015482600101540111611aa75760405162461bcd60e51b815260040161075590613aa9565b60018101544203905550565b600061069a8242611f89565b6001600160a01b03811660009081526070602090815260408083206001018054825181850281018501909352808352611b9293859084015b82821015611b3d57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611af7565b505050506001600160a01b038416600090815260706020526040902054611b6261259c565b611b6a6106a2565b6040805160608101825260685481526069546020820152606a54918101919091524290612469565b6040015192915050565b6001600160a01b03821660009081526070602090815260408083206001018054825181850281018501909352808352611c4093859084015b82821015611c1a57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611bd4565b505050506001600160a01b038516600090815260706020526040902054610824856125b3565b6040015190505b92915050565b600054600160a81b900460ff1680611c685750611c68612ce3565b80611c7d5750600054600160a01b900460ff16155b611cb85760405162461bcd60e51b815260040180806020018281038252602e815260200180613de5602e913960400191505060405180910390fd5b600054600160a81b900460ff16158015611cef576000805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b8015611d03576000805460ff60a81b191690555b50565b600080611d1386866129a5565b905060008415611d2e57611d2b85610aa68a856129a5565b90505b836040015186101580611d45575060208401518451145b15611d5257809250611db8565b60208401518451600091611d6b91610aa69085906129a5565b90506000611da78660400151610aa68860200151610aa6611d9d8b600001518c60200151612c8690919063ffffffff16565b611409898f6129a5565b9050611db38282612a65565b945050505b505095945050505050565b6000546001600160a01b031690565b600080611ddf8385612c86565b9050611deb81866129a5565b95945050505050565b6033546001600160a01b031690565b611e0b6128d7565b6001600160a01b0316611e1c611df4565b6001600160a01b031614611e77576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b611e7f61294c565b611e8881612dc8565b6032611e946071612c6a565b10611eb15760405162461bcd60e51b8152600401610755906138fe565b611ebc607182612c49565b611ec257fe5b7fbca954c637e20d265d501f3c0c9d0df1440001376c36ac73bd296c1a628f528c8160405161078d9190613781565b6001600160a01b03821660009081526070602090815260408083206001018054825181850281018501909352808352611c4093859084015b82821015611f6f57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611f29565b5050505083611b6261259c565b600061069a607383612c5e565b6001600160a01b03821660009081526070602090815260408083206001018054825181850281018501909352808352610d5193859084015b8282101561200757838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190611fc1565b5050505083610bd5565b33600090815260706020526040902060018101546120415760405162461bcd60e51b815260040161075590613890565b612049612c75565b80546040517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f759161207c91339190613795565b60405180910390a18054606c5461209291612c86565b60656007018190555061211e61211582600101805480602002602001604051908101604052809291908181526020016000905b8282101561210b578382906000526020600020906002020160405180604001604052908160008201548152602001600182015481525050815260200190600101906120c5565b5050505042610bd5565b606d5490612c86565b606d55336000908152607060205260408120818155906121416001830182613100565b505050565b600080612151610868565b516040516370a0823160e01b81529091506000906001600160a01b038316906370a0823190612184908790600401613781565b60206040518083038186803b15801561219c57600080fd5b505afa1580156121b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d4919061366a565b9050600080856001600160a01b03166370680c1a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561221257600080fd5b505afa158015612226573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224a919061366a565b905060005b81811015612322576040517f0d4f581a0000000000000000000000000000000000000000000000000000000081526000906001600160a01b03891690630d4f581a9061229f908590600401613ce1565b60606040518083038186803b1580156122b757600080fd5b505afa1580156122cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ef91906135ee565b9050856001600160a01b031681602001516001600160a01b03161415612319578060400151840193505b5060010161224f565b50818311612331576000612335565b8183035b9695505050505050565b600084516000141561235357506000612412565b6000805b86518110156123f057600087828151811061236e57fe5b6020026020010151905060008160000151612396836020015188612c8690919063ffffffff16565b10156123da576123d76123cc8360000151610aa66123c186602001518b612c8690919063ffffffff16565b6040870151906129a5565b604084015190612c86565b90505b6123e48482612a65565b93505050600101612357565b50600061240185610aa684896129a5565b905061240d8682612c86565b925050505b949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663bf86d6906040518163ffffffff1660e01b815260040160206040518083038186803b158015610da757600080fd5b612471613121565b60005b861561255c5760008861249c6001612496858d51612c8690919063ffffffff16565b90612c86565b815181106124a657fe5b6020026020010151905060006124c9826020015187612c8690919063ffffffff16565b9050600089836000015111156124ef5750815189906124e89082612c86565b85526124fa565b508151600193909301925b6125048a82612c86565b995060006125158a83858c8b611d06565b60408701519091506125279082612a65565b60408701526125368a82612c86565b9950600061254483856129a5565b90506125508a82612c86565b99505050505050612474565b6040805160808101909152825181528851602082019061257c9084612c86565b815260200183604001518152602001868152509150509695505050505050565b60006106ad426125b3565b60006106ad6071612c6a565b6066546067546040516370a0823160e01b815260009283926001600160a01b03918216926370a08231926125eb921690600401613781565b60206040518083038186803b15801561260357600080fd5b505afa158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b919061366a565b9050610d516065600a01805480602002602001604051908101604052809291908181526020016000905b828210156126b55783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190612665565b50505050826065600601548661233f565b6126ce6128d7565b6001600160a01b03166126df611df4565b6001600160a01b03161461273a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661277f5760405162461bcd60e51b8152600401808060200182810382526026815260200180613d8e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6127e36128d7565b6001600160a01b03166127f4611df4565b6001600160a01b03161461284f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61285761294c565b61286082612dc8565b6067546040516323e5d69960e21b81526001600160a01b0390911690638f975a6490612894908690869086906004016137c8565b600060405180830381600087803b1580156128ae57600080fd5b505af11580156118cd573d6000803e3d6000fd5b6000610d51836001600160a01b038416612ded565b3390565b6128e361241a565b15612935576040805162461bcd60e51b815260206004820152601460248201527f506f77657265643a2069732073687574646f776e000000000000000000000000604482015290519081900360640190fd5b565b6000610d51836001600160a01b038416612e05565b61295461159e565b612935576040805162461bcd60e51b815260206004820152601660248201527f506f77657265643a206973206e6f74206f6e6c696e6500000000000000000000604482015290519081900360640190fd5b6000826129b457506000611c47565b828202828482816129c157fe5b0414610d515760405162461bcd60e51b8152600401808060200182810382526021815260200180613e136021913960400191505060405180910390fd5b6000808211612a54576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a5d57fe5b049392505050565b600082820183811015610d51576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000178152925182516000948594938a169392918291908083835b60208310612b715780518252601f199092019160209182019101612b52565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612bd3576040519150601f19603f3d011682016040523d82523d6000602084013e612bd8565b606091505b5091509150818015612c06575080511580612c065750808060200190516020811015612c0357600080fd5b50515b612c415760405162461bcd60e51b8152600401808060200182810382526031815260200180613db46031913960400191505060405180910390fd5b505050505050565b6000610d51836001600160a01b038416612ecb565b6000610d518383612f15565b600061069a82612f79565b612c7d6106a2565b606d5542606e55565b600082821115612cdd576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000612cee30612f7d565b15905090565b600054600160a81b900460ff1680612d0f5750612d0f612ce3565b80612d245750600054600160a01b900460ff16155b612d5f5760405162461bcd60e51b815260040180806020018281038252602e815260200180613de5602e913960400191505060405180910390fd5b600054600160a81b900460ff16158015612d96576000805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b612d9e611c4d565b611cef612f83565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b612dd181610615565b611d035760405162461bcd60e51b815260040161075590613ae0565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612ec15783546000198083019190810190600090879083908110612e3857fe5b9060005260206000200154905080876000018481548110612e5557fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080612e8557fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611c47565b6000915050611c47565b6000612ed78383612ded565b612f0d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611c47565b506000611c47565b81546000908210612f575760405162461bcd60e51b8152600401808060200182810382526022815260200180613d6c6022913960400191505060405180910390fd5b826000018281548110612f6657fe5b9060005260206000200154905092915050565b5490565b3b151590565b600054600160a81b900460ff1680612f9e5750612f9e612ce3565b80612fb35750600054600160a01b900460ff16155b612fee5760405162461bcd60e51b815260040180806020018281038252602e815260200180613de5602e913960400191505060405180910390fd5b600054600160a81b900460ff16158015613025576000805460ff60a01b1960ff60a81b19909116600160a81b1716600160a01b1790555b600061302f6128d7565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611d03576000805460ff60a81b1916905550565b604080516101208101825260008082526020820181905291810191909152606081016130bd613149565b815260200160008152602001600081526020016000815260200160008152602001606081525090565b604051806040016040528060008152602001606081525090565b5080546000825560020290600052602060002090810190611d03919061316a565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b5b80821115613185576000808255600182015560020161316b565b5090565b600082601f830112613199578081fd5b813560206131ae6131a983613d1c565b613cf8565b828152818101908583016040808602880185018910156131cc578687fd5b865b8681101561321f5781838b0312156131e4578788fd5b815182810181811067ffffffffffffffff821117156131ff57fe5b8352833581528684013587820152855293850193918101916001016131ce565b509198975050505050505050565b60006060828403121561323e578081fd5b6040516060810181811067ffffffffffffffff8211171561325b57fe5b80604052508091508235815260208301356020820152604083013560408201525092915050565b600060208284031215613293578081fd5b8135610d5181613d56565b6000602082840312156132af578081fd5b8151610d5181613d56565b6000806000806000808688036101008112156132d4578283fd5b87356132df81613d56565b965060208801356132ef81613d56565b955060408801356132ff81613d56565b9450606088013561330f81613d56565b9350608088013561331f81613d56565b92506060609f1982011215613332578182fd5b5060a0870190509295509295509295565b600080600060608486031215613357578283fd5b833561336281613d56565b9250602084013561337281613d56565b929592945050506040919091013590565b60008060408385031215613395578182fd5b82356133a081613d56565b946020939093013593505050565b600080600080606085870312156133c3578384fd5b84356133ce81613d56565b935060208501359250604085013567ffffffffffffffff808211156133f1578384fd5b818701915087601f830112613404578384fd5b813581811115613412578485fd5b886020828501011115613423578485fd5b95989497505060200194505050565b600080600060608486031215613446578081fd5b833561345181613d56565b95602085013595506040909401359392505050565b6000806000806080858703121561347b578182fd5b843567ffffffffffffffff811115613491578283fd5b8501601f810187136134a1578283fd5b803560206134b16131a983613d1c565b828152818101908483016060808602870185018d10156134cf578889fd5b8896505b858710156134fb576134e58d8361322d565b84526001969096019592840192908101906134d3565b919c938b01359b505060408a013599013597509095505050505050565b6000806040838503121561352a578182fd5b823567ffffffffffffffff811115613540578283fd5b61354c85828601613189565b95602094909401359450505050565b6000806000806000806101008789031215613574578384fd5b863567ffffffffffffffff81111561358a578485fd5b61359689828a01613189565b965050602087013594506040870135935060608701359250608087013591506135c28860a0890161322d565b90509295509295509295565b6000602082840312156135df578081fd5b81518015158114610d51578182fd5b6000606082840312156135ff578081fd5b6040516060810181811067ffffffffffffffff8211171561361c57fe5b604052825161362a81613d56565b8152602083015161363a81613d56565b60208201526040928301519281019290925250919050565b600060208284031215613663578081fd5b5035919050565b60006020828403121561367b578081fd5b5051919050565b60008060408385031215613694578182fd5b50508035926020909101359150565b6000806000606084860312156136b7578081fd5b505081359360208301359350604090920135919050565b600080600080600060e086880312156136e5578283fd5b8535945060208601359350604086013592506060860135915061370b876080880161322d565b90509295509295909350565b6001600160a01b03169052565b6000815180845260208085019450808401835b8381101561375d5761374a878351613768565b6060969096019590820190600101613737565b509495945050505050565b8051825260208082015190830152604090810151910152565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006001600160a01b03861682528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b901515815260200190565b6000602080835283518082850152825b818110156138695785810183015185820160400152820161384d565b8181111561387a5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201527f4765797365723a206e6f207374616b6500000000000000000000000000000000604082015260600190565b6020808252601b908201527f4765797365723a20666c6f6f722061626f7665206365696c696e670000000000604082015260600190565b60208082526021908201527f4765797365723a206d617820626f6e757320746f6b656e73207265616368656460408201527f2000000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4765797365723a207661756c7420666163746f7279206e6f742072656769737460408201527f6572656400000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526018908201527f4765797365723a20696e76616c6964206475726174696f6e0000000000000000604082015260600190565b60208082526023908201527f4765797365723a207363616c696e672074696d652063616e6e6f74206265207a60408201527f65726f0000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526028908201527f4765797365723a207661756c7420666163746f727920616c726561647920726560408201527f6769737465726564000000000000000000000000000000000000000000000000606082015260800190565b60208082526015908201527f526577617264207363686564756c6520656e6465640000000000000000000000604082015260600190565b60208082526017908201527f4765797365723a20696e76616c69642061646472657373000000000000000000604082015260600190565b6020808252601a908201527f4765797365723a206e6f20616d6f756e7420756e7374616b6564000000000000604082015260600190565b6020808252818101527f4765797365723a20696e73756666696369656e74207661756c74207374616b65604082015260600190565b60208082526010908201527f5374616b696e672064697361626c656400000000000000000000000000000000604082015260600190565b600060208252613bce602083018451613717565b6020830151613be06040840182613717565b506040830151613bf36060840182613717565b506060830151613c066080840182613768565b50608083015160e083015260a0830151610100818185015260c085015161012085015260e085015161014085015280850151915050610160808185015250612412610180840182613724565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b602080825282518282015282810151604080840181905281516060850181905260009392830191849160808701905b80841015613cd55784518051835286015186830152938501936001939093019290820190613cac565b50979650505050505050565b90815260200190565b918252602082015260400190565b60405181810167ffffffffffffffff81118282101715613d1457fe5b604052919050565b600067ffffffffffffffff821115613d3057fe5b5060209081020190565b8135815560208201356001820155604082013560028201555050565b6001600160a01b0381168114611d0357600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c6564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122098681e4ed8e1f77ba6ecd70ca753e090bf6e7853dbdfd571069f37aa9221241e64736f6c63430007060033