0 txs
1 call
constructor
constructor()
functions
AERODROME_VOTER
viewfunction AERODROME_VOTER() view returns (address)
aerodromeFactory
viewfunction aerodromeFactory() view returns (address)
aerodromeRouter
viewfunction aerodromeRouter() view returns (address)
factory
viewfunction factory() view returns (address)
getAerodromePair
viewfunction getAerodromePair(address tokenA, address tokenB, bool stable) view returns (address)
getAerodromePools
viewfunction getAerodromePools(address tokenA, address tokenB) view returns (address stablePool, address volatilePool)
getAerodromeReserves
viewfunction getAerodromeReserves(address tokenA, address tokenB, bool stable) view returns (uint112 reserve0, uint112 reserve1)
getClaimableFees
viewfunction getClaimableFees(address tokenA, address tokenB, bool stable) view returns (uint256 lpBalance, uint256 claimable0Amount, uint256 claimable1Amount)
getClaimableRewards
viewfunction getClaimableRewards(address pool) view returns (uint256 amount, address rewardToken)
getEarnedRewards
viewfunction getEarnedRewards(address pool) view returns (uint256)
getGaugeBalance
viewfunction getGaugeBalance(address pool) view returns (uint256)
getGaugeForPool
viewfunction getGaugeForPool(address pool) view returns (address)
getRewardToken
viewfunction getRewardToken(address pool) view returns (address)
getTokenBalance
viewfunction getTokenBalance(address token) view returns (uint256)
hasStablePool
viewfunction hasStablePool(address tokenA, address tokenB) view returns (bool)
hasVolatilePool
viewfunction hasVolatilePool(address tokenA, address tokenB) view returns (bool)
isGaugeAlive
viewfunction isGaugeAlive(address gauge) view returns (bool)
isManager
viewfunction isManager(address _addr) view returns (bool)
managers
viewfunction managers(address) view returns (bool)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
user
viewfunction user() view returns (address)
addLiquidityAerodrome
nonpayablefunction addLiquidityAerodrome(address tokenA, address tokenB, bool stable, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, uint256 deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity)
addManager
nonpayablefunction addManager(address _manager)
claimFees
nonpayablefunction claimFees(address tokenA, address tokenB, bool stable) returns (uint256 amount0, uint256 amount1)
claimRewards
nonpayablefunction claimRewards(address pool) returns (bool)
depositTokens
nonpayablefunction depositTokens(address token, uint256 amount)
initialize
nonpayablefunction initialize(address _user, address _aerodromeRouter)
removeLiquidityAerodrome
nonpayablefunction removeLiquidityAerodrome(address tokenA, address tokenB, bool stable, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, uint256 deadline) returns (uint256 amountA, uint256 amountB)
removeManager
nonpayablefunction removeManager(address _manager)
renounceOwnership
nonpayablefunction renounceOwnership()
setAerodromeFactory
nonpayablefunction setAerodromeFactory(address _factory)
setAerodromeRouter
nonpayablefunction setAerodromeRouter(address _router)
stakeLPTokens
nonpayablefunction stakeLPTokens(address pool, uint256 amount) returns (bool)
swapExactTokensAerodrome
nonpayablefunction swapExactTokensAerodrome(uint256 amountIn, uint256 amountOutMin, address tokenFrom, address tokenTo, bool stable, uint256 deadline) returns (uint256[] amounts)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstakeLPTokens
nonpayablefunction unstakeLPTokens(address pool, uint256 amount) returns (bool)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawETH
nonpayablefunction withdrawETH(address _to, uint256 _amount)
withdrawTokens
nonpayablefunction withdrawTokens(address token, address to, uint256 amount)
events
AerodromeLiquidityAdded
event AerodromeLiquidityAdded(address indexed tokenA, address indexed tokenB, bool stable, uint256 amountA, uint256 amountB, uint256 liquidity)
AerodromeLiquidityRemoved
event AerodromeLiquidityRemoved(address indexed tokenA, address indexed tokenB, bool stable, uint256 amountA, uint256 amountB, uint256 liquidity)
AerodromeSwapped
event AerodromeSwapped(address indexed tokenFrom, address indexed tokenTo, bool stable, uint256 amountIn, uint256 amountOut)
DirectRewardClaimed
event DirectRewardClaimed(address indexed gauge, address indexed rewardToken, uint256 amount)
ETHDeposited
event ETHDeposited(address indexed from, uint256 amount)
FeesClaimed
event FeesClaimed(address indexed pool, uint256 amount0, uint256 amount1)
Initialized
event Initialized(uint64 version)
LPStaked
event LPStaked(address indexed pool, address indexed gauge, uint256 amount)
LPUnstaked
event LPUnstaked(address indexed pool, address indexed gauge, uint256 amount)
ManagerAdded
event ManagerAdded(address indexed manager)
ManagerRemoved
event ManagerRemoved(address indexed manager)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RewardsClaimed
event RewardsClaimed(address indexed gauge, address[] rewardTokens, uint256[] amounts)
TokensDeposited
event TokensDeposited(address indexed from, address indexed token, uint256 amount)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyManager
error AlreadyManager()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FactoryNotSet
error FactoryNotSet()
FailedCall
error FailedCall()
GaugeClaimFailed
error GaugeClaimFailed()
InsufficientBalance
error InsufficientBalance()
InvalidFactory
error InvalidFactory()
InvalidGaugeState
error InvalidGaugeState()
InvalidInitialization
error InvalidInitialization()
InvalidManagerAddress
error InvalidManagerAddress()
InvalidRouter
error InvalidRouter()
NoRewardsAvailable
error NoRewardsAvailable()
NotInitializing
error NotInitializing()
NotManager
error NotManager()
NotOwnerOrManager
error NotOwnerOrManager()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PoolNotFound
error PoolNotFound()
RouterNotSet
error RouterNotSet()
TransferFailed
error TransferFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a080604052346100cd57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100be57506001600160401b036002600160401b031982821601610079575b6040516132229081620000d38239608051818181610eb2015261114c0152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1388080610059565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604081815260048036101561002c575b505050361561002457610022612a43565b005b610022612a43565b600092833560e01c908163067e3945146119b857508063117d37e6146119925780631aa81aca1461193a578063232f4965146118d85780632d06177a146117f2578063308e401e146117b957806336d4a20a146116365780633aecd0e3146115a65780634612bd4f14611579578063461d7cbc146115275780634782f77914611479578063485cc955146113135780634f1ef286146110d05780634f8632ba146110a757806352cdd49614610f0457806352d1902d14610e9d57806358ad387414610e435780635e35359e14610d8257806366168bd714610c9e578063715018a614610c45578063760450d714610c165780637707887214610bf05780638da5cb5b14610bba5780638fcdc75214610b945780639872d4fe14610912578063a7506189146108cf578063ac18de43146107f7578063ad3cb1cc146107ba578063b394927c14610751578063bca9f6851461071a578063c01498ac146104d5578063c45a0155146104ad578063c45acd2314610484578063cb1b0e3414610437578063d5250681146103df578063d61ffdd11461033c578063e18e3a681461030f578063ef5cfb8c14610292578063f2fde38b14610262578063f3ae2415146102375763fdff9b4d0361001157346102335760203660031901126102335760209260ff918391906001600160a01b03610222611a51565b168252855220541690519015158152f35b8280fd5b50346102335760203660031901126102335760209260ff918391906001600160a01b03610222611a51565b833461028f57602036600319011261028f5761028c61027f611a51565b610287612c3d565b6129e1565b80f35b80fd5b5034610233576020366003190112610233576102ac611a51565b928260018060a01b0360008051602061314d833981519152541633141591826102f9575b50506102eb57506102e2602092612629565b90519015158152f35b90516305d1403760e01b8152fd5b60ff9250338152836020522054161582386102d0565b50503461033857816003193601126103385760025490516001600160a01b039091168152602090f35b5080fd5b50913461028f5760e036600319011261028f57610357611a51565b90610360611a67565b610368611a7d565b918460018060a01b0360008051602061314d833981519152541633141591826103c9575b50506103b9576103ad93945060c4359260a435926084359260643592612326565b82519182526020820152f35b505050516305d1403760e01b8152fd5b60ff92503381528760205220541615843861038c565b5034610233576020366003190112610233576103f9611a51565b610401612c3d565b6001600160a01b031691821561042a575050600280546001600160a01b03191691909117905580f35b5163466d7fef60e01b8152fd5b505034610338578060031936011261033857602090610454611a51565b61047a61045f611a67565b6002546003546001600160a01b039491908516908516612b0c565b1615159051908152f35b50503461033857816003193601126103385760035490516001600160a01b039091168152602090f35b505034610338578160031936011261033857905490516001600160a01b039091168152602090f35b50346102335781600319360112610233576104ee611a51565b60008051602061314d833981519152546001600160a01b039460243591861633141580610705575b6106f5578583169283156106e55782156106d55761053390613069565b9586169384156106c75761054687612e2b565b156106b95785516370a0823160e01b81523082820152602097908881602481895afa9081156106af579085918591610679575b501061066a57878461059e928951938492839263095ea7b360e01b8452878401611c47565b038186895af1801561066057610633575b50843b1561033857855163b6b55f2560e01b8152908101839052818160248183895af180156106295790879291610611575b50507e8bfa58790ca176ab7c8a54d2fa2a44b1b1c883248e56849845d29a6e944aa4918551908152a35160018152f35b81925061061d90611a8c565b61028f578086916105e1565b86513d84823e3d90fd5b61065290883d8a11610659575b61064a8183611aeb565b810190611c2f565b50386105af565b503d610640565b87513d85823e3d90fd5b508551631e9acf1760e31b8152fd5b8092508a8092503d83116106a8575b6106928183611aeb565b810103126106a35784905138610579565b600080fd5b503d610688565b88513d86823e3d90fd5b855163324aced760e01b8152fd5b85516301dbb3ff60e61b8152fd5b8551631f2a200560e01b81528590fd5b8551630705e8cf60e21b81528590fd5b84516305d1403760e01b81528490fd5b503381528360205260ff858220541615610516565b5050346103385760203660031901126103385760209061074061073b611a51565b613069565b90516001600160a01b039091168152f35b505034610338576060366003190112610338576107b69061079a610773611a51565b61077b611a67565b610783611a7d565b6003543093919291906001600160a01b0316612e95565b9251918252602082015260408101919091529081906060820190565b0390f35b50503461033857816003193601126103385780516107b6916107db82611ab5565b60058252640352e302e360dc1b60208301525191829182611b5d565b5082903461033857602036600319011261033857610813611a51565b9061081c612c3d565b6001600160a01b038281168085526020839052858520549093919060ff16156108bf5784958486528360205280862060ff19815416905551937fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd318680a2845416803b156108bb578385816108a08296829663498e78b160e01b84523091840161211d565b03925af16108ab5750f35b6108b490611a8c565b61028f5780f35b8480fd5b855163607e454560e11b81528390fd5b5050346103385780600319360112610338576020906108ec611a51565b61047a6108f7611a67565b6002546003546001600160a01b039491908516908516612a71565b509190346103385760c0366003190112610338576001600160a01b039280359190604435858116908190036106a357606435918683168093036106a357608435968715158098036106a3578060008051602061314d833981519152541633141580610b7f575b610b705780600254168015610b60579086929186519063095ea7b360e01b825281806109aa60209b8c94888401611c47565b03818c895af18015610b5657918992918392610b39575b506002541660e48b895194859384926313dcfc5960e01b8452898985015260243560248501528a60448501528b606485015260848401523060a484015260a43560c48401525af1978815610b2e578098610a84575b5050865160011015610a6f5750606086977f9dbb2ce3151d495d487bd63afd1c74999ef4fc70f035600241741f63b0263ab992866107b6989901519087519283528983015286820152a351928284938452830190611b29565b603290634e487b7160e01b6000525260246000fd5b909197503d8082843e610a978184611aeb565b820190878383031261028f5782516001600160401b0393848211610233570182601f82011215610338578051938411610b19578360051b91885194610ade8b850187611aeb565b8552898086019383010193841161028f575088809101915b838310610b095750505050953880610a16565b8251815291810191899101610af6565b60418a634e487b7160e01b6000525260246000fd5b8651903d90823e3d90fd5b610b4f908a3d8c116106595761064a8183611aeb565b50386109c1565b87513d8b823e3d90fd5b855163179ce99f60e01b81528390fd5b5083516305d1403760e01b8152fd5b503387528160205260ff858820541615610978565b505034610338576020366003190112610338576020906102e2610bb5611a51565b612e2b565b50503461033857816003193601126103385760008051602061314d8339815191525490516001600160a01b039091168152602090f35b50503461033857602036600319011261033857602090610740610c11611a51565b6122a7565b505034610338578160031936011261033857602090517316613524e02ad97edfef371bc883f2f5d6c480a58152f35b833461028f578060031936011261028f57610c5e612c3d565b60008051602061314d83398151915280546001600160a01b031981169091556000906001600160a01b031660008051602061318d8339815191528280a380f35b509034610233578060031936011261023357610cb8611a51565b90602435918215610d725781516323b872dd60e01b81523381860152306024820152604481018490526001600160a01b0391909116939060208160648189895af1908115610d68578691610d49575b5015610d3b5750519081527fcbc4a4091b012bb1329c38bbbb15455f5cac5aa3673da0a7f38cd61a4f49551760203392a380f35b90516312171d8360e31b8152fd5b610d62915060203d6020116106595761064a8183611aeb565b38610d07565b83513d88823e3d90fd5b8151631f2a200560e01b81528490fd5b503461023357606036600319011261023357610d9c611a51565b610da4611a67565b60008051602061314d833981519152546001600160a01b0390811633141580610e2e575b6106f5579184939186602094610df4975180988196829563a9059cbb60e01b8452604435918401611c47565b0393165af1908115610e255750610e09575080f35b610e219060203d6020116106595761064a8183611aeb565b5080f35b513d84823e3d90fd5b503386528360205260ff858720541615610dc8565b82843461028f578160031936011261028f5750610e5e611a51565b610e66611a67565b610e8e60018060a01b03918260025416938360035416610e8883838389612a71565b95612b0c565b81845193168352166020820152f35b50913461028f578060031936011261028f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003610ef7576020905160008051602061316d8339815191528152f35b5163703e46dd60e11b8152fd5b50913461028f578160031936011261028f57610f1e611a51565b60008051602061314d833981519152546001600160a01b03946024359391861633141580611092575b61108457839580841693841561107457610f6090613069565b169384156110655715611001575b8515610ff357833b15610338578451632e1a7d4d60e01b8152908101869052818160248183885af18015610fe957610fd5575b50507f61131ffd80a30d321524ddfde6ceb003ce05f619e5ff737ffce9b8594fd13837602080958551908152a35160018152f35b610fdf8291611a8c565b61028f5780610fa1565b85513d84823e3d90fd5b8451631f2a200560e01b8152fd5b84516370a0823160e01b81523081830152909550602081602481875afa908115610fe9578291611033575b5094610f6e565b90506020813d60201161105d575b8161104e60209383611aeb565b810103126106a357513861102c565b3d9150611041565b5084516301dbb3ff60e61b8152fd5b8651630705e8cf60e21b81528390fd5b84516305d1403760e01b8152fd5b503382528060205260ff858320541615610f47565b50503461033857816003193601126103385760015490516001600160a01b039091168152602090f35b509080600319360112610233576110e5611a51565b60249390919084356001600160401b0381116103385736602382011215610338578085013561111381611b0e565b9461112085519687611aeb565b81865260209182870193368a838301011161130f578186928b8693018737880101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081163081149081156112f3575b506112e357611185612c3d565b81169585516352d1902d60e01b815283818a818b5afa8691816112b0575b506111bf575050505050505191634c9c8ce360e01b8352820152fd5b9088888894938c60008051602061316d8339815191529182810361129b5750853b15611287575080546001600160a01b031916821790558451889392917fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8580a2825115611269575050610e219582915190845af4913d1561125f573d61125161124882611b0e565b92519283611aeb565b81528581943d92013e6130e9565b50606092506130e9565b95509550505050503461127b57505080f35b63b398979f60e01b8152fd5b8651634c9c8ce360e01b8152808501849052fd5b8751632a87526960e21b815280860191909152fd5b9091508481813d83116112dc575b6112c88183611aeb565b810103126112d8575190386111a3565b8680fd5b503d6112be565b855163703e46dd60e11b81528890fd5b90508160008051602061316d8339815191525416141538611178565b8580fd5b503461023357816003193601126102335761132c611a51565b90611335611a67565b6000805160206131cd83398151915292835460ff81871c16159360018060401b03821680159081611471575b6001149081611467575b15908161145e575b5061145057506001600160401b03198116600117855583611435575b506113986130ba565b6113a06130ba565b6113a9816129e1565b6113b16130ba565b85546001600160a01b0319908116331787556001805482166001600160a01b0393841617905591169081611426575b50506113ea578280f35b805460ff60401b1916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808280f35b600254161760025538806113e0565b6001600160481b0319166001600160401b011784553861138f565b865163f92ee8a960e01b8152fd5b90501538611373565b303b15915061136b565b869150611361565b50346102335781600319360112610233576001600160a01b0390803582811691908290036108bb576024359260008051602061314d833981519152541633141580611512575b611504574783116114f657508380809381938282156114ed575bf1156114e3575080f35b51903d90823e3d90fd5b506108fc6114d9565b8351631e9acf1760e31b8152fd5b83516305d1403760e01b8152fd5b503385528060205260ff8486205416156114bf565b50503461033857606036600319011261033857602090611545611a51565b611571611550611a67565b611558611a7d565b9060018060a01b03938460025416856003541690612b7b565b915191168152f35b5050346103385760203660031901126103385760209061159f61159a611a51565b61225f565b9051908152f35b50919034610338576020928360031936011261023357836001600160a01b036115cd611a51565b169160248451809481936370a0823160e01b835230908301525afa92831561162b57926115fc575b5051908152f35b9091508281813d8311611624575b6116148183611aeb565b810103126106a3575190386115f5565b503d61160a565b8251903d90823e3d90fd5b50913461028f57606036600319011261028f57611651611a51565b611659611a67565b611661611a7d565b60008051602061314d833981519152546001600160a01b039391908416331415806117a4575b6117945783600354168015611784576116b8936020938851958694859384936379bc57d560e01b85528d850161223d565b03915afa90811561177a57839161174b575b5016801561173c578282918582518094819363d294f09360e01b83525af1908115611732578291611703575b5082519182526020820152f35b90506117259150823d841161172b575b61171d8183611aeb565b810190611ba6565b836116f6565b503d611713565b83513d84823e3d90fd5b5050516301dbb3ff60e61b8152fd5b61176d915060203d602011611773575b6117658183611aeb565b810190612137565b386116ca565b503d61175b565b84513d85823e3d90fd5b86516329f7dfeb60e21b81528890fd5b85516305d1403760e01b81528790fd5b503385528660205260ff868620541615611687565b82843461028f57602036600319011261028f57506117dd6117d8611a51565b612156565b82519182526001600160a01b03166020820152f35b50346102335760203660031901126102335761180c611a51565b90611815612c3d565b6001600160a01b038281169384156118c9578486528260205260ff81872054166118ba57908593929185855282602052808520600160ff1982541617905551947f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a8580a283541690813b156118b65783856118a1819593829463bd583bff60e01b84523091840161211d565b03925af16118ad575080f35b61028c90611a8c565b8380fd5b51630917033d60e31b81529050fd5b51630705e8cf60e21b81529050fd5b82843461028f57606036600319011261028f57506119226118f7611a51565b6118ff611a67565b611907611a7d565b6002546003549193916001600160a01b039081169116612c8a565b82516001600160701b03928316815291166020820152f35b503461023357602036600319011261023357611954611a51565b61195c612c3d565b6001600160a01b0316918215611985575050600380546001600160a01b03191691909117905580f35b51637a44db9560e01b8152fd5b5050346103385760203660031901126103385760209061159f6119b3611a51565b61209f565b9390503461028f5761010036600319011261028f576119d5611a51565b916119de611a67565b946119e7611a7d565b928560018060a01b0360008051602061314d83398151915254163314159182611a3b575b5050611a2f576107b68561079a60e43560c43560a4356084356064358a8e8d611d0f565b6305d1403760e01b8152fd5b60ff925033815284602052205416158538611a0b565b600435906001600160a01b03821682036106a357565b602435906001600160a01b03821682036106a357565b6044359081151582036106a357565b6001600160401b038111611a9f57604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117611a9f57604052565b602081019081106001600160401b03821117611a9f57604052565b601f909101601f19168101906001600160401b03821190821017611a9f57604052565b6001600160401b038111611a9f57601f01601f191660200190565b90815180825260208080930193019160005b828110611b49575050505090565b835185529381019392810192600101611b3b565b6020808252825181830181905290939260005b828110611b9257505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501611b70565b91908260409103126106a3576020825192015190565b6001600160a01b039182168152918116602083015291151560408201529116606082015260800190565b81810292918115918404141715611bf957565b634e487b7160e01b600052601160045260246000fd5b8115611c19570490565b634e487b7160e01b600052601260045260246000fd5b908160209103126106a3575180151581036106a35790565b6001600160a01b039091168152602081019190915260400190565b90949392606092608083019615158352602083015260408201520152565b60009060033d11611c8d57565b905060046000803e60005160e01c90565b600060443d10611cfb57604051600319913d83016004833e81516001600160401b03918282113d602484011117611cfe57818401948551938411611d06573d85010160208487010111611cfe5750611cfb92910160200190611aeb565b90565b949350505050565b50949350505050565b93979590949692919660018060a01b036002541690811561208d576003546001600160a01b0316801561207b576001600160a01b03611d518b8a8a8588612b7b565b161561206957604080516323000df760e21b81529182908190611d7a908e8d8d60048601611bbc565b0381865afa9081600091600093612046575b50611ffc575b50506040519160208380611db58863095ea7b360e01b9586845260048401611c47565b038160006001600160a01b038c165af1908115611fd3578b93602092611fdf575b50600254604051918252909384918291611dfc916001600160a01b031660048401611c47565b038160006001600160a01b038c165af1908115611fd357606095610124948b94600094611fb4575b5060018060a01b0360025416926040519d8e988997635a47ddc360e01b895260018060a01b038d1660048a01528d60018060a01b031660248a0152151560448901526064880152608487015260a486015260c48501523060e48501526101048401525af1936000928584978597611f6d575b50611f1d57611ea3611c80565b6308c379a014611eea575b60405162461bcd60e51b8152602060048201526014602482015273105919081b1a5c5d5a591a5d1e4819985a5b195960621b6044820152606490fd5b611ef2611c9e565b80611efd5750611eae565b60405162461bcd60e51b8152908190611f199060048301611b5d565b0390fd5b6040516001600160a01b0391821693909116917f316bf8459750d7b31f9335b761a7a2460a2072993ea64d6f11bf0c450c552c7591908190611f659089908b90899085611c62565b0390a3929190565b9491975095506060843d606011611fac575b81611f8c60609383611aeb565b8101031261028f5750825195604060208501519401519693969538611e96565b3d9150611f7f565b611fcc9060203d6020116106595761064a8183611aeb565b5038611e24565b6040513d6000823e3d90fd5b611ff590833d85116106595761064a8183611aeb565b5038611dd6565b929a9150925061200b93612bdf565b81978198605081029080820460501490151715611bf9576064900491605081029080820460501490151715611bf95760649004913880611d92565b909250612062915060403d60401161172b5761171d8183611aeb565b9138611d8c565b6040516301dbb3ff60e61b8152600490fd5b6040516329f7dfeb60e21b8152600490fd5b60405163179ce99f60e01b8152600490fd5b6001600160a01b03906120b190613069565b168015612117576020602491604051928380926370a0823160e01b82523060048301525afa908115611fd3576000916120e8575090565b90506020813d60201161210f575b8161210360209383611aeb565b810103126106a3575190565b3d91506120f6565b50600090565b6001600160a01b0391821681529116602082015260400190565b908160209103126106a357516001600160a01b03811681036106a35790565b61215f90613069565b6001600160a01b0381169190821590811561222c575b50612224576040516246613160e11b8152306004820152602092908381602481855afa908115611fd35784906000926121f6575b5060405163f7c618c160e01b81529192829060049082905afa938415611fd3576000946121d7575b50509190565b6121ee929450803d10611773576117658183611aeb565b9138806121d1565b809250813d831161221d575b61220c8183611aeb565b810103126106a357518360046121a9565b503d612202565b600091508190565b6122369150612e2b565b1538612175565b6001600160a01b03918216815291166020820152901515604082015260600190565b6001600160a01b039061227190613069565b168015612117576020602491604051928380926246613160e11b82523060048301525afa908115611fd3576000916120e8575090565b6001600160a01b03906122b990613069565b1680156121175760206004916040519283809263f7c618c160e01b82525afa908115611fd3576000916122ea575090565b611cfb915060203d602011611773576117658183611aeb565b8051156123105760200190565b634e487b7160e01b600052603260045260246000fd5b60025490976001600160a01b03918216979496909591949391881561208d578560035416801561207b57606489106125b45761236684868d8a948e612b7b565b16998a156120695760409a8b519a6370a0823160e01b8c523060048d015260209b8c81602481865afa9081156125a95760009161257c575b508b8110612574575b508a1561255f578b8b8e969594936123d6936000895180968195829463095ea7b360e01b845260048401611c47565b03925af1928315612554578b988a958e60009461010497612536575b505086600254169288519c8d98899763037b79b160e21b8952169b8c6004890152169b8c60248801528a151560448801526064870152608486015260a48501523060c485015260e48401525af19586600095600098612511575b506124d057888861245b611c80565b6308c379a0146124a2575b606491519062461bcd60e51b82526004820152601760248201527614995b5bdd99481b1a5c5d5a591a5d1e4819985a5b1959604a1b6044820152fd5b6124aa611c9e565b806124b55750612466565b825162461bcd60e51b8152908190611f199060048301611b5d565b7ff1c6b4a8d9333d8b05efe1f29dc513e4228b99f31cee9d12247683adbd2004b09395975061250a908786989a9694965194859485611c62565b0390a39190565b90975061252c919550893d8b1161172b5761171d8183611aeb565b949094963861244c565b8161254c92903d106106595761064a8183611aeb565b508e386123f2565b85513d6000823e3d90fd5b50505050505050505092505050600090600090565b9a50386123a7565b90508c81813d83116125a2575b6125938183611aeb565b810103126106a357513861239e565b503d612589565b8e513d6000823e3d90fd5b5050505050505092505050600090600090565b90815180825260208080930193019160005b8281106125e7575050505090565b83516001600160a01b0316855293810193928101926001016125d9565b909161261b611cfb936040845260408401906125c7565b916020818403910152611b29565b6001600160a01b0390600090808316156129cf5761264690613069565b908282169182156120695761265a90612e2b565b156129bd5760408051936246613160e11b855260049030828701526020958681602481895afa908115612977578591612990575b501561298157825163f7c618c160e01b815286818481895afa90811561297757859161295a575b50168251956370a0823160e01b9182885230848901528188602481845afa978815612950578698612921575b5085928551986126f08a611ab5565b6001998a81528436818301378961270682612303565b527316613524e02ad97edfef371bc883f2f5d6c480a5803b1561291d5761274c918a9187838b8d519687958694859363f9f031df60e01b855284015260248301906125c7565b03925af1908161290a575b50612902575b84156128a8575b865191825230868301528382602481865afa91821561289e57889261286f575b508082116127ea5750505050156127dc575090816127d66000805160206131ad8339815191529351916127b683611ad0565b8383528051936127c585611ad0565b845260003681375192839283612604565b0390a290565b905163e016b9c560e01b8152fd5b90809450969296959491950392831161285c575050816127d6916000805160206131ad833981519152959493519361282185611ab5565b88855285368187013782519561283687611ab5565b898752368188013761284785612303565b5261285185612303565b525192839283612604565b634e487b7160e01b825260119052602490fd5b9091508381813d8311612897575b6128878183611aeb565b810103126106a357519038612784565b503d61287d565b87513d8a823e3d90fd5b8651631e8c5c8960e11b8152848188818c8e5af18991816128e3575b506128d0575b50612764565b6128db575b386128ca565b8994506128d5565b6128fb919250863d88116106595761064a8183611aeb565b90386128c4565b89945061275d565b61291690999199611a8c565b9738612757565b8980fd5b9097508181813d8311612949575b6129398183611aeb565b8101031261130f575196386126e1565b503d61292f565b85513d88823e3d90fd5b6129719150873d8911611773576117658183611aeb565b386126b5565b84513d87823e3d90fd5b50905163afb0be3360e01b8152fd5b90508681813d83116129b6575b6129a78183611aeb565b810103126108bb57513861268e565b503d61299d565b60405163324aced760e01b8152600490fd5b604051630705e8cf60e21b8152600490fd5b6001600160a01b03908116908115612a2a5760008051602061314d83398151915280546001600160a01b0319811684179091551660008051602061318d833981519152600080a3565b604051631e4fbdf760e01b815260006004820152602490fd5b6040513481527f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df060203392a2565b6001600160a01b039081169290919083158015612b02575b612af85760405163874029d960e01b81529083166004820152938216602485015260016044850152166064830152602090829060849082905afa60009181612ad7575b50611cfb5750600090565b612af191925060203d602011611773576117658183611aeb565b9038612acc565b5050505050600090565b5082821615612a89565b6001600160a01b039081169290919083158015612b71575b612af85760405163874029d960e01b81529083166004820152938216602485015260006044850152166064830152602090829060849082905afa60009181612ad75750611cfb5750600090565b5082821615612b24565b909391926001600160a01b03918216918215908115612bd4575b50612af857602093612bbd6040519687958694859463874029d960e01b865260048601611bbc565b03915afa60009181612ad75750611cfb5750600090565b905085161538612b95565b9193929093801580612c35575b6121d157612c0381612bfe8486611be6565b611c0f565b85811115612c2d575090612bfe612c1a9286611be6565b90808211612c2757509190565b90509190565b945050509190565b508115612bec565b60008051602061314d833981519152546001600160a01b03163303612c5e57565b60405163118cdaa760e01b8152336004820152602490fd5b51906001600160701b03821682036106a357565b6001600160a01b03959493919086168015612e1c5790612cc69291604051808095819463874029d960e01b83526020998a978a60048601611bbc565b03915afa60009181612dfd575b50612ce5575050509050600090600090565b8416938415612df057604051630240bc6b60e21b815290606082600481895afa92836000938495612d94575b50612d255750505050509050600090600090565b90600491839580869960405195868092630dfe168160e01b82525afa938491600095612d75575b5050612d5b5750505050509190565b8116911603612d6a5750509190565b9350905038806121d1565b612d8c929550803d10611773576117658183611aeb565b923880612d4c565b939094506060843d606011612de8575b81612db160609383611aeb565b8101031261028f57612dc284612c76565b906040612dd0888701612c76565b95015163ffffffff81160361028f5750929338612d11565b3d9150612da4565b5050509050600090600090565b612e15919250843d8611611773576117658183611aeb565b9038612cd3565b50505050509050600090600090565b6001600160a01b031680156121175760405190631703e5f960e01b825260048201526020816024817316613524e02ad97edfef371bc883f2f5d6c480a55afa908115611fd357600091612e7c575090565b611cfb915060203d6020116106595761064a8183611aeb565b93946001600160a01b0394909390851680156130575790612ed1929160405180809581946379bc57d560e01b835260209889976004850161223d565b03915afa8015611fd357849160009161303a575b5016801561302a57600091600095600095604051916370a0823160e01b835216908160048201528281602481875afa60009181612ffb575b50612ff3575b506040516326ad4fc560e11b8152600481018290528281602481875afa60009181612fc4575b50612fbc575b50819060246040518095819363a1ac4d1360e01b835260048301525afa918291600093612f8c575b5050612f84575b50929190565b925038612f7e565b9080929350813d8311612fb5575b612fa48183611aeb565b810103126106a35751903880612f77565b503d612f9a565b965081612f4f565b9091508381813d8311612fec575b612fdc8183611aeb565b810103126106a357519038612f49565b503d612fd2565b935038612f23565b9091508381813d8311613023575b6130138183611aeb565b810103126106a357519038612f1d565b503d613009565b5050915050600090600090600090565b6130519150833d8511611773576117658183611aeb565b38612ee5565b50505050915050600090600090600090565b6001600160a01b03168015612117576040519063b9a09fd560e01b825260048201526020816024817316613524e02ad97edfef371bc883f2f5d6c480a55afa908115611fd3576000916122ea575090565b60ff6000805160206131cd8339815191525460401c16156130d757565b604051631afcd79f60e31b8152600490fd5b9061311057508051156130fe57805190602001fd5b60405163d6bda27560e01b8152600490fd5b81511580613143575b613121575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561311956fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0c53cb8bc1a7200a84d0b66a538905a245c4915aace7f1ce5dc4a0ba107ebc15cf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122002544b2b4af61d0f5c71e158ade2358f73b1f39a51e036b5132c540407a595d364736f6c63430008160033