82 txs
739 calls
constructor
constructor(address initialOwner_, address vault_, address sUSDS_, uint32 switchFarmCooldown_, address swapper_, address feeCollector_, uint16 performanceFeeBpsForCaller_, uint16 performanceFeeBpsForOrigami_)
functions
areDepositsPaused
viewfunction areDepositsPaused() view returns (bool)
areWithdrawalsPaused
viewfunction areWithdrawalsPaused() view returns (bool)
asset
viewfunction asset() view returns (address)
currentFarmIndex
viewfunction currentFarmIndex() view returns (uint32)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
farmDetails
viewfunction farmDetails(uint32[] farmIndexes) view returns (tuple[] details)
feeCollector
viewfunction feeCollector() view returns (address)
getFarm
viewfunction getFarm(uint256 farmIndex) view returns (tuple farm)
isPauser
viewfunction isPauser(address account) view returns (bool canPause)
lastSwitchTime
viewfunction lastSwitchTime() view returns (uint32)
maxFarmIndex
viewfunction maxFarmIndex() view returns (uint32)
owner
viewfunction owner() view returns (address)
pausers
viewfunction pausers(address account) view returns (bool canPause)
performanceFeeBps
viewfunction performanceFeeBps() view returns (uint16, uint16)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
sUSDS
viewfunction sUSDS() view returns (address)
sUsdsReferral
viewfunction sUsdsReferral() view returns (uint16)
swapper
viewfunction swapper() view returns (address)
switchFarmCooldown
viewfunction switchFarmCooldown() view returns (uint32)
totalAssets
viewfunction totalAssets() view returns (uint256 totalManagedAssets)
USDS
viewfunction USDS() view returns (address)
vault
viewfunction vault() view returns (address)
acceptOwner
nonpayablefunction acceptOwner()
addFarm
nonpayablefunction addFarm(address stakingAddress, uint16 referralCode) returns (uint32 nextFarmIndex)
claimFarmRewards
nonpayablefunction claimFarmRewards(uint32[] farmIndexes, address incentivesReceiver)
deposit
nonpayablefunction deposit(uint256 assetsAmount) returns (uint256 assetsDeposited)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
removeFarm
nonpayablefunction removeFarm(uint32 farmIndex)
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setFarmReferralCode
nonpayablefunction setFarmReferralCode(uint32 farmIndex, uint16 referralCode)
setFeeCollector
nonpayablefunction setFeeCollector(address _feeCollector)
setPaused
nonpayablefunction setPaused(tuple updatedPaused)
setPauser
nonpayablefunction setPauser(address account, bool canPause)
setPerformanceFees
nonpayablefunction setPerformanceFees(uint16 callerFeeBps, uint16 origamiFeeBps)
setSwapper
nonpayablefunction setSwapper(address newSwapper)
setSwitchFarmCooldown
nonpayablefunction setSwitchFarmCooldown(uint32 cooldown)
switchFarms
nonpayablefunction switchFarms(uint32 newFarmIndex) returns (uint256 amountWithdrawn, uint256 amountDeposited)
withdraw
nonpayablefunction withdraw(uint256 usdsAmount, address receiver) returns (uint256 usdsWithdrawn)
events
ClaimedReward
event ClaimedReward(uint32 indexed farmIndex, address indexed rewardsToken, uint256 amountForCaller, uint256 amountForOrigami, uint256 amountForVault)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FarmAdded
event FarmAdded(uint32 indexed farmIndex, address indexed stakingAddress, address indexed rewardsToken, uint16 referralCode)
FarmReferralCodeSet
event FarmReferralCodeSet(uint32 indexed farmIndex, uint16 referralCode)
FarmRemoved
event FarmRemoved(uint32 indexed farmIndex, address indexed stakingAddress, address indexed rewardsToken)
FeeBpsSet
event FeeBpsSet(uint16 depositFeeBps, uint16 withdrawalFeeBps)
FeeCollectorSet
event FeeCollectorSet(address indexed feeCollector)
InKindFees
event InKindFees(uint8 feeType, uint256 feeBps, uint256 feeAmount)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
PausedSet
event PausedSet((bool investmentsPaused, bool exitsPaused) paused)
PauserSet
event PauserSet(address indexed account, bool canPause)
SwapperSet
event SwapperSet(address indexed newSwapper)
SwitchedFarms
event SwitchedFarms(uint32 indexed oldFarmIndex, uint32 indexed newFarmIndex, uint256 amountWithdrawn, uint256 amountDeposited)
SwitchFarmCooldownSet
event SwitchFarmCooldownSet(uint32 cooldown)
errors
BeforeCooldownEnd
error BeforeCooldownEnd()
FarmExistsAlready
error FarmExistsAlready(address stakingAddress)
FarmStillInUse
error FarmStillInUse(uint32 farmIndex)
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidFarm
error InvalidFarm(uint32 farmIndex)
InvalidParam
error InvalidParam()
InvalidToken
error InvalidToken(address token)
IsPaused
error IsPaused()
MaxFarms
error MaxFarms()
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162004ee938038062004ee9833981016040819052620000349162000668565b876200004081620001b8565b5060016005556001600160a01b0387166080819052604080516338d52e0f60e01b815290516338d52e0f916004808201926020929091908290030181865afa15801562000091573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b791906200071a565b6001600160a01b0390811660a05286811660c05260068054600780548885166001600160a01b031963ffffffff808d16600160e01b0291909116600160a01b600160e01b039095169490941717909355928616640100000000026001600160c01b031990921642909116171790556127106200013482846200073f565b61ffff1611156200015857604051633494a40d60e21b815260040160405180910390fd5b6007805461ffff838116600160e01b0261ffff60e01b19918616600160d01b029190911663ffffffff60d01b199092169190911717905560a051620001aa906001600160a01b03168760001962000235565b50505050505050506200080d565b6000546001600160a01b031615620001e357604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200021357604051634726455360e11b8152600060048201526024015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200028f90859083906200030b16565b62000305576040516001600160a01b038416602482015260006044820152620002f990859063095ea7b360e01b9060640160408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b0393841617905290620003bb16565b620003058482620003bb565b50505050565b6000806000846001600160a01b0316846040516200032a919062000796565b6000604051808303816000865af19150503d806000811462000369576040519150601f19603f3d011682016040523d82523d6000602084013e6200036e565b606091505b50915091508180156200039c5750805115806200039c5750808060200190518101906200039c9190620007b4565b8015620003b257506001600160a01b0385163b15155b95945050505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200040a906001600160a01b03851690849062000494565b90508051600014806200042e5750808060200190518101906200042e9190620007b4565b6200048f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200020a565b505050565b6060620004a58484600085620004ad565b949350505050565b606082471015620005105760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200020a565b600080866001600160a01b031685876040516200052e919062000796565b60006040518083038185875af1925050503d80600081146200056d576040519150601f19603f3d011682016040523d82523d6000602084013e62000572565b606091505b509092509050620005868783838762000591565b979650505050505050565b6060831562000605578251600003620005fd576001600160a01b0385163b620005fd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200020a565b5081620004a5565b620004a583838151156200061c5781518083602001fd5b8060405162461bcd60e51b81526004016200020a9190620007d8565b80516001600160a01b03811681146200065057600080fd5b919050565b805161ffff811681146200065057600080fd5b600080600080600080600080610100898b0312156200068657600080fd5b620006918962000638565b9750620006a160208a0162000638565b9650620006b160408a0162000638565b9550606089015163ffffffff81168114620006cb57600080fd5b9450620006db60808a0162000638565b9350620006eb60a08a0162000638565b9250620006fb60c08a0162000655565b91506200070b60e08a0162000655565b90509295985092959890939650565b6000602082840312156200072d57600080fd5b620007388262000638565b9392505050565b61ffff8181168382160190808211156200076957634e487b7160e01b600052601160045260246000fd5b5092915050565b60005b838110156200078d57818101518382015260200162000773565b50506000910152565b60008251620007aa81846020870162000770565b9190910192915050565b600060208284031215620007c757600080fd5b815180151581146200073857600080fd5b6020815260008251806020840152620007f981604085016020870162000770565b601f01601f19169190910160400192915050565b60805160a05160c051614604620008e56000396000818161040901528181610905015281816111380152818161120501528181611d22015281816128bb01528181612a1401528181612ee801528181612fa2015281816136300152818161371501526137a001526000818161038c01528181610696015281816109a6015281816111160152818161119e015281816111e30152818161125c015281816116ee01528181611ce70152818161285b01528181612e0c01526130bd015260008181610791015281816107e80152610db301526146046000f3fe608060405234801561001057600080fd5b50600436106102c75760003560e01c8063a42dce801161017b578063d6c9b0dc116100d8578063ebbc49651161008c578063fbb090f711610071578063fbb090f714610779578063fbfa77cf1461078c578063ffe90f40146107b357600080fd5b8063ebbc496514610766578063f20976111461076e57600080fd5b8063e03c209c116100bd578063e03c209c146106f6578063e0b10a9214610716578063e9dd757e1461072957600080fd5b8063d6c9b0dc146106b8578063daeccc79146106c857600080fd5b8063b9d4e8791161012f578063bfccf0ec11610114578063bfccf0ec14610663578063c415b95c14610676578063c8ef95ae1461069157600080fd5b8063b9d4e879146105f5578063baaaa7b11461065057600080fd5b8063a7229fd911610160578063a7229fd9146105bc578063b1f8100d146105cf578063b6b55f25146105e257600080fd5b8063a42dce8014610596578063a4478e89146105a957600080fd5b80634f5a19df1161022957806380682788116101dd5780638da5cb5b116101c25780638da5cb5b146105405780639c1b2f70146105535780639c82f2a41461058357600080fd5b8063806827881461050a57806380f51c121461051d57600080fd5b806366c508ee1161020e57806366c508ee146104b85780637180c8ca146104e45780637719df79146104f757600080fd5b80634f5a19df1461040457806353fd88bf1461042b57600080fd5b80632b9689581161028057806338d52e0f1161026557806338d52e0f1461038a5780633df34730146103b057806346fbf68e146103d857600080fd5b80632b9689581461035d578063333f90d21461036557600080fd5b806301ffc9a7116102b157806301ffc9a7146102fa578063167885cb1461031d5780632b3297f91461033257600080fd5b8062f714ce146102cc57806301e1d114146102f2575b600080fd5b6102df6102da366004613e08565b6107db565b6040519081526020015b60405180910390f35b6102df6108d4565b61030d610308366004613e68565b610afb565b60405190151581526020016102e9565b61033061032b366004613e95565b610b94565b005b600654610345906001600160a01b031681565b6040516001600160a01b0390911681526020016102e9565b610330610eb5565b6007546103759063ffffffff1681565b60405163ffffffff90911681526020016102e9565b7f0000000000000000000000000000000000000000000000000000000000000000610345565b6103c36103be366004613edc565b610fbc565b604080519283526020830191909152016102e9565b61030d6103e6366004613ef7565b6001600160a01b031660009081526003602052604090205460ff1690565b6103457f000000000000000000000000000000000000000000000000000000000000000081565b6104ab610439366004613f14565b60408051606080820183526000808352602080840182905292840181905293845260088252928290208251938401835280546001600160a01b0390811685526001909101549081169184019190915274010000000000000000000000000000000000000000900461ffff169082015290565b6040516102e99190613f2d565b600654610375907801000000000000000000000000000000000000000000000000900463ffffffff1681565b6103306104f2366004613f6e565b611368565b610330610505366004613fe8565b611431565b61037561051836600461403f565b611564565b61030d61052b366004613ef7565b60036020526000908152604090205460ff1681565b600054610345906001600160a01b031681565b600654610375907c0100000000000000000000000000000000000000000000000000000000900463ffffffff1681565b610330610591366004613ef7565b61195c565b6103306105a4366004613ef7565b611a60565b6103306105b736600461405d565b611b64565b6103306105ca366004614079565b611c9a565b6103306105dd366004613ef7565b611df9565b6102df6105f0366004613f14565b611f08565b6007546040805161ffff7a0100000000000000000000000000000000000000000000000000008404811682527c01000000000000000000000000000000000000000000000000000000009093049092166020830152016102e9565b61033061065e3660046140ba565b611fa7565b6103306106713660046140cc565b61201b565b6007546103459064010000000090046001600160a01b031681565b6103457f000000000000000000000000000000000000000000000000000000000000000081565b600454610100900460ff1661030d565b61030d6106d6366004614154565b600160209081526000928352604080842090915290825290205460ff1681565b610709610704366004614180565b6121ea565b6040516102e991906141c2565b610330610724366004613edc565b612305565b600754610753907801000000000000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016102e9565b6103306123dc565b60045460ff1661030d565b610330610787366004613edc565b612477565b6103457f000000000000000000000000000000000000000000000000000000000000000081565b6006546103759074010000000000000000000000000000000000000000900463ffffffff1681565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461082657604051633006171960e21b815260040160405180910390fd5b600454610100900460ff1615610868576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006547801000000000000000000000000000000000000000000000000900463ffffffff1680156108c25763ffffffff81166000908152600860205260409020546108bd906001600160a01b03168585612736565b6108cc565b6108cc8484612882565b949350505050565b6040517fce96cb770000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ce96cb7790602401602060405180830381865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190614265565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190614265565b610a2391906142ad565b6006549091507801000000000000000000000000000000000000000000000000900463ffffffff168015610af75763ffffffff8116600090815260086020526040908190205490517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aea9190614265565b610af490836142ad565b91505b5090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe6413d3e000000000000000000000000000000000000000000000000000000001480610b8e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610bc2336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b610bdf57604051633006171960e21b815260040160405180910390fd5b6000610beb82846142c0565b600754909150600090610c429061ffff7c010000000000000000000000000000000000000000000000000000000082048116917a0100000000000000000000000000000000000000000000000000009004166142c0565b90508061ffff168261ffff161115610c86576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006547801000000000000000000000000000000000000000000000000900463ffffffff168015610d815763ffffffff81166000908152600860209081526040808320600754825160a080820185528682528186018790528185018790526060808301889052608092830197909752845190810185526006546001600160a01b0390811682526401000000008404169581018690529384019490945261ffff7a01000000000000000000000000000000000000000000000000000082048116958401959095527c0100000000000000000000000000000000000000000000000000000000900490931691810191909152610d81918391612af2565b6040517fdb686a9200000000000000000000000000000000000000000000000000000000815261ffff841660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063db686a9290602401600060405180830381600087803b158015610dff57600080fd5b505af1158015610e13573d6000803e3d6000fd5b5050600780547fffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffff167a01000000000000000000000000000000000000000000000000000061ffff998a16027fffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16177c01000000000000000000000000000000000000000000000000000000009790981696909602969096179094555050505050565b610ee3336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b610f0057604051633006171960e21b815260040160405180910390fd5b6002546001600160a01b031661dead14610f5a576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600080610fed336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b61100a57604051633006171960e21b815260040160405180910390fd5b6006546007546110439163ffffffff7c0100000000000000000000000000000000000000000000000000000000909104811691166142db565b63ffffffff16421015611082576040517f0965fe8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065463ffffffff780100000000000000000000000000000000000000000000000090910481169084168190036110ed576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602401610f51565b8063ffffffff166000036111635761110760001930612882565b925061115e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006000612c73565b6111c8565b63ffffffff81166000908152600860205260409020546001600160a01b031661118f8160001930612736565b93506111c66001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016826000612c73565b505b8363ffffffff1660000361123e5761122c6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000600019612c73565b611237600019612dcd565b9150611297565b600061124985613020565b8054909150611287906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116600019612c73565b6112938160001961307e565b9250505b8363ffffffff168163ffffffff167fccd53c3896a17d52f0ed1324676dd5e0ede4403237c8fa3fcc2d979b8fbdf9cd85856040516112df929190918252602082015260400190565b60405180910390a350600680547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff95861602179055600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016429094169390931790925591565b611396336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b6113b357604051633006171960e21b815260040160405180910390fd5b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fa11b5803b8a35081b8f993e0dee5bc30301a3d83f644e5ab2ff39f972f0a807f91015b60405180910390a25050565b611439613264565b60006114f6826040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526006546001600160a01b039081168252928316602082015260075464010000000081049093169181019190915261ffff7a0100000000000000000000000000000000000000000000000000008304811660608301527c0100000000000000000000000000000000000000000000000000000000909204909116608082015290565b9050600083815b8181101561155157868682818110611517576115176142f8565b905060200201602081019061152c9190613edc565b92506115418361153b85613020565b86612af2565b61154a81614327565b90506114fd565b5050505061155f6001600555565b505050565b6000611594336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b6115b157604051633006171960e21b815260040160405180910390fd5b60065474010000000000000000000000000000000000000000900463ffffffff166115dd8160016142db565b915060648263ffffffff161115611620576040517fe7d84d3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416611668576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610f51565b60015b8163ffffffff1681116116e6576000818152600860205260409020546001600160a01b038087169116036116d6576040517ff502580c0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610f51565b6116df81614327565b905061166b565b5060008490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117789190614341565b6001600160a01b0316146117c0576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610f51565b6000816001600160a01b031663d1af0c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611800573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118249190614341565b604080516060810182526001600160a01b038581168252838116602080840182815261ffff8c811686880181815263ffffffff8e166000818152600887528a9020985189547fffffffffffffffffffffffff00000000000000000000000000000000000000001690891617895593516001909801805491519888167fffffffffffffffffffff00000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000098909316880292909217909155600680547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1696830296909617909555945193845294955093908a1692917f40032011cd38f71f1db4539ff3abb7e04d98b006860b103a2b47b88e66e11d1e910160405180910390a450505092915050565b61198a336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b6119a757604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166119f2576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610f51565b6040516001600160a01b038216907f673779832598d6a388768ee342f8de96fdd5c39a468a6955377cf1405b9652b990600090a2600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611a8e336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b611aab57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611aee576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610f51565b6040516001600160a01b038216907f12e1d17016b94668449f97876f4a8d5cc2c19f314db337418894734037cc19d490600090a2600780546001600160a01b03909216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909216919091179055565b611b92336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b611baf57604051633006171960e21b815260040160405180910390fd5b8163ffffffff16600003611c0b57600780547fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000061ffff841602179055611c5e565b6000611c1683613020565b60010180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff851602179055505b60405161ffff8216815263ffffffff8316907f66be5b08f526b0e0cc36cb124047865903d3418ced93c1b0416f638f82562e6690602001611425565b611cc8336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b611ce557604051633006171960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480611d5657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611d98576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610f51565b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f909683604051611ddd91815260200190565b60405180910390a361155f6001600160a01b03841683836132d7565b611e27336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b611e4457604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611e8f576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610f51565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60045460009060ff1615611f48576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006547801000000000000000000000000000000000000000000000000900463ffffffff168015611f975763ffffffff81166000908152600860205260409020611f92908461307e565b611fa0565b611fa083612dcd565b9392505050565b3360009081526003602052604090205460ff16611fd757604051633006171960e21b815260040160405180910390fd5b7f803ee193075547dae36361498f3de5e399cdb29b7e0c7b680533f3da8b733a1781604051612006919061435e565b60405180910390a180600461155f828261438e565b612049336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b61206657604051633006171960e21b815260040160405180910390fd5b6001600160a01b0383166120b1576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610f51565b604080518082019091526000808252602082015260005b828110156121e3578383828181106120e2576120e26142f8565b9050604002018036038101906120f8919061443e565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b038716600090815260018352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556121dc81614327565b90506120c8565b5050505050565b6060818067ffffffffffffffff8111156122065761220661440f565b60405190808252806020026020018201604052801561227457816020015b6040805161010081018252600060a0820181815260c0830182905260e083018290528252602080830182905292820181905260608201819052608082015282526000199092019101816122245790505b5091506000805b828110156122fc57858582818110612295576122956142f8565b90506020020160208101906122aa9190613edc565b915063ffffffff8216156122c6576122c182613320565b6122ce565b6122ce6135c2565b8482815181106122e0576122e06142f8565b6020026020010181905250806122f590614327565b905061227b565b50505092915050565b612333336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b61235057604051633006171960e21b815260040160405180910390fd5b60405163ffffffff821681527f79a8c8930b01b620d54b4289ec196f684937339f4c2dff20275104f45c9efc679060200160405180910390a16006805463ffffffff9092167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002546001600160a01b0316331461240757604051633006171960e21b815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6124a5336000357fffffffff0000000000000000000000000000000000000000000000000000000016612a8a565b6124c257604051633006171960e21b815260040160405180910390fd5b60065463ffffffff780100000000000000000000000000000000000000000000000090910481169082160361252b576040517fac5fe34900000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610f51565b600061253682613020565b80546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506001600160a01b03169060009082906370a0823190602401602060405180830381865afa15801561259c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c09190614265565b118061264b57506040517e8cc2620000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b03831690628cc26290602401602060405180830381865afa158015612625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126499190614265565b115b1561268a576040517fac5fe34900000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610f51565b60018201546040516001600160a01b039182169183169063ffffffff8616907f52f6b3134cda42efd04170548e5a235689152247e670abfb5d21f3d1f74c768b90600090a4505063ffffffff16600090815260086020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010180547fffffffffffffffffffff00000000000000000000000000000000000000000000169055565b6000600019831461274757826127c8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156127a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c89190614265565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529091506001600160a01b03851690632e1a7d4d90602401600060405180830381600087803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b505050506001600160a01b0382163014611fa057611fa06001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683836132d7565b600060001983036129cc576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ba0876529082906370a0823190602401602060405180830381865afa158015612912573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129369190614265565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b03851660248201523060448201526064016020604051808303816000875af11580156129a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c59190614265565b9050610b8e565b506040517fb460af94000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b03828116602483015230604483015283917f00000000000000000000000000000000000000000000000000000000000000009091169063b460af94906064016020604051808303816000875af1158015612a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a839190614265565b5092915050565b600080546001600160a01b0384811691161480611fa057506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff169392505050565b60018201548254604080517f3d18b91200000000000000000000000000000000000000000000000000000000815290516001600160a01b039384169390921691633d18b9129160048082019260009290919082900301818387803b158015612b5957600080fd5b505af1158015612b6d573d6000803e3d6000fd5b50506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600092506001600160a01b03841691506370a0823190602401602060405180830381865afa158015612bd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf59190614265565b90506000806000612c07858588613828565b919450925090508315612c695760408051848152602081018490529081018290526001600160a01b0386169063ffffffff8a16907f5ee6919d20d62dd998902378af19440d5c2b47d5aedecef678834818e07bdfb39060600160405180910390a35b5050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052612cf284826138da565b612dc7576040516001600160a01b038416602482015260006044820152612dbd9085907f095ea7b300000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613981565b612dc78482613981565b50505050565b60006000198214612dde5781612e7f565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e7f9190614265565b9050801561301b576007547801000000000000000000000000000000000000000000000000900461ffff166000819003612f63576040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018390523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af1158015612f39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5d9190614265565b50613019565b6040517f9b8d6d380000000000000000000000000000000000000000000000000000000081526004810183905230602482015261ffff821660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639b8d6d38906064016020604051808303816000875af1158015612ff3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130179190614265565b505b505b919050565b63ffffffff8116600090815260086020526040902080546001600160a01b031661301b576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610f51565b6000600019821461308f5781613130565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561310c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131309190614265565b90508015610b8e57600183015474010000000000000000000000000000000000000000900461ffff1660008190036131dd5783546040517fa694fc3a000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a694fc3a90602401600060405180830381600087803b1580156131c057600080fd5b505af11580156131d4573d6000803e3d6000fd5b50505050612a83565b83546040517f42ea02c10000000000000000000000000000000000000000000000000000000081526004810184905261ffff831660248201526001600160a01b03909116906342ea02c190604401600060405180830381600087803b15801561324557600080fd5b505af1158015613259573d6000803e3d6000fd5b505050505092915050565b6002600554036132d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610f51565b6002600555565b6040516001600160a01b03831660248201526044810182905261155f9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612d3b565b6040805161010081018252600060a0820181815260c0830182905260e0830182905282526020820181905291810182905260608101829052608081019190915263ffffffff8216600090815260086020908152604091829020825160608101845281546001600160a01b03908116808352600190930154908116938201939093527401000000000000000000000000000000000000000090920461ffff169282019290925290156130195780825280516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561342e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134529190614265565b82602001818152505080600001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c19190614265565b82604001818152505080600001516001600160a01b0316637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561350c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135309190614265565b606083015280516040517e8cc2620000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0390911690628cc26290602401602060405180830381865afa158015613593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b79190614265565b608083015250919050565b6040805161010081018252600060a0820181815260c0830182905260e083018290528252602082018190529181018290526060810182905260808101919091526040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa158015613687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ab9190614265565b6040518263ffffffff1660e01b81526004016136c991815260200190565b602060405180830381865afa1580156136e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061370a9190614265565b8160200181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015613771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137959190614265565b8160400181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166303607ceb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138209190614265565b606082015290565b600080600061384f846060015161ffff16612710600088613a83909392919063ffffffff16565b92508215613871576020840151613871906001600160a01b03881690856132d7565b608084015161388a90869061ffff166127106000613a83565b915081156138ac5760408401516138ac906001600160a01b03881690846132d7565b508184038181039082146138d15783516138d1906001600160a01b03881690836132d7565b93509350939050565b6000806000846001600160a01b0316846040516138f791906144e6565b6000604051808303816000865af19150503d8060008114613934576040519150601f19603f3d011682016040523d82523d6000602084013e613939565b606091505b50915091508180156139635750805115806139635750808060200190518101906139639190614502565b801561397857506001600160a01b0385163b15155b95945050505050565b60006139d6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b169092919063ffffffff16565b90508051600014806139f75750808060200190518101906139f79190614502565b61155f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610f51565b6000613a90858585613b25565b90506001826001811115613aa657613aa661451f565b036108cc578280613ab957613ab961454e565b848609156108cc57600019811015613ad3576001016108cc565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610f51565b60606108cc8484600085613c12565b6000808060001985870985870292508281108382030391505080600003613b5f57838281613b5557613b5561454e565b0492505050611fa0565b838110613ba9576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610f51565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b606082471015613ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610f51565b600080866001600160a01b03168587604051613cc091906144e6565b60006040518083038185875af1925050503d8060008114613cfd576040519150601f19603f3d011682016040523d82523d6000602084013e613d02565b606091505b5091509150613d1387838387613d1e565b979650505050505050565b60608315613da7578251600003613da0576001600160a01b0385163b613da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610f51565b50816108cc565b6108cc8383815115613dbc5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f51919061457d565b6001600160a01b0381168114613e0557600080fd5b50565b60008060408385031215613e1b57600080fd5b823591506020830135613e2d81613df0565b809150509250929050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461301b57600080fd5b600060208284031215613e7a57600080fd5b611fa082613e38565b803561ffff8116811461301b57600080fd5b60008060408385031215613ea857600080fd5b613eb183613e83565b9150613ebf60208401613e83565b90509250929050565b803563ffffffff8116811461301b57600080fd5b600060208284031215613eee57600080fd5b611fa082613ec8565b600060208284031215613f0957600080fd5b8135611fa081613df0565b600060208284031215613f2657600080fd5b5035919050565b81516001600160a01b0390811682526020808401519091169082015260408083015161ffff169082015260608101610b8e565b8015158114613e0557600080fd5b60008060408385031215613f8157600080fd5b8235613f8c81613df0565b91506020830135613e2d81613f60565b60008083601f840112613fae57600080fd5b50813567ffffffffffffffff811115613fc657600080fd5b6020830191508360208260051b8501011115613fe157600080fd5b9250929050565b600080600060408486031215613ffd57600080fd5b833567ffffffffffffffff81111561401457600080fd5b61402086828701613f9c565b909450925050602084013561403481613df0565b809150509250925092565b6000806040838503121561405257600080fd5b8235613eb181613df0565b6000806040838503121561407057600080fd5b613eb183613ec8565b60008060006060848603121561408e57600080fd5b833561409981613df0565b925060208401356140a981613df0565b929592945050506040919091013590565b60006040828403121561301957600080fd5b6000806000604084860312156140e157600080fd5b83356140ec81613df0565b9250602084013567ffffffffffffffff8082111561410957600080fd5b818601915086601f83011261411d57600080fd5b81358181111561412c57600080fd5b8760208260061b850101111561414157600080fd5b6020830194508093505050509250925092565b6000806040838503121561416757600080fd5b823561417281613df0565b9150613ebf60208401613e38565b6000806020838503121561419357600080fd5b823567ffffffffffffffff8111156141aa57600080fd5b6141b685828601613f9c565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b8281101561425857815161421c8582516001600160a01b038082511683528060208301511660208401525061ffff60408201511660408301525050565b80870151606086810191909152868201516080808801919091529082015160a0870152015160c085015260e090930192908501906001016141df565b5091979650505050505050565b60006020828403121561427757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610b8e57610b8e61427e565b61ffff818116838216019080821115612a8357612a8361427e565b63ffffffff818116838216019080821115612a8357612a8361427e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000600019820361433a5761433a61427e565b5060010190565b60006020828403121561435357600080fd5b8151611fa081613df0565b60408101823561436d81613f60565b15158252602083013561437f81613f60565b80151560208401525092915050565b813561439981613f60565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811691151560ff16918217835560208401356143d781613f60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009190911690911790151560081b61ff001617905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006040828403121561445057600080fd5b6040516040810181811067ffffffffffffffff8211171561449a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040526144a683613e38565b815260208301356144b681613f60565b60208201529392505050565b60005b838110156144dd5781810151838201526020016144c5565b50506000910152565b600082516144f88184602087016144c2565b9190910192915050565b60006020828403121561451457600080fd5b8151611fa081613f60565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b602081526000825180602084015261459c8160408501602087016144c2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220b82291e1887365e1e29b4bce20ffd784430f9e52260e7bfceac8f0834fce010e64736f6c63430008130033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d800000000000000000000000000f90a6962e86b5587b4c11ba2b9697dc3ba84800000000000000000000000000a3931d71877c0e7a3148cb7eb4463524fec27fbd000000000000000000000000000000000000000000000000000000000001518000000000000000000000000080b921c724202969295dcf2da2b36e9f052315b4000000000000000000000000781b4c57100738095222bd92d37b07ed034ab69600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000190