39 txs
588 calls
constructor
constructor(address _factory, address _usdc, address _weth, address _aqtisToken)
functions
aqtisToken
viewfunction aqtisToken() view returns (address)
autoCompound
viewfunction autoCompound(address, address) view returns (bool)
baseApyQ64
viewfunction baseApyQ64(address) view returns (uint256)
bonusApyQ64
viewfunction bonusApyQ64(address) view returns (uint256)
claimCooldown
viewfunction claimCooldown() view returns (uint256)
delegatedRewardsReceivers
viewfunction delegatedRewardsReceivers(address, address) view returns (address)
estimateValueUSDC
viewfunction estimateValueUSDC(address lst, uint256 amount) view returns (uint256)
factory
viewfunction factory() view returns (address)
getLSTs
viewfunction getLSTs() view returns (address[])
getRewardsFor
viewfunction getRewardsFor(address lst, address user) view returns (tuple)
isAutoCompounding
viewfunction isAutoCompounding(address lst, address user) view returns (bool)
lastClaimTime
viewfunction lastClaimTime(address, address) view returns (uint256)
owner
viewfunction owner() view returns (address)
Q64
viewfunction Q64() view returns (uint256)
usdc
viewfunction usdc() view returns (address)
usdcPairs
viewfunction usdcPairs(address) view returns (address)
weth
viewfunction weth() view returns (address)
wethPairs
viewfunction wethPairs(address) view returns (address)
addLST
nonpayablefunction addLST(address lst)
claimRewards
nonpayablefunction claimRewards(address lst)
claimRewardsFor
nonpayablefunction claimRewardsFor(address lst, address user)
delegateRewards
nonpayablefunction delegateRewards(address lst, address receiver)
removeLST
nonpayablefunction removeLST(address lst)
renounceOwnership
nonpayablefunction renounceOwnership()
setAutoCompound
nonpayablefunction setAutoCompound(address lst, bool compound)
setBaseApyQ64
nonpayablefunction setBaseApyQ64(address lst, uint256 apy)
setBonusApyQ64
nonpayablefunction setBonusApyQ64(address lst, uint256 apy)
setClaimCooldown
nonpayablefunction setClaimCooldown(uint256 cooldown)
setMinOutFractionQ64
nonpayablefunction setMinOutFractionQ64(uint256 fraction)
setTimeWeightedAveragePeriod
nonpayablefunction setTimeWeightedAveragePeriod(uint24 period)
setUsdcPair
nonpayablefunction setUsdcPair(address lst, address pair)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes _data)
updateFactory
nonpayablefunction updateFactory(address _factory)
withdrawERC20
nonpayablefunction withdrawERC20(address token, uint256 amount)
withdrawETH
nonpayablefunction withdrawETH(uint256 amount)
events
AutoCompoundClaimed
event AutoCompoundClaimed(address indexed lst, address indexed user, address quoteToken, uint256 amount, uint256 quoteAmount)
AutocompoundSet
event AutocompoundSet(address indexed lst, address indexed user, bool compound)
ClaimCooldownSet
event ClaimCooldownSet(uint256 oldCooldown, uint256 newCooldown)
FactoryUpdated
event FactoryUpdated(address oldFactory, address newFactory)
LSTAdded
event LSTAdded(address indexed lst)
LSTBaseMultiplierUpdated
event LSTBaseMultiplierUpdated(address indexed lst, uint256 newBaseMultiplier, uint256 oldBaseMultiplier)
LSTBonusMultiplierUpdated
event LSTBonusMultiplierUpdated(address indexed lst, uint256 newBonusMultiplier, uint256 oldBonusMultiplier)
LSTRemoved
event LSTRemoved(address indexed lst)
LSTUsdcPairSet
event LSTUsdcPairSet(address indexed lst, address pair)
MinOutFractionSet
event MinOutFractionSet(uint256 oldFraction, uint256 newFraction)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RewardsClaimed
event RewardsClaimed(address indexed lst, address indexed user, address token, uint256 amount)
RewardsDelegated
event RewardsDelegated(address indexed lst, address indexed user, address receiver)
SwapExecuted
event SwapExecuted(address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut)
TimeWeightedAveragePeriodSet
event TimeWeightedAveragePeriodSet(uint24 oldPeriod, uint24 newPeriod)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
T
error T()
creation bytecode
0x60e06040526000805462ffffff60a01b191660e160a31b17905560646200003168010000000000000000606162000140565b6200003d91906200016c565b6001553480156200004d57600080fd5b50604051620040b1380380620040b18339810160408190526200007091620001ac565b6001600160a01b0383811660805282811660a052600080546001600160a01b03191691861691909117905560016004553380620000c757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000d281620000ee565b506001600160a01b031660c052505061a8c06006555062000209565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80820281158282048414176200016657634e487b7160e01b600052601160045260246000fd5b92915050565b6000826200018a57634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620001a757600080fd5b919050565b60008060008060808587031215620001c357600080fd5b620001ce856200018f565b9350620001de602086016200018f565b9250620001ee604086016200018f565b9150620001fe606086016200018f565b905092959194509250565b60805160a05160c051613e166200029b6000396000818161077d01526119c00152600081816104060152818161135601526134fd0152600081816103d201528181611330015281816113ce0152818161146a015281816122ae0152818161232f01528181612364015281816124d50152818161250a01528181612bae01528181612c6e01526134d70152613e166000f3fe6080604052600436106102535760003560e01c806385d6882a11610138578063be0dcf17116100b0578063ef5cfb8c1161007f578063f2fde38b11610064578063f2fde38b146107df578063fa461e33146107ff578063fdea36571461081f57600080fd5b8063ef5cfb8c1461079f578063f14210a6146107bf57600080fd5b8063be0dcf17146106f5578063c45a01551461072b578063d9f165dc1461074b578063e891a8b41461076b57600080fd5b80639be2665711610107578063a1663340116100ec578063a166334014610662578063a1db978214610682578063b9c0c6c6146106a257600080fd5b80639be26657146105f45780639db81beb1461063557600080fd5b806385d6882a1461050a5780638da5cb5b1461055557806391920f30146105735780639ac29ced146105ab57600080fd5b80633e413bee116101cb57806359c9eb901161019a578063607945b71161017f578063607945b7146104b557806362839552146104d5578063715018a6146104f557600080fd5b806359c9eb9014610475578063601c26691461049557600080fd5b80633e413bee146103c05780633fc8cef3146103f457806340b2fbc41461042857806358efe94f1461044857600080fd5b80632137ed1411610222578063298e276911610207578063298e27691461035a57806333fca187146103885780633aa36ad7146103a057600080fd5b80632137ed141461031a578063217a371e1461033a57600080fd5b806303ce30981461025f57806305139e981461028157806308437d15146102a1578063105f0fe8146102cc57600080fd5b3661025a57005b600080fd5b34801561026b57600080fd5b5061027f61027a366004613606565b610835565b005b34801561028d57600080fd5b5061027f61029c366004613623565b610880565b3480156102ad57600080fd5b506102b661093e565b6040516102c3919061364f565b60405180910390f35b3480156102d857600080fd5b506103026102e7366004613606565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b34801561032657600080fd5b5061027f61033536600461369c565b61094f565b34801561034657600080fd5b5061027f6103553660046136d5565b610a1e565b34801561036657600080fd5b5061037a610375366004613623565b610aab565b6040519081526020016102c3565b34801561039457600080fd5b5061037a600160401b81565b3480156103ac57600080fd5b5061027f6103bb3660046136fa565b610ac2565b3480156103cc57600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b34801561040057600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b34801561043457600080fd5b5061027f610443366004613606565b610b0f565b34801561045457600080fd5b5061037a610463366004613606565b600c6020526000908152604090205481565b34801561048157600080fd5b5061027f6104903660046136fa565b610b5a565b3480156104a157600080fd5b5061027f6104b0366004613721565b610ba3565b3480156104c157600080fd5b5061027f6104d0366004613623565b610c58565b3480156104e157600080fd5b5061027f6104f036600461369c565b610d07565b34801561050157600080fd5b5061027f610dae565b34801561051657600080fd5b5061054561052536600461369c565b600b60209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016102c3565b34801561056157600080fd5b506005546001600160a01b0316610302565b34801561057f57600080fd5b5061037a61058e36600461369c565b600760209081526000928352604080842090915290825290205481565b3480156105b757600080fd5b506105456105c636600461369c565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b34801561060057600080fd5b5061030261060f36600461369c565b600a6020908152600092835260408084209091529082529020546001600160a01b031681565b34801561064157600080fd5b5061037a610650366004613606565b600d6020526000908152604090205481565b34801561066e57600080fd5b5061027f61067d36600461369c565b610dc2565b34801561068e57600080fd5b5061027f61069d366004613623565b610dd0565b3480156106ae57600080fd5b506106c26106bd36600461369c565b610dfe565b6040516102c391908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561070157600080fd5b50610302610710366004613606565b6002602052600090815260409020546001600160a01b031681565b34801561073757600080fd5b50600054610302906001600160a01b031681565b34801561075757600080fd5b5061027f610766366004613606565b610f6d565b34801561077757600080fd5b506103027f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ab57600080fd5b5061027f6107ba366004613606565b610fe7565b3480156107cb57600080fd5b5061027f6107da3660046136fa565b610ff1565b3480156107eb57600080fd5b5061027f6107fa366004613606565b611014565b34801561080b57600080fd5b5061027f61081a36600461374f565b611068565b34801561082b57600080fd5b5061037a60065481565b61083d6111d4565b61084860088261121a565b506040516001600160a01b038216907f329f3447748e4ad270a07142ee2263864137809fc0a98fb44f55439e1d16c2ee90600090a250565b6108886111d4565b8161089460088261122f565b6108dd5760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064015b60405180910390fd5b6001600160a01b0383166000818152600c6020908152604091829020805490869055825186815291820181905292917fde71c24561d5c843cf56dc4bd28fed3e36c1d8a4f56100c9fa168d4854d00d9a91015b60405180910390a250505050565b606061094a6008611251565b905090565b8161095b60088261122f565b61099f5760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064016108d4565b6001600160a01b038381166000818152600a602090815260408083203380855290835292819020805473ffffffffffffffffffffffffffffffffffffffff191695881695861790555193845290927f561c68e35ffbc9cea1da71b23152e341f7a0ff864112d43bb3906dced0dea81c91015b60405180910390a3505050565b610a266111d4565b6000546040805162ffffff600160a01b9093048316815291831660208301527f0a8864eca1731d51a19ac12612cfd3db634f61cc369445e91f1e0d6a07a06b76910160405180910390a1600080547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16600160a01b62ffffff84160217905550565b50565b6000610ab983836001611265565b90505b92915050565b610aca6111d4565b60015460408051918252602082018390527fba8db96484fc046829d5e94f94fcb9e53ea98593599ca62206c27ef6cfdb5991910160405180910390a1610aa881600155565b610b176111d4565b610b226008826113b7565b506040516001600160a01b038216907fa030892515ee18fc982528189f12296c35762d55115b61da90208fc240b39d5b90600090a250565b610b626111d4565b60065460408051918252602082018390527f1643929f15226556503afde8215b1313ee727b02e0004d15fa4747280432d574910160405180910390a1600655565b81610baf60088261122f565b610bf35760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064016108d4565b6001600160a01b0383166000818152600b602090815260408083203380855290835292819020805460ff191687151590811790915590519081529192917fada064ab477323b74c2557ddbf7e4df6ceaebf34a3f84ae06f583698ccd633249101610a11565b610c606111d4565b81610c6c60088261122f565b610cb05760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064016108d4565b6001600160a01b0383166000818152600d6020908152604091829020805490869055825186815291820181905292917fcd61d0895419bab6c1e587baebb6a1dff1ed825903ae7170b7d26a21722a86a29101610930565b610d0f6111d4565b81610d1b60088261122f565b610d5f5760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064016108d4565b610d6983836113cc565b6040516001600160a01b0383811682528416907f41658f019ba6155cd8e4b6c83ef539b04bb10902382940ad9b377e1bf04e53319060200160405180910390a2505050565b610db66111d4565b610dc060006116c5565b565b610dcc8282611724565b5050565b610dd86111d4565b610dcc610ded6005546001600160a01b031690565b6001600160a01b0384169083611a8b565b610e296040518060800160405280600081526020016000815260200160008152602001600081525090565b6040516311305c1f60e11b81526001600160a01b03838116600483015260009190851690632260b83e90602401608060405180830381865afa158015610e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e979190613816565b6001600160a01b0385166000908152600c6020526040812054919250819003610ec15750600160401b5b6001600160a01b0385166000908152600d602052604081205490819003610ee95750600160401b5b825115610f10578251600160401b90610f03908390613892565b610f0d91906138bf565b83525b606083015115610f3f57600160401b818460600151610f2f9190613892565b610f3991906138bf565b60608401525b600160401b828460400151610f549190613892565b610f5e91906138bf565b60408401525090949350505050565b610f756111d4565b600054604080516001600160a01b03928316815291831660208301527f333c7678baf16017cf31e1d2f90143a62aab01a67a0807f6836a4304ceabb555910160405180910390a16000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550565b610aa88133611724565b610ff96111d4565b610aa861100e6005546001600160a01b031690565b82611af7565b61101c6111d4565b6001600160a01b03811661105f576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016108d4565b610aa8816116c5565b6000611076828401846138d3565b80516001600160a01b03908116600090815260036020526040902054919250163314806110be575080516001600160a01b039081166000908152600260205260409020541633145b61110a5760405162461bcd60e51b815260206004820152601760248201527f4c5354537761703a20496e76616c69642073656e64657200000000000000000060448201526064016108d4565b8051602082015160008080891361113657836001600160a01b0316836001600160a01b0316108861114d565b826001600160a01b0316846001600160a01b031610895b9150915084604001518111156111a55760405162461bcd60e51b815260206004820152601a60248201527f4c5354537761703a204578636565646564206d6178206d696e7400000000000060448201526064016108d4565b81156111bb576111b6843383611b8e565b6111c9565b8293506111c9843383611b8e565b505050505050505050565b6005546001600160a01b03163314610dc0576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016108d4565b6000610ab9836001600160a01b038416611c0c565b6001600160a01b03811660009081526001830160205260408120541515610ab9565b6060600061125e83611c5b565b9392505050565b6000808083600181111561127b5761127b61393e565b146112a0576001600160a01b03808616600090815260036020526040902054166112bc565b6001600160a01b03808616600090815260026020526040902054165b90506001600160a01b0381166113145760405162461bcd60e51b815260206004820152601760248201527f4c5354537761703a2050616972206e6f7420666f756e6400000000000000000060448201526064016108d4565b6000808460018111156113295761132961393e565b14611354577f0000000000000000000000000000000000000000000000000000000000000000611376565b7f00000000000000000000000000000000000000000000000000000000000000005b6000805491925090611395908490600160a01b900462ffffff16611cb7565b5090506113ac816113a588611f25565b848a611f7f565b979650505050505050565b6000610ab9836001600160a01b0384166120b5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611434573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114589190613954565b6001600160a01b031614806114ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f49190613954565b6001600160a01b0316145b61154b5760405162461bcd60e51b815260206004820152601560248201527f4c5354537761703a20496e76616c69642070616972000000000000000000000060448201526064016108d4565b816001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b79190613954565b6001600160a01b0316148061163e5750816001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190613954565b6001600160a01b0316145b61168a5760405162461bcd60e51b815260206004820152601560248201527f4c5354537761703a20496e76616c69642070616972000000000000000000000060448201526064016108d4565b6001600160a01b039182166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff191691909216179055565b600580546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61172c6121af565b8161173860088261122f565b61177c5760405162461bcd60e51b81526020600482015260156024820152741314d5081859191c995cdcc81b9bdd08199bdd5b99605a1b60448201526064016108d4565b6006546001600160a01b0380841660009081526007602090815260408083209388168352929052205442916117b091613971565b106117fd5760405162461bcd60e51b815260206004820181905260248201527f436c61696d5661756c743a20436f6f6c646f776e206e6f74206578706972656460448201526064016108d4565b6040516311305c1f60e11b81526001600160a01b03838116600483015260009190851690632260b83e90602401608060405180830381865afa158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190613816565b6001600160a01b038581166000908152600a602090815260408083208489168452909152902054919250849116156118c757506001600160a01b038085166000908152600a602090815260408083208785168452909152902054165b6001600160a01b0385166000908152600c6020526040812054908190036118ef5750600160401b5b6001600160a01b0386166000908152600d6020526040812054908190036119175750600160401b5b83511561194f576000600160401b8286600001516119359190613892565b61193f91906138bf565b905061194d888886846121f2565b505b60608401511561198a576000600160401b8286606001516119709190613892565b61197a91906138bf565b9050611988888886846123c8565b505b6000600160401b8386604001516119a19190613892565b6119ab91906138bf565b905080156119e7576119e76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168583611a8b565b6001600160a01b038781166000818152600760209081526040808320948d168084529490915290819020429055517f343959b4000000000000000000000000000000000000000000000000000000008152600481019190915263343959b490602401600060405180830381600087803b158015611a6357600080fd5b505af1158015611a77573d6000803e3d6000fd5b50505050505050505050610dcc6001600455565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052611af290849061256e565b505050565b80471015611b1a5760405163cd78605960e01b81523060048201526024016108d4565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5050905080611af257604051630a12f52160e11b815260040160405180910390fd5b6040517fa0712d68000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0384169063a0712d6890602401600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b50505050611af28383836125ea565b6000818152600183016020526040812054611c5357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610abc565b506000610abc565b606081600001805480602002602001604051908101604052809291908181526020018280548015611cab57602002820191906000526020600020905b815481526020019060010190808311611c97575b50505050509050919050565b6000808263ffffffff16600003611d105760405162461bcd60e51b815260206004820152600260248201527f425000000000000000000000000000000000000000000000000000000000000060448201526064016108d4565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110611d4557611d45613984565b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110611d7457611d74613984565b602002602001019063ffffffff16908163ffffffff1681525050600080866001600160a01b031663883bdbfd846040518263ffffffff1660e01b8152600401611dbd919061399a565b600060405180830381865afa158015611dda573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e029190810190613a74565b91509150600082600081518110611e1b57611e1b613984565b602002602001015183600181518110611e3657611e36613984565b6020026020010151611e489190613b36565b9050600082600081518110611e5f57611e5f613984565b602002602001015183600181518110611e7a57611e7a613984565b6020026020010151611e8c9190613b63565b9050611e9c600389900b83613b83565b965060008260060b128015611ec05750611eba600389900b83613bc1565b60060b15155b15611ed35786611ecf81613be3565b9750505b6000611eec6001600160a01b0363ffffffff8b16613c06565b9050611f1677ffffffffffffffffffffffffffffffffffffffff00000000602084901b1682613c49565b96505050505050509250929050565b60006fffffffffffffffffffffffffffffffff821115611f7b576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260806004820152602481018390526044016108d4565b5090565b600080611f8b8661271a565b90506fffffffffffffffffffffffffffffffff6001600160a01b0382161161202c576000611fc26001600160a01b03831680613892565b9050836001600160a01b0316856001600160a01b03161061200357611ffe600160c01b876fffffffffffffffffffffffffffffffff1683612a56565b612024565b61202481876fffffffffffffffffffffffffffffffff16600160c01b612a56565b9250506120ac565b60006120466001600160a01b03831680600160401b612a56565b9050836001600160a01b0316856001600160a01b03161061208757612082600160801b876fffffffffffffffffffffffffffffffff1683612a56565b6120a8565b6120a881876fffffffffffffffffffffffffffffffff16600160801b612a56565b9250505b50949350505050565b6000818152600183016020526040812054801561219e5760006120d9600183613c80565b85549091506000906120ed90600190613c80565b905080821461215257600086600001828154811061210d5761210d613984565b906000526020600020015490508087600001848154811061213057612130613984565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061216357612163613c93565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610abc565b6000915050610abc565b5092915050565b6002600454036121eb576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600455565b6001600160a01b038085166000908152600b602090815260408083209387168352929052205460ff161561231857600061222e85836001611265565b6040516349eea28f60e11b8152600481018290529091506001600160a01b038616906393dd451e90602401600060405180830381600087803b15801561227357600080fd5b505af1158015612287573d6000803e3d6000fd5b506122a0925050506001600160a01b0386168483611a8b565b604080516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116825260208201849052918101849052858216918716907f736d2f88def4652768bf132a41c0fda2907d2ff022fedd5d7eaf4cc12860b18f9060600160405180910390a3506123c2565b6123228482612b16565b6123566001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383611a8b565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682526020820184905285811692908716917f5637d7f962248a7f05a7ab69eec6446e31f3d0a299d997f135a65c62806e7891910160405180910390a35b50505050565b6001600160a01b038085166000908152600b602090815260408083209387168352929052205460ff16156124ba576040516349eea28f60e11b8152600481018290526001600160a01b038516906393dd451e90602401600060405180830381600087803b15801561243857600080fd5b505af115801561244c573d6000803e3d6000fd5b50612465925050506001600160a01b0385168383611a8b565b604080516001600160a01b0386811680835260208301859052928201849052851691907f736d2f88def4652768bf132a41c0fda2907d2ff022fedd5d7eaf4cc12860b18f9060600160405180910390a36123c2565b60006124c68583612bd4565b90506124fc6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168483611a8b565b604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682526020820184905286811692908816917f5637d7f962248a7f05a7ab69eec6446e31f3d0a299d997f135a65c62806e7891910160405180910390a35050505050565b60006125836001600160a01b03841683612c9c565b905080516000141580156125a85750808060200190518101906125a69190613ca9565b155b15611af2576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016108d4565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b179052915160009283929087169161265b9190613cea565b6000604051808303816000865af19150503d8060008114612698576040519150601f19603f3d011682016040523d82523d6000602084013e61269d565b606091505b50915091508180156126c75750805115806126c75750808060200190518101906126c79190613ca9565b6127135760405162461bcd60e51b815260206004820152600260248201527f535400000000000000000000000000000000000000000000000000000000000060448201526064016108d4565b5050505050565b60008060008360020b12612731578260020b612739565b8260020b6000035b9050620d89e8811115612778576040517f2bc80f3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160011660000361278f57600160801b6127a1565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156127d5576ffff97272373d413259a46990580e213a0260801c5b60048216156127f4576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612813576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612832576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612851576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612870576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561288f576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156128af576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156128cf576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156128ef576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561290f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561292f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561294f576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561296f576f70d869a156d2a1b890bb3df62baf32f70260801c5b61800082161561298f576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156129b0576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156129d0576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156129ef576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612a0c576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612a2d578060001981612a2957612a296138a9565b0490505b640100000000810615612a41576001612a44565b60005b60ff16602082901c0192505050919050565b6000806000612a658686612caa565b9150915060008480612a7957612a796138a9565b868809905082811115612a9457612a91600183613c80565b91505b612a9e8184613c80565b925081600003612abc57612ab285846138bf565b935050505061125e565b848210612b0b5760405162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f5700000000000060448201526064016108d4565b6113ac838387612cec565b6001600160a01b0382811660009081526003602052604090205416612b7d5760405162461bcd60e51b815260206004820152601760248201527f4c5354537761703a2050616972206e6f7420666f756e6400000000000000000060448201526064016108d4565b6000612b898383612e67565b6001600160a01b038085166000908152600360205260409020549192506123c29116847f00000000000000000000000000000000000000000000000000000000000000008486612e94565b6001600160a01b03828116600090815260036020526040812054909116612c3d5760405162461bcd60e51b815260206004820152601760248201527f4c5354537761703a2050616972206e6f7420666f756e6400000000000000000060448201526064016108d4565b6000612c49848461307d565b6001600160a01b03808616600090815260036020526040902054919250612c949116857f000000000000000000000000000000000000000000000000000000000000000086856130a1565b949350505050565b6060610ab983836000613301565b600080806000198486099050612cc08486613892565b9250612ccc8382613c80565b915082811015612ce457612ce1600183613c80565b91505b509250929050565b600080612cf883613394565b83169050612d0681846138bf565b9250612d1281866138bf565b945080612d1e82613394565b612d2891906138bf565b612d33906001613971565b612d3d9085613892565b612d479086613971565b94506001612d558185613892565b612d60906002613c80565b612d6a9082613892565b9050612d768185613892565b612d81906002613c80565b612d8b9082613892565b9050612d978185613892565b612da2906002613c80565b612dac9082613892565b9050612db88185613892565b612dc3906002613c80565b612dcd9082613892565b9050612dd98185613892565b612de4906002613c80565b612dee9082613892565b9050612dfa8185613892565b612e05906002613c80565b612e0f9082613892565b9050612e1b8185613892565b612e26906002613c80565b612e309082613892565b9050612e3c8185613892565b612e47906002613c80565b612e519082613892565b9050612e5d8187613892565b9695505050505050565b600080612e7684846001611265565b600154909150612e8a600160401b83613892565b612c9491906138bf565b600080846001600160a01b0316866001600160a01b0316109050600080886001600160a01b031663128acb083085612ecb896133ad565b612ed490613d06565b87612efd57612ef8600173fffd8963efd1fc6a506488495d951d5263988d26613b63565b612f0d565b612f0d6401000276a36001613d3e565b60405180606001604052808f6001600160a01b031681526020018e6001600160a01b031681526020018d815250604051602001612f74919081516001600160a01b039081168252602080840151909116908201526040918201519181019190915260600190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612fa3959493929190613d5e565b60408051808303816000875af1158015612fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe59190613dbc565b91509150600083612fff5781612ffa84613d06565b613009565b8261300983613d06565b909550905085811461301a57600080fd5b876001600160a01b0316896001600160a01b03167fdd36740e2a012d93061a0d99eaa9107860955de4e90027d3cf465a055026c4078784604051613068929190918252602082015260400190565b60405180910390a35050505095945050505050565b60008061308c8484600161340c565b9050600160401b81600154612e8a9190613892565b600080846001600160a01b0316866001600160a01b0316109050600080886001600160a01b031663128acb0830856130d88a6133ad565b87613101576130fc600173fffd8963efd1fc6a506488495d951d5263988d26613b63565b613111565b6131116401000276a36001613d3e565b60405180606001604052808f6001600160a01b031681526020018e6001600160a01b031681526020018d815250604051602001613178919081516001600160a01b039081168252602080840151909116908201526040918201519181019190915260600190565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016131a7959493929190613d5e565b60408051808303816000875af11580156131c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e99190613dbc565b9150915060008361320357816131fe84613d06565b61320d565b8261320d83613d06565b90975090508581116132875760405162461bcd60e51b815260206004820152602360248201527f4c5354537761703a20496e73756666696369656e74206f757470757420616d6f60448201527f756e74000000000000000000000000000000000000000000000000000000000060648201526084016108d4565b876001600160a01b0316896001600160a01b03167fdd36740e2a012d93061a0d99eaa9107860955de4e90027d3cf465a055026c40789846040516132d5929190918252602082015260400190565b60405180910390a3836132e857826132ea565b815b6132f390613d06565b9a9950505050505050505050565b6060814710156133265760405163cd78605960e01b81523060048201526024016108d4565b600080856001600160a01b031684866040516133429190613cea565b60006040518083038185875af1925050503d806000811461337f576040519150601f19603f3d011682016040523d82523d6000602084013e613384565b606091505b5091509150612e5d868383613553565b60006133a282600019613c80565b610abc906001613971565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611f7b576040517f24775e06000000000000000000000000000000000000000000000000000000008152600481018390526024016108d4565b600080808360018111156134225761342261393e565b14613447576001600160a01b0380861660009081526003602052604090205416613463565b6001600160a01b03808616600090815260026020526040902054165b90506001600160a01b0381166134bb5760405162461bcd60e51b815260206004820152601760248201527f4c5354537761703a2050616972206e6f7420666f756e6400000000000000000060448201526064016108d4565b6000808460018111156134d0576134d061393e565b146134fb577f000000000000000000000000000000000000000000000000000000000000000061351d565b7f00000000000000000000000000000000000000000000000000000000000000005b600080549192509061353c908490600160a01b900462ffffff16611cb7565b5090506113ac8161354c88611f25565b8985611f7f565b60608261356857613563826135c8565b61125e565b815115801561357f57506001600160a01b0384163b155b156135c1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016108d4565b508061125e565b8051156135d85780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b0381168114610aa857600080fd5b60006020828403121561361857600080fd5b813561125e816135f1565b6000806040838503121561363657600080fd5b8235613641816135f1565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b818110156136905783516001600160a01b03168352928401929184019160010161366b565b50909695505050505050565b600080604083850312156136af57600080fd5b82356136ba816135f1565b915060208301356136ca816135f1565b809150509250929050565b6000602082840312156136e757600080fd5b813562ffffff8116811461125e57600080fd5b60006020828403121561370c57600080fd5b5035919050565b8015158114610aa857600080fd5b6000806040838503121561373457600080fd5b823561373f816135f1565b915060208301356136ca81613713565b6000806000806060858703121561376557600080fd5b8435935060208501359250604085013567ffffffffffffffff8082111561378b57600080fd5b818701915087601f83011261379f57600080fd5b8135818111156137ae57600080fd5b8860208285010111156137c057600080fd5b95989497505060200194505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561380e5761380e6137cf565b604052919050565b60006080828403121561382857600080fd5b6040516080810181811067ffffffffffffffff8211171561384b5761384b6137cf565b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610abc57610abc61387c565b634e487b7160e01b600052601260045260246000fd5b6000826138ce576138ce6138a9565b500490565b6000606082840312156138e557600080fd5b6040516060810181811067ffffffffffffffff82111715613908576139086137cf565b6040528235613916816135f1565b81526020830135613926816135f1565b60208201526040928301359281019290925250919050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561396657600080fd5b815161125e816135f1565b80820180821115610abc57610abc61387c565b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b8181101561369057835163ffffffff16835292840192918401916001016139b6565b600067ffffffffffffffff8211156139f2576139f26137cf565b5060051b60200190565b600082601f830112613a0d57600080fd5b81516020613a22613a1d836139d8565b6137e5565b8083825260208201915060208460051b870101935086841115613a4457600080fd5b602086015b84811015613a69578051613a5c816135f1565b8352918301918301613a49565b509695505050505050565b60008060408385031215613a8757600080fd5b825167ffffffffffffffff80821115613a9f57600080fd5b818501915085601f830112613ab357600080fd5b81516020613ac3613a1d836139d8565b82815260059290921b84018101918181019089841115613ae257600080fd5b948201945b83861015613b105785518060060b8114613b015760008081fd5b82529482019490820190613ae7565b91880151919650909350505080821115613b2957600080fd5b50612ce1858286016139fc565b600682810b9082900b03667fffffffffffff198112667fffffffffffff82131715610abc57610abc61387c565b6001600160a01b038281168282160390808211156121a8576121a861387c565b60008160060b8360060b80613b9a57613b9a6138a9565b667fffffffffffff19821460001982141615613bb857613bb861387c565b90059392505050565b60008260060b80613bd457613bd46138a9565b808360060b0791505092915050565b60008160020b627fffff198103613bfc57613bfc61387c565b6000190192915050565b77ffffffffffffffffffffffffffffffffffffffffffffffff828116828216818102831692918115828504821417613c4057613c4061387c565b50505092915050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff80841680613c7457613c746138a9565b92169190910492915050565b81810381811115610abc57610abc61387c565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613cbb57600080fd5b815161125e81613713565b60005b83811015613ce1578181015183820152602001613cc9565b50506000910152565b60008251613cfc818460208701613cc6565b9190910192915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203613d3757613d3761387c565b5060000390565b6001600160a01b038181168382160190808211156121a8576121a861387c565b60006001600160a01b038088168352861515602084015285604084015280851660608401525060a0608083015282518060a0840152613da48160c0850160208701613cc6565b601f01601f19169190910160c0019695505050505050565b60008060408385031215613dcf57600080fd5b50508051602090910151909290915056fea264697066735822122053177b315daa582a42b6a764215f6c7b291fdf83b4273d45ba19f5ac18070a6364736f6c634300081700330000000000000000000000001f98431c8ad98523631ae4a59f267346ea31f984000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a9f94f19abf3089d535b1de2cc058a365ea716c7