30 txs
91 calls
constructor
constructor(address initialOwner_, address hOHM_, address olympusStaking_, address sUsds_, address uniV3Router_, address uniV3Quoter_, address morpho_)
functions
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
gOHM
viewfunction gOHM() view returns (address)
hOHM
viewfunction hOHM() view returns (address)
MORPHO
viewfunction MORPHO() view returns (address)
OHM
viewfunction OHM() view returns (address)
olympusStaking
viewfunction olympusStaking() view returns (address)
owner
viewfunction owner() view returns (address)
sUSDS
viewfunction sUSDS() view returns (address)
uniV3Quoter
viewfunction uniV3Quoter() view returns (address)
uniV3Router
viewfunction uniV3Router() view returns (address)
USDS
viewfunction USDS() view returns (address)
acceptOwner
nonpayablefunction acceptOwner()
approveToken
nonpayablefunction approveToken(address token, address spender, uint256 amount)
executeRoute1
nonpayablefunction executeRoute1(uint256 sUsdsSold, uint256 sUsdsFlashAmount, int256 minProfit, uint24 susdsHohmPoolFee, uint24 ohmSusdsPoolFee, uint256 deadline) returns (int256 profit)
executeRoute2
nonpayablefunction executeRoute2(uint256 sUsdsSold, int256 minProfit, uint24 susdsHohmPoolFee, uint24 ohmSusdsPoolFee, uint256 deadline) returns (int256 profit)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
onMorphoFlashLoan
nonpayablefunction onMorphoFlashLoan(uint256 flashLoanAmount, bytes params)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
quoteRoute1
nonpayablefunction quoteRoute1(uint256 sUsdsSold, uint24 susdsHohmPoolFee, uint24 ohmSusdsPoolFee) returns (tuple quoteData)
quoteRoute2
nonpayablefunction quoteRoute2(uint256 sUsdsSold, uint24 susdsHohmPoolFee, uint24 ohmSusdsPoolFee) returns (tuple quoteData)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
uniV3Quote
nonpayablefunction uniV3Quote(address tokenIn, uint256 amountIn, address tokenOut, uint24 fee) returns (uint256 amountOut)
events
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
MinProfitNotMet
error MinProfitNotMet(int256 minProfitExpected, int256 profit)
Overflow
error Overflow(uint256 amount)
creation bytecode
0x6101a06040523480156200001257600080fd5b506040516200391d3803806200391d833981016040819052620000359162000277565b866200004181620001de565b506001600160a01b03851660e081905260408051630cd3058560e01b81529051630cd30585916004808201926020929091908290030181865afa1580156200008d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b391906200030c565b6001600160a01b031660a0816001600160a01b03168152505060e0516001600160a01b031663a6c41fec6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200010d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200013391906200030c565b6001600160a01b0390811660c0528681166080528416610120819052604080516338d52e0f60e01b815290516338d52e0f916004808201926020929091908290030181865afa1580156200018b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b191906200030c565b6001600160a01b039081166101005292831661014052908216610160521661018052506200033192505050565b6000546001600160a01b0316156200020957604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200023857604051634726455360e11b81526000600482015260240160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200027257600080fd5b919050565b600080600080600080600060e0888a0312156200029357600080fd5b6200029e886200025a565b9650620002ae602089016200025a565b9550620002be604089016200025a565b9450620002ce606089016200025a565b9350620002de608089016200025a565b9250620002ee60a089016200025a565b9150620002fe60c089016200025a565b905092959891949750929550565b6000602082840312156200031f57600080fd5b6200032a826200025a565b9392505050565b60805160a05160c05160e0516101005161012051610140516101605161018051613432620004eb600039600081816102240152818161066c01528181610931015281816109f80152610e38015260008181610397015261210c01526000818161030f01526124940152600081816102b3015281816105630152818161069901528181610732015281816109d601528181610a5a01528181610b9d01528181610c4401528181610d2e01528181610e6501528181610efe01528181610fbc0152818161104d01528181611197015281816118c00152818161194501528181611b3201528181611b8c01528181611ce701528181611d2401528181611e7d0152611f1a01526000818161045101528181611a900152611b1001526000818161033601528181611c490152611dc80152600081816103d101528181610a7c0152818161117501528181611cc50152611d4a0152600081816101a201528181610ad8015281816110f2015281816121b901526125d201526000818161035d01528181610c1e01528181610fde015281816118e601528181611ef8015281816121f00152818161229201528181612559015261260f01526134326000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c8063741ca786116100e3578063b1f8100d1161008c578063da3e339711610066578063da3e339714610473578063daeccc7914610486578063ebbc4965146104c457600080fd5b8063b1f8100d14610426578063bfccf0ec14610439578063c8ef95ae1461044c57600080fd5b8063a6c41fec116100bd578063a6c41fec146103cc578063a7229fd9146103f3578063ac9650d81461040657600080fd5b8063741ca7861461037f578063795674ff146103925780638da5cb5b146103b957600080fd5b80634a064f99116101455780635fafa5891161011f5780635fafa5891461030a57806362508bb0146103315780636a3202571461035857600080fd5b80634a064f991461029b5780634f5a19df146102ae578063500d2ff8146102d557600080fd5b806331f570721161017657806331f570721461020c5780633acb56241461021f5780633ed52ee81461024657600080fd5b80630cd305851461019d5780630fbbc59d146101e15780632b96895814610202575b600080fd5b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101f46101ef366004612a7b565b6104cc565b6040519081526020016101d8565b61020a61080b565b005b61020a61021a366004612ac9565b610926565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b610259610254366004612b45565b610a23565b6040516101d89190600060a082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015292915050565b6101f46102a9366004612b81565b610c97565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6102e86102e3366004612b45565b610f91565b60408051825181526020808401519082015291810151908201526060016101d8565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6101f461038d366004612bf1565b6111ec565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b6000546101c4906001600160a01b031681565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61020a610401366004612c42565b611205565b610419610414366004612c83565b6112cf565b6040516101d89190612d48565b61020a610434366004612dca565b6113b9565b61020a610447366004612dee565b6114e1565b6101c47f000000000000000000000000000000000000000000000000000000000000000081565b61020a610481366004612c42565b6116bf565b6104b4610494366004612e93565b600160209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101d8565b61020a611737565b60006104fc336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b610532576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156105b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d69190612ec8565b905060006040518060a001604052806001808111156105f7576105f7612ee1565b81526020018981526020018762ffffff1681526020018662ffffff1681526020018581525060405160200161062c9190612f10565b60408051601f19818403018152908290527fe0232b4200000000000000000000000000000000000000000000000000000000825291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e0232b42906106c5907f0000000000000000000000000000000000000000000000000000000000000000908c908690600401612f8b565b600060405180830381600087803b1580156106df57600080fd5b505af11580156106f3573d6000803e3d6000fd5b5050505061070082611856565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526107ab907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a08231906024015b602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a69190612ec8565b611856565b6107b59190612fe2565b925086831215610800576040517fab502f1e00000000000000000000000000000000000000000000000000000000815260048101889052602481018490526044015b60405180910390fd5b505095945050505050565b610839336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b61086f576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546001600160a01b031661dead146108c4576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024016107f7565b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610988576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061099682840184613031565b90506000815160018111156109ad576109ad612ee1565b036109c0576109bb816118b9565b6109c9565b6109c981611d1d565b610a1d6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000086611f48565b50505050565b610a556040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b610aa17f0000000000000000000000000000000000000000000000000000000000000000857f00000000000000000000000000000000000000000000000000000000000000008561207e565b602082018190526040517f66a5236c00000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366a5236c90602401602060405180830381865afa158015610b27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4b9190612ec8565b60408201819052610b5b90612189565b6080830181905260608301919091526040517fef8b30f70000000000000000000000000000000000000000000000000000000081526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ef8b30f791610bd49160040190815260200190565b602060405180830381865afa158015610bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c159190612ec8565b90506000610c697f000000000000000000000000000000000000000000000000000000000000000084606001517f00000000000000000000000000000000000000000000000000000000000000008861207e565b9050610c7486611856565b610c816107a683856130ba565b610c8b9190612fe2565b83525090949350505050565b6000610cc7336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b610cfd576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612ec8565b905060006040518060a0016040528060006001811115610dc357610dc3612ee1565b81526020018a81526020018762ffffff1681526020018662ffffff16815260200185815250604051602001610df89190612f10565b60408051601f19818403018152908290527fe0232b4200000000000000000000000000000000000000000000000000000000825291506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e0232b4290610e91907f0000000000000000000000000000000000000000000000000000000000000000908c908690600401612f8b565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b50505050610ecc82611856565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152610f35907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401610765565b610f3f9190612fe2565b925086831215610f85576040517fab502f1e00000000000000000000000000000000000000000000000000000000815260048101889052602481018490526044016107f7565b50509695505050505050565b610fb560405180606001604052806000815260200160008152602001600081525090565b60006110037f0000000000000000000000000000000000000000000000000000000000000000867f00000000000000000000000000000000000000000000000000000000000000008761207e565b905060006110108261228a565b602085018190526040517f0a28a47700000000000000000000000000000000000000000000000000000000815260048101919091529091506000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630a28a47790602401602060405180830381865afa15801561109c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c09190612ec8565b6040517fa8248768000000000000000000000000000000000000000000000000000000008152600481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a824876890602401602060405180830381865afa158015611141573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111659190612ec8565b604085018190526000906111bc907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000008961207e565b90506111cb6107a689846130ba565b6111d482611856565b6111de9190612fe2565b855250929695505050505050565b60006111fa8585858561207e565b90505b949350505050565b611233336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b611269576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516112ae91815260200190565b60405180910390a36112ca6001600160a01b0384168383612368565b505050565b60608167ffffffffffffffff8111156112ea576112ea613002565b60405190808252806020026020018201604052801561131d57816020015b60608152602001906001900390816113085790505b50905060005b828110156113b25761138d30858584818110611341576113416130cd565b905060200281019061135391906130fc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123b192505050565b82828151811061139f5761139f6130cd565b6020908102919091010152600101611323565b5092915050565b6113e7336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b61141d576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611468576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016107f7565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61150f336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b611545576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316611590576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016107f7565b604080518082019091526000808252602082015260005b828110156116b8578383828181106115c1576115c16130cd565b9050604002018036038101906115d79190613176565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055016115a7565b5050505050565b6116ed336000357fffffffff00000000000000000000000000000000000000000000000000000000166117eb565b611723576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ca6001600160a01b0384168383611f48565b6002546001600160a01b0316331461177b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b600080546001600160a01b038481169116148061184d57506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b90505b92915050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156118b5576040517fe0fb6a7c000000000000000000000000000000000000000000000000000000008152600481018390526024016107f7565b5090565b60006119147f000000000000000000000000000000000000000000000000000000000000000083602001517f0000000000000000000000000000000000000000000000000000000000000000856040015186608001516123d6565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ba0876529082906370a0823190602401602060405180830381865afa15801561199c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c09190612ec8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af1158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a479190612ec8565b506000611a538261250c565b506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afb9190612ec8565b90508015611c0357611b576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611f48565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018290523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af1158015611bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c019190612ec8565b505b6040517f990966d50000000000000000000000000000000000000000000000000000000081523060048201526024810183905260006044820181905260648201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063990966d5906084016020604051808303816000875af1158015611c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbe9190612ec8565b9050611d157f0000000000000000000000000000000000000000000000000000000000000000827f0000000000000000000000000000000000000000000000000000000000000000886060015189608001516123d6565b505050505050565b6000611d787f000000000000000000000000000000000000000000000000000000000000000083602001517f0000000000000000000000000000000000000000000000000000000000000000856060015186608001516123d6565b6040517fd866c9d800000000000000000000000000000000000000000000000000000000815230600482015260248101829052600060448201819052600160648301529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d866c9d8906084016020604051808303816000875af1158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e359190612ec8565b9050600080611e43836125a2565b6040517f6e553f650000000000000000000000000000000000000000000000000000000081526004810182905230602482015291935091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af1158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef29190612ec8565b50611d157f0000000000000000000000000000000000000000000000000000000000000000837f0000000000000000000000000000000000000000000000000000000000000000886040015189608001516123d6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611fc7848261265a565b610a1d576040516001600160a01b0384166024820152600060448201526120749085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612701565b610a1d8482612701565b6040805160a0810182526001600160a01b0386811682528481166020830190815282840187815262ffffff8681166060860190815260006080870181815297517fc6a5026a00000000000000000000000000000000000000000000000000000000815287518716600482015294518616602486015292516044850152511660648301529351821660848201527f00000000000000000000000000000000000000000000000000000000000000009091169063c6a5026a9060a4016080604051808303816000875af1158015612157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217b91906131d3565b509198975050505050505050565b6040517f907ad64a0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905260009182916060917f00000000000000000000000000000000000000000000000000000000000000009091169063907ad64a90604401600060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261226191908101906132b8565b8051929550925082916000915061227a5761227a6130cd565b6020026020010151915050915091565b6000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ab41950866040518263ffffffff1660e01b81526004016122de91815260200190565b600060405180830381865afa1580156122fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123239190810190613325565b915091508160008151811061233a5761233a6130cd565b6020026020010151935080600081518110612357576123576130cd565b602002602001015192505050915091565b6040516001600160a01b0383166024820152604481018290526112ca9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612010565b606061184d83836040518060600160405280602781526020016133d660279139612803565b60408051610100810182526001600160a01b0387811682528581166020830190815262ffffff80871684860190815230606086019081526080860188815260a087018c8152600060c0890181815260e08a018281529a517f414bf3890000000000000000000000000000000000000000000000000000000081529951891660048b01529651881660248a015293519094166044880152905185166064870152516084860152905160a4850152905160c48401529251811660e48301527f0000000000000000000000000000000000000000000000000000000000000000169063414bf38990610104016020604051808303816000875af11580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190612ec8565b9695505050505050565b6040517f98d7e29500000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201526000908190819081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906398d7e295906064016000604051808303816000875af11580156122fb573d6000803e3d6000fd5b6040517f2fa7f9240000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905230604483015260009182916060917f000000000000000000000000000000000000000000000000000000000000000090911690632fa7f924906064016000604051808303816000875af1158015612239573d6000803e3d6000fd5b6000806000846001600160a01b0316846040516126779190613389565b6000604051808303816000865af19150503d80600081146126b4576040519150601f19603f3d011682016040523d82523d6000602084013e6126b9565b606091505b50915091508180156126e35750805115806126e35750808060200190518101906126e391906133a5565b80156126f857506001600160a01b0385163b15155b95945050505050565b6000612756826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166128719092919063ffffffff16565b905080516000148061277757508080602001905181019061277791906133a5565b6112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107f7565b6060600080856001600160a01b0316856040516128209190613389565b600060405180830381855af49150503d806000811461285b576040519150601f19603f3d011682016040523d82523d6000602084013e612860565b606091505b509150915061250286838387612880565b60606111fd8484600085612913565b60608315612909578251600003612902576001600160a01b0385163b612902576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107f7565b50816111fd565b6111fd8383612a1f565b6060824710156129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016107f7565b600080866001600160a01b031685876040516129c19190613389565b60006040518083038185875af1925050503d80600081146129fe576040519150601f19603f3d011682016040523d82523d6000602084013e612a03565b606091505b5091509150612a1487838387612880565b979650505050505050565b815115612a2f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f791906133c2565b803562ffffff81168114612a7657600080fd5b919050565b600080600080600060a08688031215612a9357600080fd5b8535945060208601359350612aaa60408701612a63565b9250612ab860608701612a63565b949793965091946080013592915050565b600080600060408486031215612ade57600080fd5b83359250602084013567ffffffffffffffff80821115612afd57600080fd5b818601915086601f830112612b1157600080fd5b813581811115612b2057600080fd5b876020828501011115612b3257600080fd5b6020830194508093505050509250925092565b600080600060608486031215612b5a57600080fd5b83359250612b6a60208501612a63565b9150612b7860408501612a63565b90509250925092565b60008060008060008060c08789031215612b9a57600080fd5b863595506020870135945060408701359350612bb860608801612a63565b9250612bc660808801612a63565b915060a087013590509295509295509295565b6001600160a01b0381168114612bee57600080fd5b50565b60008060008060808587031215612c0757600080fd5b8435612c1281612bd9565b9350602085013592506040850135612c2981612bd9565b9150612c3760608601612a63565b905092959194509250565b600080600060608486031215612c5757600080fd5b8335612c6281612bd9565b92506020840135612c7281612bd9565b929592945050506040919091013590565b60008060208385031215612c9657600080fd5b823567ffffffffffffffff80821115612cae57600080fd5b818501915085601f830112612cc257600080fd5b813581811115612cd157600080fd5b8660208260051b8501011115612ce657600080fd5b60209290920196919550909350505050565b60005b83811015612d13578181015183820152602001612cfb565b50506000910152565b60008151808452612d34816020860160208601612cf8565b601f01601f19169290920160200192915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612dbd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452612dab858351612d1c565b94509285019290850190600101612d71565b5092979650505050505050565b600060208284031215612ddc57600080fd5b8135612de781612bd9565b9392505050565b600080600060408486031215612e0357600080fd5b8335612e0e81612bd9565b9250602084013567ffffffffffffffff80821115612e2b57600080fd5b818601915086601f830112612e3f57600080fd5b813581811115612e4e57600080fd5b8760208260061b8501011115612b3257600080fd5b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612a7657600080fd5b60008060408385031215612ea657600080fd5b8235612eb181612bd9565b9150612ebf60208401612e63565b90509250929050565b600060208284031215612eda57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815160a082019060028110612f4e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8083525060208301516020830152604083015162ffffff808216604085015280606086015116606085015250506080830151608083015292915050565b6001600160a01b03841681528260208201526060604082015260006111fa6060830184612d1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810360008312801583831316838312821617156113b2576113b2612fb3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060a0828403121561304357600080fd5b60405160a0810181811067ffffffffffffffff8211171561306657613066613002565b60405282356002811061307857600080fd5b81526020838101359082015261309060408401612a63565b60408201526130a160608401612a63565b6060820152608083013560808201528091505092915050565b8082018082111561185057611850612fb3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261313157600080fd5b83018035915067ffffffffffffffff82111561314c57600080fd5b60200191503681900382131561316157600080fd5b9250929050565b8015158114612bee57600080fd5b60006040828403121561318857600080fd5b6040516040810181811067ffffffffffffffff821117156131ab576131ab613002565b6040526131b783612e63565b815260208301356131c781613168565b60208201529392505050565b600080600080608085870312156131e957600080fd5b8451935060208501516131fb81612bd9565b604086015190935063ffffffff8116811461321557600080fd5b6060959095015193969295505050565b600082601f83011261323657600080fd5b8151602067ffffffffffffffff8083111561325357613253613002565b8260051b604051601f19603f8301168101818110848211171561327857613278613002565b604052938452602081870181019490810192508785111561329857600080fd5b6020870191505b84821015612a145781518352918301919083019061329f565b6000806000606084860312156132cd57600080fd5b83519250602084015167ffffffffffffffff808211156132ec57600080fd5b6132f887838801613225565b9350604086015191508082111561330e57600080fd5b5061331b86828701613225565b9150509250925092565b6000806040838503121561333857600080fd5b825167ffffffffffffffff8082111561335057600080fd5b61335c86838701613225565b9350602085015191508082111561337257600080fd5b5061337f85828601613225565b9150509250929050565b6000825161339b818460208701612cf8565b9190910192915050565b6000602082840312156133b757600080fd5b8151612de781613168565b60208152600061184d6020830184612d1c56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a72ae50e25c1420baff6542d41bdcbf0c86dd2d9ec434eeddc9ddb39bb9f3f9064736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d800000000000000000000000001db1591540d7a6062be0837ca3c808add28844f6000000000000000000000000b63cac384247597756545b500253ff8e607a8020000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156400000000000000000000000061ffe014ba17989e743c5f6cb21bf9697530b21e000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb