27 txs
26 calls
constructor
constructor(address _horizToken, uint256 _dailyEmissionRate)
functions
apyUpdateInterval
viewfunction apyUpdateInterval() view returns (uint256)
BASIS_POINTS
viewfunction BASIS_POINTS() view returns (uint256)
calculateDynamicAPY
viewfunction calculateDynamicAPY(uint256 _poolId) view returns (uint256)
dailyEmissionRate
viewfunction dailyEmissionRate() view returns (uint256)
DAYS_PER_YEAR
viewfunction DAYS_PER_YEAR() view returns (uint256)
getCurrentPoolAPY
viewfunction getCurrentPoolAPY(uint256 _poolId) view returns (uint256)
getPoolDetails
viewfunction getPoolDetails(uint256 _poolId) view returns (uint256 id, string name, uint256 baseAPY, uint256 maxAPY, uint256 currentAPY, uint256 totalStaked, uint256 targetCapacity, uint256 utilization, bool isActive)
getPoolTargetCapacity
viewfunction getPoolTargetCapacity(uint256 _poolId) view returns (uint256)
getPoolUtilization
viewfunction getPoolUtilization(uint256 _poolId) view returns (uint256)
getStakeInfo
viewfunction getStakeInfo(uint256 _stakeId) view returns (uint256 poolId, uint256 amount, uint256 stakedAt, uint256 unlockAt, uint256 pendingRewards, uint256 stakingAPY, bool isCompounding, bool isActive)
getStakingStats
viewfunction getStakingStats() view returns (uint256 _totalValueLocked, uint256 _totalRewardsDistributed, uint256 _activeStakers, uint256 _activePools)
getTradingFeeDiscount
viewfunction getTradingFeeDiscount(address _user) view returns (uint256)
getUserStakes
viewfunction getUserStakes(address _user) view returns (uint256[])
horizToken
viewfunction horizToken() view returns (address)
nextPoolId
viewfunction nextPoolId() view returns (uint256)
nextStakeId
viewfunction nextStakeId() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pools
viewfunction pools(uint256) view returns (uint256 id, string name, uint256 baseAPY, uint256 maxAPY, uint256 lockPeriod, uint256 tradingFeeDiscount, uint256 minimumStake, uint256 maximumStake, uint256 totalStaked, uint256 totalRewards, uint256 targetCapacity, uint256 earlyUnstakePenalty, bool isActive, bool allowsCompounding, uint256 lastAPYUpdate)
SECONDS_PER_DAY
viewfunction SECONDS_PER_DAY() view returns (uint256)
stakes
viewfunction stakes(uint256) view returns (uint256 poolId, uint256 amount, uint256 stakedAt, uint256 unlockAt, uint256 lastClaimAt, uint256 pendingRewards, uint256 stakingAPY, bool isCompounding, bool isActive)
totalRewardsDistributed
viewfunction totalRewardsDistributed() view returns (uint256)
totalValueLocked
viewfunction totalValueLocked() view returns (uint256)
userStakeIds
viewfunction userStakeIds(address, uint256) view returns (uint256)
userTotalStaked
viewfunction userTotalStaked(address) view returns (uint256)
adminUpdatePoolAPY
nonpayablefunction adminUpdatePoolAPY(uint256 _poolId, uint256 _newBaseAPY, uint256 _newMaxAPY)
claimRewards
nonpayablefunction claimRewards(uint256 _stakeId)
compoundRewards
nonpayablefunction compoundRewards(uint256 _stakeId)
createEnhancedPool
nonpayablefunction createEnhancedPool(string _name, uint256 _baseAPY, uint256 _maxAPY, uint256 _lockPeriod, uint256 _tradingFeeDiscount, uint256 _minimumStake, uint256 _maximumStake, uint256 _targetCapacity, uint256 _earlyUnstakePenalty, bool _allowsCompounding)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address _token, uint256 _amount)
forceUpdateAllPoolAPYs
nonpayablefunction forceUpdateAllPoolAPYs()
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setAPYUpdateInterval
nonpayablefunction setAPYUpdateInterval(uint256 _newInterval)
setDailyEmissionRate
nonpayablefunction setDailyEmissionRate(uint256 _newRate)
stake
nonpayablefunction stake(uint256 _poolId, uint256 _amount, bool _isCompounding)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unstake
nonpayablefunction unstake(uint256 _stakeId)
updatePoolAPY
nonpayablefunction updatePoolAPY(uint256 _poolId)
updatePoolTargetCapacity
nonpayablefunction updatePoolTargetCapacity(uint256 _poolId, uint256 _newTargetCapacity)
events
DynamicAPYCalculated
event DynamicAPYCalculated(uint256 indexed poolId, uint256 newAPY, uint256 utilization, uint256 timestamp)
EmissionRateUpdated
event EmissionRateUpdated(uint256 oldRate, uint256 newRate)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PoolAPYUpdated
event PoolAPYUpdated(uint256 indexed poolId, uint256 oldAPY, uint256 newAPY, uint256 utilization)
PoolCreated
event PoolCreated(uint256 indexed poolId, string name, uint256 baseAPY, uint256 maxAPY, uint256 lockPeriod)
PoolTargetCapacityUpdated
event PoolTargetCapacityUpdated(uint256 indexed poolId, uint256 oldCapacity, uint256 newCapacity)
RewardsClaimed
event RewardsClaimed(address indexed user, uint256 indexed stakeId, uint256 amount)
RewardsCompounded
event RewardsCompounded(address indexed user, uint256 indexed stakeId, uint256 amount)
Staked
event Staked(address indexed user, uint256 indexed poolId, uint256 indexed stakeId, uint256 amount, uint256 apy)
Unpaused
event Unpaused(address account)
Unstaked
event Unstaked(address indexed user, uint256 indexed stakeId, uint256 amount, uint256 penalty)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60a060405234610d04576133bf6040813803918261001c81610d28565b938492833981010312610d045780516001600160a01b0381169190829003610d0457602001519060015f553315610cf157600154336001600160a01b0382167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a81b0319163360ff60a01b19161760019081556002819055600355610e106007556080526006556100b56040610d28565b600e81526d484f52495a20466c657869626c6560901b6020820152600254906100dc610d08565b9180835260208301908282526107d06040850152610fa060608501525f60808501526103e860a085015264174876e80060c08501525f60e08501525f6101008501525f6101208501526509184e72a0006101408501525f610160850152600161018085015260016101a0850152426101c08501525f52600860205260405f2090835182555192835160018060401b038111610a70576001830154600181811c91168015610ce7575b6020821014610a5257601f8111610c9f575b506020601f8211600114610c2d5791816101c092600d9460a0985f92610c22575b50508160011b915f199060031b1c19161760018501555b60408101516002850155606081015160038501556080810151600485015585810151600585015560c0810151600685015560e0810151600785015561010081015160088501556101208101516009850155610140810151600a850155610160810151600b850155600c84016101808201511515815460ff61ff006101a0860151151560081b1692169061ffff19161717905501519101555f51602061339f5f395f51905f526020600254938493604051928391608083528051918291826080860152018484015e5f82820184018190526107d06020840152610fa060408401526060830152601f01601f19168101030190a25f198114610979576001016002556102d86040610d28565b6011815270484f52495a2033302d446179204c6f636b60781b602082015260025490610302610d08565b918083526020830190828252610bb860408501526117706060850152601e60808501526107d060a085015264746a52880060c08501525f60e08501525f6101008501525f61012085015265048c273950006101408501526101f4610160850152600161018085015260016101a0850152426101c08501525f52600860205260405f2090835182555192835160018060401b038111610a70576001830154600181811c91168015610c18575b6020821014610a5257601f8111610bd0575b506020601f8211600114610b5e5791816101c092600d9460a0985f92610b53575b50508160011b915f199060031b1c19161760018501555b60408101516002850155606081015160038501556080810151600485015585810151600585015560c0810151600685015560e0810151600785015561010081015160088501556101208101516009850155610140810151600a850155610160810151600b850155600c84016101808201511515815460ff61ff006101a0860151151560081b1692169061ffff19161717905501519101555f51602061339f5f395f51905f526020600254938493604051928391608083528051918291826080860152018484015e5f828201840152610bb860208301526117706040830152601e6060830152601f01601f19168101030190a25f198114610979576001016002556105016040610d28565b6011815270484f52495a2039302d446179204c6f636b60781b60208201526002549061052b610d08565b918083526020830190828252610fa06040850152611f406060850152605a6080850152610dac60a085015264e8d4a5100060c08501525f60e08501525f6101008501525f6101208501526502ba7def30006101408501526103e8610160850152600161018085015260016101a0850152426101c08501525f52600860205260405f2090835182555192835160018060401b038111610a70576001830154600181811c91168015610b49575b6020821014610a5257601f8111610b01575b506020601f8211600114610a8f5791816101c092600d9460a0985f92610a84575b50508160011b915f199060031b1c19161760018501555b60408101516002850155606081015160038501556080810151600485015585810151600585015560c0810151600685015560e0810151600785015561010081015160088501556101208101516009850155610140810151600a850155610160810151600b850155600c84016101808201511515815460ff61ff006101a0860151151560081b1692169061ffff19161717905501519101555f51602061339f5f395f51905f526020600254938493604051928391608083528051918291826080860152018484015e5f828201840152610fa06020830152611f406040830152605a6060830152601f01601f19168101030190a25f1981146109795760010160025561072a6040610d28565b600e81526d484f52495a20564950204c6f636b60901b602082015260025490610751610d08565b9180835260208301908282526113886040850152612710606085015260b4608085015261138860a085015265048c2739500060c0850152655af3107a400060e08501525f6101008501525f61012085015264e8d4a510006101408501526105dc610160850152600161018085015260016101a0850152426101c08501525f52600860205260405f2090835182555192835160018060401b038111610a70576001830154600181811c91168015610a66575b6020821014610a5257601f8111610a0a575b506020601f82116001146109985791816101c092600d9460a0985f9261098d575b50508160011b915f199060031b1c19161760018501555b60408101516002850155606081015160038501556080810151600485015585810151600585015560c0810151600685015560e0810151600785015561010081015160088501556101208101516009850155610140810151600a850155610160810151600b850155600c84016101808201511515815460ff61ff006101a0860151151560081b1692169061ffff19161717905501519101555f51602061339f5f395f51905f526020600254938493604051928391608083528051918291826080860152018484015e5f8282018401526113886020830152612710604083015260b46060830152601f01601f19168101030190a25f198114610979576001016002556040516126519081610d4e8239608051818181610d7d015281816112dc015281816117ea0152611aeb0152f35b634e487b7160e01b5f52601160045260245ffd5b015190505f80610835565b600184015f52805f20955f5b601f19841681106109f257508260a097600d95936001936101c096601f198116106109da575b505050811b01600185015561084c565b01515f1960f88460031b161c191690555f80806109ca565b828201518855600190970196602092830192016109a4565b600184015f5260205f20601f830160051c81019160208410610a48575b601f0160051c01905b818110610a3d5750610814565b5f8155600101610a30565b9091508190610a27565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610802565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610609565b600184015f52805f20955f5b601f1984168110610ae957508260a097600d95936001936101c096601f19811610610ad1575b505050811b016001850155610620565b01515f1960f88460031b161c191690555f8080610ac1565b82820151885560019097019660209283019201610a9b565b600184015f5260205f20601f830160051c81019160208410610b3f575b601f0160051c01905b818110610b3457506105e8565b5f8155600101610b27565b9091508190610b1e565b90607f16906105d6565b015190505f806103e0565b600184015f52805f20955f5b601f1984168110610bb857508260a097600d95936001936101c096601f19811610610ba0575b505050811b0160018501556103f7565b01515f1960f88460031b161c191690555f8080610b90565b82820151885560019097019660209283019201610b6a565b600184015f5260205f20601f830160051c81019160208410610c0e575b601f0160051c01905b818110610c0357506103bf565b5f8155600101610bf6565b9091508190610bed565b90607f16906103ad565b015190505f806101b7565b600184015f52805f20955f5b601f1984168110610c8757508260a097600d95936001936101c096601f19811610610c6f575b505050811b0160018501556101ce565b01515f1960f88460031b161c191690555f8080610c5f565b82820151885560019097019660209283019201610c39565b600184015f5260205f20601f830160051c81019160208410610cdd575b601f0160051c01905b818110610cd25750610196565b5f8155600101610cc5565b9091508190610cbc565b90607f1690610184565b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b604051906101e082016001600160401b03811183821017610a7057604052565b6040519190601f01601f191682016001600160401b03811183821017610a705760405256fe60806040526004361015610011575f80fd5b5f3560e01c806308f2093514611b7c5780630962ef7914611a62578063098134821461198057806312cb961a1461192c57806318e561311461190f5780631b7c6b0c146118bb5780632e17de78146116f25780633ded182b146116d55780633f4ba83a1461167c578063453cd8b214611619578063561b24631461121e5780635c975abb146111f9578063656c579f1461104157806370274c5a14610ffd578063715018a614610fa2578063719de1ef14610f6a57806374f0314f14610f4d57806375506c9614610f30578063842e298114610e7c5780638456cb5914610e1b57806386e93212146106335780638da5cb5b14610df357806395ccea6714610dac5780639ad0d32914610d68578063a988905914610d4b578063ac4afa3814610c5e578063b3e45ae214610aca578063b8764c3914610921578063c1dd6084146108ac578063c32449931461081b578063c517841c146107c3578063c6846ef8146107a7578063cb30d0c31461071d578063ce43f1d7146106ff578063d5a44f8614610675578063e1f1c4a714610659578063e52e0df814610633578063ec18154e14610616578063ee172546146105f9578063f2fde38b146105735763ff438c10146101dc575f80fd5b3461056f5761014036600319011261056f5760043567ffffffffffffffff811161056f573660238201121561056f57806004013567ffffffffffffffff811161055b5760405191610237601f8301601f191660200184611c27565b818352366024838301011161056f57815f92602460209301838601378301015260e435906101243580151580910361056f57610271612421565b6102816044356024351115611f23565b61028c831515611f6f565b600254906040519361029d85611c0a565b82855283602086015260243560408601526044356060860152606435608086015260843560a086015260a43560c086015260c43560e08601525f6101008601525f6101208601526101408501526101043561016085015260016101808501526101a0840152426101c08401525f52600860205260405f2082518155602083015192835167ffffffffffffffff811161055b5761033c6001840154611bb5565b601f8111610513575b506020601f821160011461049b5761046b94939282600d936101c09361048b995f92610490575b50508160011b915f199060031b1c19161760018501555b60408101516002850155606081015160038501556080810151600485015560a0810151600585015560c0810151600685015560e0810151600785015561010081015160088501556101208101516009850155610140810151600a850155610160810151600b85015561042b600c850161040f6101808401511515829060ff801983541691151516179055565b6101a0830151815461ff00191690151560081b61ff0016179055565b01519101557fde81d4925039abb132868b4297f958972e8fb0f6bd3992c8bccb157320ee79c5600254928392604051918291608083526080830190611ce9565b6024356020830152604435604083015260643560608301520390a2611ed4565b600255005b015190505f8061036c565b600184015f52805f20955f5b601f19841681106104fb57509260018361048b986101c09461046b999897600d97601f198116106104e3575b505050811b016001850155610383565b01515f1960f88460031b161c191690555f80806104d3565b828201518855600190970196602092830192016104a7565b600184015f5260205f20601f830160051c81019160208410610551575b601f0160051c01905b8181106105465750610345565b5f8155600101610539565b9091508190610530565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b3461056f57602036600319011261056f5761058c611b9f565b610594612421565b6001600160a01b031680156105e657600180546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b631e4fbdf760e01b5f525f60045260245ffd5b3461056f575f36600319011261056f576020600554604051908152f35b3461056f575f36600319011261056f576020600454604051908152f35b3461056f57602036600319011261056f5760206106516004356120d9565b604051908152f35b3461056f575f36600319011261056f5760206040516127108152f35b3461056f57602036600319011261056f576004355f52600a60205261012060405f2060ff815491600181015490600281015460038201546004830154906005840154926007600686015495015495604051988952602089015260408801526060870152608086015260a085015260c0840152818116151560e084015260081c161515610100820152f35b3461056f57602036600319011261056f576020610651600435611fca565b3461056f57604036600319011261056f576004357f1d65b87bab110c907d5cf47c6ec14e7330fe11560b094e311f788e60ee951be7604060243561075f612421565b835f526008602052610775825f20541515611ee2565b610780811515611f6f565b5f8481526008602090815290839020600a01805490839055835190815290810191909152a2005b3461056f575f36600319011261056f57602060405161016d8152f35b3461056f57604036600319011261056f576107dc611b9f565b6001600160a01b03165f9081526009602052604090208054602435919082101561056f5760209161080c91611d0d565b90549060031b1c604051908152f35b3461056f57606036600319011261056f576004355f5160206125fc5f395f51905f52606060443560243561084d612421565b845f52600860205261086460405f20541515611ee2565b61087082821115611f23565b5f85815260086020908152604080832060028101805490869055600382019690965542600d9091015580519485529084019290925290820152a2005b3461056f575f36600319011261056f575f6001600254905b8181106108ed576080836004549060055460405192835260208301525f60408301526060820152f35b805f52600860205260ff600c60405f2001541661090d575b6001016108c4565b91610919600191611ed4565b929050610905565b3461056f57602036600319011261056f57600435805f52600860205260405f20906040519161094f83611c0a565b8054835261095f60018201611c49565b9160208401928352600282015493604081019485526003830154926060820193845260048101546080830152600581015460a0830152600681015460c0830152600781015460e083015260088101549261010083019384526009820154610120840152610a1a600a830154916101408501928352600b840154610160860152600d600c8501549460ff6101808801968181161515885260081c1615156101a088015201546101c0860152610a1585511515611ee2565b6120d9565b815115610ac45784516127108102908082046127101490151715610ab0578251610a4391611ea9565b612710811115610aaa5750612710935b51965197519551945191519251151594610a81604051998a998a5261012060208b01526101208a0190611ce9565b9660408901526060880152608087015260a086015260c085015260e08401526101008301520390f35b93610a53565b634e487b7160e01b5f52601160045260245ffd5b5f610a43565b3461056f57602036600319011261056f57600435805f52600860205260405f20610af681541515611ee2565b600d810190610b09825460075490611e89565b4210610c20576002810190815492610b20856120d9565b809355429055835f91600a8101549081610b99575b5050604080519485526020850184905284018290527f74ccdf2825e4964888730b0e71b43a827b6475a3faaa098844ced1df59b5f7cc935f5160206125fc5f395f51905f5290606090a26040805192835260208301919091524290820152606090a2005b90949250600891500154926127108402938085046127101490151715610ab057610be585917f74ccdf2825e4964888730b0e71b43a827b6475a3faaa098844ced1df59b5f7cc95611ea9565b83612710821115610c0c575f5160206125fc5f395f51905f5291506127105b939550610b35565b5f5160206125fc5f395f51905f5291610c04565b60405162461bcd60e51b8152602060048201526016602482015275546f6f20736f6f6e20746f207570646174652041505960501b6044820152606490fd5b3461056f57602036600319011261056f576004355f52600860205260405f20805460018201610c8c90611c49565b906002830154926003810154906004810154600582015460068301546007840154600885015490600986015492600a87015494600b88015496600c89015498600d0154996040519d8e9d8e9d8e528d602081016101e090526101e001610cf191611ce9565b9c6040015260608d015260808c015260a08b015260c08a015260e089015261010088015261012087015261014086015261016085015260ff8116151561018085015260081c60ff1615156101a08401526101c08301520390f35b3461056f575f36600319011261056f576020600654604051908152f35b3461056f575f36600319011261056f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461056f57604036600319011261056f57610df1610dc8611b9f565b610dd0612421565b610dd861254c565b600154602435916001600160a01b039182169116612328565b005b3461056f575f36600319011261056f576001546040516001600160a01b039091168152602090f35b3461056f575f36600319011261056f57610e33612421565b610e3b612505565b6001805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a1005b3461056f57602036600319011261056f576001600160a01b03610e9d611b9f565b165f52600960205260405f20604051806020835491828152019081935f5260205f20905f5b818110610f1a5750505081610ed8910382611c27565b604051918291602083019060208452518091526040830191905f5b818110610f01575050500390f35b8251845285945060209384019390920191600101610ef3565b8254845260209093019260019283019201610ec2565b3461056f575f36600319011261056f576020600354604051908152f35b3461056f575f36600319011261056f576020604051620151808152f35b3461056f57602036600319011261056f576001600160a01b03610f8b611b9f565b165f52600b602052602060405f2054604051908152f35b3461056f575f36600319011261056f57610fba612421565b600180546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461056f57602036600319011261056f57600435805f52600860205261102860405f20541515611ee2565b5f5260086020526020600a60405f200154604051908152f35b3461056f57602036600319011261056f5760043561105d612217565b805f52600a60205261107b60ff600760405f20015460081c16611e09565b61108d611088338361226b565b611e4b565b805f52600a60205260405f20545f52600860205260ff600c60405f20015460081c16156111b4576110bd816122fd565b805f52600a60205260405f2060058101908154918215611176575f90600183016110e8858254611e89565b905555426004820155335f52600b60205260405f20611108838254611e89565b9055545f526008602052600860405f2001611124828254611e89565b905561113281600454611e89565b60045561114181600554611e89565b6005556040519081527fe1e70db006000f1913537da7c12f017b7ed0396160d11b49a2b48fb7087c5da260203392a360015f55005b60405162461bcd60e51b8152602060048201526016602482015275139bc81c995dd85c991cc81d1bc818dbdb5c1bdd5b9960521b6044820152606490fd5b60405162461bcd60e51b815260206004820152601e60248201527f506f6f6c20646f65736e277420616c6c6f7720636f6d706f756e64696e6700006044820152606490fd5b3461056f575f36600319011261056f57602060ff60015460a01c166040519015158152f35b3461056f57606036600319011261056f57600435602435604435801515810361056f57611249612217565b611251612505565b81156115d457825f52600860205260ff600c60405f200154161561159a57825f526008602052600660405f200154821061155557825f526008602052600760405f2001546114f9575b825f52600860205260405f206113006040516323b872dd60e01b6020820152336024820152306044820152846064820152606481526112da608482611c27565b7f0000000000000000000000000000000000000000000000000000000000000000612598565b600481015462015180810290808204620151801490151715610ab0576113296113f39142611e89565b92611333866120d9565b93816114e7575b6113dc600760405161134b81611bed565b89815260208101938985526040820190428252606083019081526080830142815260a08401915f835260c08501938c855260e086019915158a5261010086019860018a526003545f52600a60205260405f20965187555160018701555160028601555160038501555160048401555160058301555160068201550192511515839060ff801983541691151516179055565b51815461ff00191690151560081b61ff0016179055565b335f52600960205260405f2091600354938354916801000000000000000083101561055b576114ca9561143184600d9760016114bc97018155611d0d565b819291549060031b91821b915f19901b1916179055335f52600b60205260405f2061145d838254611e89565b90556008840161146e838254611e89565b905561147c82600454611e89565b6004558660035492839260405191825260208201527f9cfd25589d1eb8ad71e342a86a8524e83522e3936c0803048c08f6d9ad974f4060403392a4611ed4565b600355015460075490611e89565b4210156114d8575b60015f55005b6114e190612448565b806114d2565b600c84015460081c60ff16915061133a565b825f526008602052600760405f20015482111561129a5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e742065786365656473206d6178696d756d207374616b65000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601a60248201527f416d6f756e742062656c6f77206d696e696d756d207374616b650000000000006044820152606490fd5b60405162461bcd60e51b8152602060048201526012602482015271506f6f6c206973206e6f742061637469766560701b6044820152606490fd5b60405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606490fd5b3461056f57602036600319011261056f57600435611635612421565b603c811061164257600755005b60405162461bcd60e51b8152602060048201526012602482015271125b9d195c9d985b081d1bdbc81cda1bdc9d60721b6044820152606490fd5b3461056f575f36600319011261056f57611694612421565b61169c61254c565b60ff60a01b19600154166001557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b3461056f575f36600319011261056f576020600754604051908152f35b3461056f57602036600319011261056f5760043561170e612217565b805f52600a60205261172c60ff600760405f20015460081c16611e09565b611739611088338361226b565b805f52600a602052611859600d60405f209283545f52600860205260405f2090611762816122fd565b600185015460058601545f9060038801544210806118ae575b61188f575b806117da61179a846117956117e59588611e89565b611ec7565b9460078b0161ff00198154169055335f52600b60205260405f206117bf828254611ec7565b9055600888016117d0828254611ec7565b9055600454611ec7565b600455600554611e89565b6005557f0000000000000000000000000000000000000000000000000000000000000000611814833383612328565b8180611870575b505060405191825260208201527f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de0060403392a3015460075490611e89565b4210156118665760015f55005b6114e19054612448565b600154611888926001600160a01b0390911690612328565b878161181b565b90506117e56127106118a5600b87015485611e96565b04919050611780565b50600b850154151561177b565b3461056f57602036600319011261056f577f144d30c57e277deb14c5d686b95cf61cfea257d9d551cef4288b2f7db418f87a60406004356118fa612421565b600654908060065582519182526020820152a1005b3461056f575f36600319011261056f576020600254604051908152f35b3461056f575f36600319011261056f57611944612421565b60015b600254811015610df157806001915f52600860205260ff600c60405f20015416611972575b01611947565b61197b81612448565b61196c565b3461056f57602036600319011261056f57610100600435805f52600a60205260405f20604051906119b082611bed565b8054825260018101549260208301938452600282015492604081019384526003830154926060820193845260048101546080830152600581015460a0830152600760068201549160c08401928352015493611a2460e084019460ff87161515865260ff8a86019760081c1615158752612368565b92519651955190519151935115159451151595604051978852602088015260408701526060860152608085015260a084015260c083015260e0820152f35b3461056f57602036600319011261056f57600435611a7e612217565b805f52600a602052611a9c60ff600760405f20015460081c16611e09565b611aa9611088338361226b565b611ab2816122fd565b805f52600a60205260405f2060058101908154918215611b41575f9055600442910155611ae181600554611e89565b600555611b0f81337f0000000000000000000000000000000000000000000000000000000000000000612328565b6040519081527fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e32560203392a360015f55005b60405162461bcd60e51b81526020600482015260136024820152724e6f207265776172647320746f20636c61696d60681b6044820152606490fd5b3461056f57602036600319011261056f576020610651611b9a611b9f565b611d36565b600435906001600160a01b038216820361056f57565b90600182811c92168015611be3575b6020831014611bcf57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611bc4565b610120810190811067ffffffffffffffff82111761055b57604052565b6101e0810190811067ffffffffffffffff82111761055b57604052565b90601f8019910116810190811067ffffffffffffffff82111761055b57604052565b9060405191825f825492611c5c84611bb5565b8084529360018116908115611cc75750600114611c83575b50611c8192500383611c27565b565b90505f9291925260205f20905f915b818310611cab575050906020611c81928201015f611c74565b6020919350806001915483858901015201910190918492611c92565b905060209250611c8194915060ff191682840152151560051b8201015f611c74565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b8054821015611d22575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03165f908152600b6020526040902054655af3107a4000811015611e0257652d79883d2000811015611dfb576516bcc41e9000811015611df4576509184e72a000811015611ded5765048c27395000811015611de657650246139ca800811015611ddf5764e8d4a51000811015611dd85764746a528800811015611dd15764174876e8001115611dcb575f90565b6101f490565b506103e890565b506105dc90565b506107d090565b506109c490565b50610bb890565b50610dac90565b50610fa090565b5061138890565b15611e1057565b60405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606490fd5b15611e5257565b60405162461bcd60e51b815260206004820152600f60248201526e2737ba1039ba30b5b29037bbb732b960891b6044820152606490fd5b91908201809211610ab057565b81810292918115918404141715610ab057565b8115611eb3570490565b634e487b7160e01b5f52601260045260245ffd5b91908203918211610ab057565b5f198114610ab05760010190565b15611ee957565b60405162461bcd60e51b8152602060048201526012602482015271141bdbdb08191bd95cdb89dd08195e1a5cdd60721b6044820152606490fd5b15611f2a57565b60405162461bcd60e51b815260206004820152601e60248201527f42617365204150592063616e6e6f7420657863656564206d61782041505900006044820152606490fd5b15611f7657565b60405162461bcd60e51b815260206004820152602660248201527f546172676574206361706163697479206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608490fd5b5f52600860205260405f20604051611fe181611c0a565b81548152611ff160018301611c49565b6020820152600282015460408201526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015261209760088301549161010081019283526009840154610120820152600d600a850154946101408301958652600b81015461016084015260ff600c820154818116151561018086015260081c1615156101a084015201546101c0820152511515611ee2565b8151156120d357516127108102908082046127101490151715610ab0576120bf915190611ea9565b6127108111156120d0575061271090565b90565b50505f90565b5f52600860205260405f20604051906120f182611c0a565b8054825261210160018201611c49565b6020830152600281015490604083019182526003810154926060810193845260048201546080820152600582015460a0820152600682015460c0820152600782015460e08201526121ad60088301549161010081019283526009840154610120820152600d600a850154946101408301958652600b81015461016084015260ff600c820154818116151561018086015260081c1615156101a084015201546101c0820152511515611ee2565b81511561220f57516127108102908082046127101490151715610ab0576120d0936121e06121fd92612710945190611ea9565b8381111561220557506121f883915b51855190611ec7565b611e96565b049051611e89565b6121f890916121ef565b505090505190565b60025f54146122265760025f55565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9060018060a01b03165f52600960205260405f2090604051808360208295549384815201905f5260205f20925f5b8181106122e45750506122ae92500383611c27565b8151915f5b838110156122dc578260208260051b84010151146122d3576001016122b3565b50505050600190565b505050505f90565b8454835260019485019487945060209093019201612299565b61230681612368565b815f52600a602052600560405f2001555f52600a60205242600460405f200155565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152611c8191612363606483611c27565b612598565b5f52600a60205260405f2060405161237f81611bed565b815481526001820154916020820192835260028101546040830152600381015460608301526004810154806080840152600582015460a084019381855260ff600760068601549560c084019687520154818116151560e084015260081c161590610100821591015261241957506120d0936127106124136301e13380946124096121fd9542611ec7565b9351905190611e96565b04611e96565b935050505090565b6001546001600160a01b0316330361243557565b63118cdaa760e01b5f523360045260245ffd5b805f52600860205260405f20600281018054612463846120d9565b80925542600d8401555f92600a81015490816124b0575b50506124ab5f5160206125fc5f395f51905f5293604051938493846040919493926060820195825260208201520152565b0390a2565b600891945001546127108102908082046127101490151715610ab0575f5160206125fc5f395f51905f52936124e491611ea9565b6127108111156124fc57506124ab6127105b9361247a565b6124ab906124f6565b60ff60015460a01c1661251457565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b60ff60015460a01c161561255c57565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b905f602091828151910182855af1156125f0575f513d6125e757506001600160a01b0381163b155b6125c75750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b600114156125c0565b6040513d5f823e3d90fdfea43ac4b951da9529ea64ee810c905f71b472ccae5be38a0a1a3bf45010db51faa264697066735822122030dc0b4ce874170944739d823c5df867076cfc1669f00e8ed0a935b028804c8964736f6c634300081e0033de81d4925039abb132868b4297f958972e8fb0f6bd3992c8bccb157320ee79c5000000000000000000000000149af500734056b98572b66e6c771e57408e12e400000000000000000000000000000000000000000000000000000006610103f2