0 txs
10.3m calls
constructor
constructor()
functions
comptroller
viewfunction comptroller() view returns (address)
emissionCap
viewfunction emissionCap() view returns (uint256)
getAllMarketConfigs
viewfunction getAllMarketConfigs(address _mToken) view returns (tuple[])
getConfigForMarket
viewfunction getConfigForMarket(address _mToken, address _emissionToken) view returns (tuple)
getCurrentEmissionCap
viewfunction getCurrentEmissionCap() view returns (uint256)
getCurrentOwner
viewfunction getCurrentOwner(address _mToken, address _emissionToken) view returns (address)
getGlobalBorrowIndex
viewfunction getGlobalBorrowIndex(address mToken, uint256 index) view returns (uint256)
getGlobalSupplyIndex
viewfunction getGlobalSupplyIndex(address mToken, uint256 index) view returns (uint256)
getOutstandingRewardsForUser
viewfunction getOutstandingRewardsForUser(address _mToken, address _user) view returns (tuple[])
getOutstandingRewardsForUser
viewfunction getOutstandingRewardsForUser(address _user) view returns (tuple[])
initialIndexConstant
viewfunction initialIndexConstant() view returns (uint224)
marketConfigs
viewfunction marketConfigs(address, uint256) view returns (tuple config)
paused
viewfunction paused() view returns (bool)
pauseGuardian
viewfunction pauseGuardian() view returns (address)
_addEmissionConfig
nonpayablefunction _addEmissionConfig(address _mToken, address _owner, address _emissionToken, uint256 _supplyEmissionPerSec, uint256 _borrowEmissionsPerSec, uint256 _endTime)
_pauseRewards
nonpayablefunction _pauseRewards()
_rescueFunds
nonpayablefunction _rescueFunds(address _tokenAddress, uint256 _amount)
_setEmissionCap
nonpayablefunction _setEmissionCap(uint256 _newEmissionCap)
_setPauseGuardian
nonpayablefunction _setPauseGuardian(address _newPauseGuardian)
_unpauseRewards
nonpayablefunction _unpauseRewards()
_updateBorrowSpeed
nonpayablefunction _updateBorrowSpeed(address _mToken, address _emissionToken, uint256 _newBorrowSpeed)
_updateEndTime
nonpayablefunction _updateEndTime(address _mToken, address _emissionToken, uint256 _newEndTime)
_updateOwner
nonpayablefunction _updateOwner(address _mToken, address _emissionToken, address _newOwner)
_updateSupplySpeed
nonpayablefunction _updateSupplySpeed(address _mToken, address _emissionToken, uint256 _newSupplySpeed)
disburseBorrowerRewards
nonpayablefunction disburseBorrowerRewards(address _mToken, address _borrower, bool _sendTokens)
disburseSupplierRewards
nonpayablefunction disburseSupplierRewards(address _mToken, address _supplier, bool _sendTokens)
initialize
nonpayablefunction initialize(address _comptroller, address _pauseGuardian)
updateMarketBorrowIndex
nonpayablefunction updateMarketBorrowIndex(address _mToken)
updateMarketBorrowIndexAndDisburseBorrowerRewards
nonpayablefunction updateMarketBorrowIndexAndDisburseBorrowerRewards(address _mToken, address _borrower, bool _sendTokens)
updateMarketSupplyIndex
nonpayablefunction updateMarketSupplyIndex(address _mToken)
updateMarketSupplyIndexAndDisburseSupplierRewards
nonpayablefunction updateMarketSupplyIndexAndDisburseSupplierRewards(address _mToken, address _supplier, bool _sendTokens)
events
DisbursedBorrowerRewards
event DisbursedBorrowerRewards(address indexed mToken, address indexed borrower, address indexed emissionToken, uint256 totalAccrued)
DisbursedSupplierRewards
event DisbursedSupplierRewards(address indexed mToken, address indexed supplier, address indexed emissionToken, uint256 totalAccrued)
FundsRescued
event FundsRescued(address token, uint256 amount)
GlobalBorrowIndexUpdated
event GlobalBorrowIndexUpdated(address mToken, address emissionToken, uint256 newIndex, uint32 newTimestamp)
GlobalSupplyIndexUpdated
event GlobalSupplyIndexUpdated(address mToken, address emissionToken, uint256 newSupplyIndex, uint32 newSupplyGlobalTimestamp)
Initialized
event Initialized(uint8 version)
InsufficientTokensToEmit
event InsufficientTokensToEmit(address user, address rewardToken, uint256 amount)
NewBorrowRewardSpeed
event NewBorrowRewardSpeed(address indexed mToken, address indexed emissionToken, uint256 oldRewardSpeed, uint256 newRewardSpeed)
NewConfigCreated
event NewConfigCreated(address indexed mToken, address indexed owner, address indexed emissionToken, uint256 supplySpeed, uint256 borrowSpeed, uint256 endTime)
NewEmissionCap
event NewEmissionCap(uint256 oldEmissionCap, uint256 newEmissionCap)
NewEmissionConfigOwner
event NewEmissionConfigOwner(address indexed mToken, address indexed emissionToken, address currentOwner, address newOwner)
NewPauseGuardian
event NewPauseGuardian(address oldPauseGuardian, address newPauseGuardian)
NewRewardEndTime
event NewRewardEndTime(address indexed mToken, address indexed emissionToken, uint256 currentEndTime, uint256 newEndTime)
NewSupplyRewardSpeed
event NewSupplyRewardSpeed(address indexed mToken, address indexed emissionToken, uint256 oldRewardSpeed, uint256 newRewardSpeed)
Paused
event Paused(address account)
RewardsPaused
event RewardsPaused()
RewardsUnpaused
event RewardsUnpaused()
Unpaused
event Unpaused(address account)
errors
No errors.
creation bytecode
0x60806040523480156200001157600080fd5b506000805460ff19169055600180556200002a62000030565b620000f1565b600254610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60025460ff90811614620000ef576002805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6144bb80620001016000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806373a1f3d01161010f578063c11a70b3116100a2578063e66b98c911610071578063e66b98c914610433578063e88d9c1b14610446578063ea0f3dff1461044e578063ed302dfd1461046157600080fd5b8063c11a70b3146103da578063c9a06b45146103ed578063dbc7779b1461040d578063e0ed91161461042057600080fd5b80638b62a51a116100de5780638b62a51a14610381578063ad1a9280146103a1578063adc75e52146103b4578063b2fa9e10146103c757600080fd5b806373a1f3d0146103285780637e218f901461033b5780637f7336ba1461035b5780638220d7cf1461036e57600080fd5b80633616b04b116101875780635c975abb116101565780635c975abb146102d95780635f5af1aa146102ef5780635fe3b56714610302578063610393a01461031557600080fd5b80633616b04b146102a3578063375fea29146102b6578063472db55d146102be578063485cc955146102c657600080fd5b806310d47dc7116101c357806310d47dc71461023f57806314f557731461025257806324a3d62214610265578063283923801461029057600080fd5b8063019047d6146101ea57806307e8ce85146101ff5780630cd8bbc514610228575b600080fd5b6101fd6101f8366004613b42565b61048e565b005b61021261020d366004613b5f565b610553565b60405161021f9190613b98565b60405180910390f35b61023160065481565b60405190815260200161021f565b6101fd61024d366004613c15565b6109af565b6101fd610260366004613c15565b610a6f565b600554610278906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b6101fd61029e366004613c60565b610b2a565b6101fd6102b1366004613c79565b610c0b565b6101fd610e04565b6101fd610ee7565b6101fd6102d4366004613b5f565b610fb5565b60005460ff16604051901515815260200161021f565b6101fd6102fd366004613b42565b61124e565b600454610278906001600160a01b031681565b6101fd610323366004613c79565b61137e565b610231610336366004613cba565b611537565b61034e610349366004613b42565b611589565b60405161021f9190613d81565b6101fd610369366004613c79565b6116f2565b6101fd61037c366004613b42565b6118ab565b61039461038f366004613b5f565b611964565b60405161021f9190613dc4565b6102786103af366004613b5f565b611a08565b6101fd6103c2366004613c15565b611a27565b6102316103d5366004613cba565b611ae0565b6103946103e8366004613cba565b611b32565b6104006103fb366004613b42565b611bee565b60405161021f9190613dd3565b6101fd61041b366004613cba565b611d61565b6101fd61042e366004613c15565b611fc7565b6101fd610441366004613ea7565b612080565b600654610231565b6101fd61045c366004613ee7565b6121ae565b6104766a0c097ce7bc90715b34b9f160241b81565b6040516001600160e01b03909116815260200161021f565b6004546001600160a01b0316331480610522575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa1580156104e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050d9190613f4c565b6001600160a01b0316336001600160a01b0316145b6105475760405162461bcd60e51b815260040161053e90613f69565b60405180910390fd5b610550816126bc565b50565b6001600160a01b038216600090815260036020526040812080546060929067ffffffffffffffff81111561058957610589613fc7565b6040519080825280602002602001820160405280156105ee57816020015b6105db604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b8152602001906001900390816105a75790505b509050600060405180604001604052806040518060600160405280896001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610647573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066b9190613fdd565b8152602001896001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d29190613fdd565b815260200160405180602001604052808b6001600160a01b031663aa5af0fd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610720573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107449190613fdd565b90529052815260408051808201918290526370a0823160e01b9091526001600160a01b03888116604483015260209092019181908a166370a0823160648301602060405180830381865afa1580156107a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c49190613fdd565b81526040516395dd919360e01b81526001600160a01b038a811660048301526020909201918b16906395dd919390602401602060405180830381865afa158015610812573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108369190613fdd565b90529052905060005b83548110156109a257600084828154811061085c5761085c613ff6565b6000918252602082206005600b9092020190810154600382015460028301548751519395506108a39363ffffffff600160e01b840416926001600160e01b0316919061290f565b600683015460048401546002850154875160208101516040909101519495506000946108f5949363ffffffff600160e01b820416936001600160e01b039091169290916108f09190612ac3565b61290f565b905060006109118484600001518860200151600001518d612ae8565b905060006109328584600001518960000151604001518a602001518f612ba4565b604080516080810190915260018701546001600160a01b031681529091506020810161095e8484614022565b81526020018381526020018281525088878151811061097f5761097f613ff6565b60200260200101819052505050505050808061099a90614035565b91505061083f565b5090925050505b92915050565b6004546001600160a01b0316331480610a43575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610a0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2e9190613f4c565b6001600160a01b0316336001600160a01b0316145b610a5f5760405162461bcd60e51b815260040161053e90613f69565b610a6a838383612c73565b505050565b6004546001600160a01b0316331480610b03575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee9190613f4c565b6001600160a01b0316336001600160a01b0316145b610b1f5760405162461bcd60e51b815260040161053e90613f69565b610a6a838383612e35565b60048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190613f4c565b6001600160a01b0316336001600160a01b031614610bc55760405162461bcd60e51b815260040161053e9061404e565b600680549082905560408051828152602081018490527f8d2ad4bb95e94ce8d50ed07769a97467ba4db3f80fc0badf6c81d0907a0b410a91015b60405180910390a15050565b82826000610c1983836130ed565b80549091506001600160a01b0316331480610caf575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9a9190613f4c565b6001600160a01b0316336001600160a01b0316145b610ccb5760405162461bcd60e51b815260040161053e9061409f565b6000610cd787876130ed565b6002810154909150808611610d3a5760405162461bcd60e51b8152602060048201526024808201527f5f6e6577456e6454696d65204d555354206265203e2063757272656e74456e6460448201526354696d6560e01b606482015260840161053e565b428611610d975760405162461bcd60e51b815260206004820152602560248201527f5f6e6577456e6454696d65204d555354206265203e20626c6f636b2e74696d6560448201526407374616d760dc1b606482015260840161053e565b610da0886126bc565b610da9886131cc565b6002820186905560408051828152602081018890526001600160a01b03808a1692908b16917f10f16113484fbc6e60553a394eb2a3ae47999b610e4212fad6903486dbca7f9291015b60405180910390a35050505050505050565b6005546001600160a01b0316331480610e98575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613f4c565b6001600160a01b0316336001600160a01b0316145b610eb45760405162461bcd60e51b815260040161053e90614106565b610ebc613335565b6040517fb83b93884b98604cbc549e7e4a81a9e49bd62c603026ec82f04915037258c56490600090a1565b60048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f529190613f4c565b6001600160a01b0316336001600160a01b031614610f825760405162461bcd60e51b815260040161053e9061404e565b610f8a61338f565b6040517f24abc2b8df8d63728da8fe06c1555853a3f293f812e1ebd4303a5d6df7173e6c90600090a1565b600254610100900460ff1615808015610fd55750600254600160ff909116105b80610fef5750303b158015610fef575060025460ff166001145b6110525760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161053e565b6002805460ff191660011790558015611075576002805461ff0019166101001790555b6001600160a01b0383166110d75760405162461bcd60e51b815260206004820152602360248201527f436f6d7074726f6c6c65722063616e277420626520746865203020616464726560448201526273732160e81b606482015260840161053e565b6001600160a01b0382166110fd5760405162461bcd60e51b815260040161053e9061416f565b600480546001600160a01b0319166001600160a01b038516908117825560408051623f1ee960e11b815290519192627e3dd29282820192602092908290030181865afa158015611151573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117591906141b5565b6111db5760405162461bcd60e51b815260206004820152603160248201527f43616e27742062696e6420746f20736f6d657468696e6720746861742773206e6044820152706f74206120636f6d7074726f6c6c65722160781b606482015260840161053e565b600580546001600160a01b0319166001600160a01b03841617905568056bc75e2d631000006006558015610a6a576002805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b6005546001600160a01b03163314806112e2575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa1580156112a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cd9190613f4c565b6001600160a01b0316336001600160a01b0316145b6112fe5760405162461bcd60e51b815260040161053e90614106565b6001600160a01b0381166113245760405162461bcd60e51b815260040161053e9061416f565b600580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e9101610bff565b8282600061138c83836130ed565b80549091506001600160a01b0316331480611422575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d9190613f4c565b6001600160a01b0316336001600160a01b0316145b61143e5760405162461bcd60e51b815260040161053e9061409f565b600061144a87876130ed565b60058101549091508086036114c05760405162461bcd60e51b815260206004820152603660248201527f43616e277420736574206e657720737570706c7920656d697373696f6e7320746044820152756f20626520657175616c20746f2063757272656e742160501b606482015260840161053e565b60065486106114e15760405162461bcd60e51b815260040161053e906141d2565b6114ea886131cc565b6005820186905560408051828152602081018890526001600160a01b03808a1692908b16917fc4d50731808aa5d941c471c0b29364fecd810aa0565344f6cdcab2c873422baf9101610df2565b6001600160a01b038216600090815260036020526040812080548291908490811061156457611564613ff6565b60009182526020909120600b90910201600301546001600160e01b0316949350505050565b6001600160a01b038116600090815260036020526040812080546060929067ffffffffffffffff8111156115bf576115bf613fc7565b6040519080825280602002602001820160405280156115f857816020015b6115e5613ae1565b8152602001906001900390816115dd5790505b50905060005b82548110156116ea57600083828154811061161b5761161b613ff6565b60009182526020918290206040805161012081018252600b90930290910180546001600160a01b0390811684526001820154169383019390935260028301549082015260038201546001600160e01b03808216606084015263ffffffff600160e01b9283900481166080850152600485015491821660a08501529190041660c0820152600582015460e082015260068201546101008201528451919250908490849081106116cb576116cb613ff6565b60200260200101819052505080806116e290614035565b9150506115fe565b509392505050565b8282600061170083836130ed565b80549091506001600160a01b0316331480611796575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa15801561175d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117819190613f4c565b6001600160a01b0316336001600160a01b0316145b6117b25760405162461bcd60e51b815260040161053e9061409f565b60006117be87876130ed565b60068101549091508086036118345760405162461bcd60e51b815260206004820152603660248201527f43616e277420736574206e657720626f72726f7720656d697373696f6e7320746044820152756f20626520657175616c20746f2063757272656e742160501b606482015260840161053e565b60065486106118555760405162461bcd60e51b815260040161053e9061422f565b61185e886126bc565b6006820186905560408051828152602081018890526001600160a01b03808a1692908b16917f8fc43850ed5c7aaa0ce83829a1a40202c3fcf8257788d69881611dff1a0b32e99101610df2565b6004546001600160a01b031633148061193f575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015611906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192a9190613f4c565b6001600160a01b0316336001600160a01b0316145b61195b5760405162461bcd60e51b815260040161053e90613f69565b610550816131cc565b61196c613ae1565b600061197884846130ed565b604080516101208101825282546001600160a01b039081168252600184015416602082015260028301549181019190915260038201546001600160e01b03808216606084015263ffffffff600160e01b9283900481166080850152600485015491821660a08501529190041660c0820152600582015460e082015260069091015461010082015291505092915050565b600080611a1584846130ed565b546001600160a01b0316949350505050565b6004546001600160a01b0316331480611abb575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015611a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa69190613f4c565b6001600160a01b0316336001600160a01b0316145b611ad75760405162461bcd60e51b815260040161053e90613f69565b610b1f836126bc565b6001600160a01b0382166000908152600360205260408120805482919084908110611b0d57611b0d613ff6565b60009182526020909120600b90910201600401546001600160e01b0316949350505050565b60036020528160005260406000208181548110611b4e57600080fd5b60009182526020918290206040805161012081018252600b90930290910180546001600160a01b0390811684526001820154169383019390935260028301549082015260038201546001600160e01b03808216606084015263ffffffff600160e01b9283900481166080850152600485015491821660a08501529190041660c0820152600582015460e08201526006909101546101008201529150829050565b600480546040805163b0772d0b60e01b815290516060936000936001600160a01b03169263b0772d0b928183019286928290030181865afa158015611c37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c5f919081019061429c565b90506000815167ffffffffffffffff811115611c7d57611c7d613fc7565b604051908082528060200260200182016040528015611cc357816020015b604080518082019091526000815260606020820152815260200190600190039081611c9b5790505b50905060005b82518110156116ea576000611cf7848381518110611ce957611ce9613ff6565b602002602001015187610553565b90506040518060400160405280858481518110611d1657611d16613ff6565b60200260200101516001600160a01b0316815260200182815250838381518110611d4257611d42613ff6565b6020026020010181905250508080611d5990614035565b915050611cc9565b60048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015611da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcc9190613f4c565b6001600160a01b0316336001600160a01b031614611dfc5760405162461bcd60e51b815260040161053e9061404e565b8160018201611efd57611ef8600460009054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7f9190613f4c565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee79190613fdd565b6001600160a01b03841691906133c8565b611f88565b611f88600460009054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190613f4c565b6001600160a01b03831690846133c8565b604080516001600160a01b0385168152602081018490527fc4474c2790e13695f6d2b6f1d8e164290b55370f87a542fd7711abe0a1bf40ac9101611241565b6004546001600160a01b031633148061205b575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa158015612022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120469190613f4c565b6001600160a01b0316336001600160a01b0316145b6120775760405162461bcd60e51b815260040161053e90613f69565b610a5f836131cc565b8282600061208e83836130ed565b80549091506001600160a01b0316331480612124575060048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa1580156120eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210f9190613f4c565b6001600160a01b0316336001600160a01b0316145b6121405760405162461bcd60e51b815260040161053e9061409f565b600061214c87876130ed565b80546001600160a01b038781166001600160a01b03198316811784556040805193831680855260208501929092529394509289821692918b16917f6ca67f2e3675f2b549fe77271364ebde88b3c7eb3ef84af329c373ca64fa25789101610df2565b60048054604080516303e1469160e61b815290516001600160a01b039092169263f851a4409282820192602092908290030181865afa1580156121f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122199190613f4c565b6001600160a01b0316336001600160a01b0316146122495760405162461bcd60e51b815260040161053e9061404e565b60048054604051638e8f294b60e01b81526001600160a01b038981169382019390935260009290911690638e8f294b906024016040805180830381865afa158015612298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122bc9190614361565b509050806123235760405162461bcd60e51b815260206004820152602e60248201527f546865206d61726b65742072657175657374656420746f20626520616464656460448201526d20697320756e2d6c69737465642160901b606482015260840161053e565b60065484106123445760405162461bcd60e51b815260040161053e906141d2565b60065483106123655760405162461bcd60e51b815260040161053e9061422f565b612370426001614022565b82116123d45760405162461bcd60e51b815260206004820152602d60248201527f546865205f656e6454696d6520706172616d65746572206d757374206265206960448201526c6e20746865206675747572652160981b606482015260840161053e565b6001600160a01b0387166000908152600360205260408120905b815481101561249057600082828154811061240b5761240b613ff6565b60009182526020909120600b9091020160018101549091506001600160a01b0389811691160361247d5760405162461bcd60e51b815260206004820152601e60248201527f456d697373696f6e20746f6b656e20616c7265616479206c6973746564210000604482015260640161053e565b508061248881614035565b9150506123ee565b506000604051806101200160405280896001600160a01b03168152602001886001600160a01b031681526020018581526020016a0c097ce7bc90715b34b9f160241b6001600160e01b0316815260200161251f426040518060400160405280601f81526020017f626c6f636b2074696d657374616d70206578636565647320333220626974730081525061341a565b63ffffffff1681526020016a0c097ce7bc90715b34b9f160241b6001600160e01b03168152602001612586426040518060400160405280601f81526020017f626c6f636b2074696d657374616d70206578636565647320333220626974730081525061341a565b63ffffffff168152602001878152602001868152509050866001600160a01b0316886001600160a01b03168a6001600160a01b03167fa76959d76a349a0b8fd3120607e3aea6af58897ae6531bfe60a0267c4ea0c2728989896040516125ff939291909283526020830191909152604082015260600190565b60405180910390a481546001818101845560009384526020938490208351600b9093020180546001600160a01b039384166001600160a01b03199182161782559484015191810180549290931691909416179055604081015160028301556060810151608082015163ffffffff908116600160e01b9081026001600160e01b0393841617600386015560a084015160c085015190921602911617600483015560e08101516005830155610100015160069091015550505050505050565b6001600160a01b0381166000818152600360209081526040808320815180840180845263aa5af0fd60e01b905291519094919283929163aa5af0fd91602480860192908187030181865afa158015612718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273c9190613fdd565b81525090506000836001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015612781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a59190613fdd565b905060005b83548110156129085760008482815481106127c7576127c7613ff6565b6000918252602082206006600b90920201908101546004820154600283015492945061280f9263ffffffff600160e01b830416916001600160e01b0316906108f0898b612ac3565b905080600001518260000160040160006101000a8154816001600160e01b0302191690836001600160e01b03160217905550806020015182600001600401601c6101000a81548163ffffffff021916908363ffffffff1602179055507f24b735e493aede533ed6134442bad7e2ea2e72d71739de4c97f020174f5e3bcd878360000160010160009054906101000a90046001600160a01b03168460000160040160009054906101000a90046001600160e01b031685600001600401601c9054906101000a900463ffffffff166040516128eb949392919061438f565b60405180910390a15050808061290090614035565b9150506127aa565b5050505050565b60408051808201909152600080825260208201526000612964426040518060400160405280601f81526020017f626c6f636b2074696d657374616d70206578636565647320333220626974730081525061341a565b9050600061297e8263ffffffff168863ffffffff1661344a565b9050848263ffffffff1611156129b757848763ffffffff1610156129b3576129ac858863ffffffff1661344a565b90506129b7565b5060005b8015806129c2575087155b156129f4576040518060400160405280876001600160e01b031681526020018363ffffffff1681525092505050612aba565b6000612a00828a613484565b90506000808611612a205760405180602001604052806000815250612a2a565b612a2a82876134c6565b90506000612a8c612a5260405180602001604052808c6001600160e01b03168152508461350a565b5160408051808201909152601a81527f6e657720696e64657820657863656564732032323420626974730000000000006020820152613536565b90506040518060400160405280826001600160e01b031681526020018663ffffffff16815250955050505050505b95945050505050565b6000612ae1612ada84670de0b6b3a7640000613484565b835161355d565b9392505050565b6001600160a01b038116600090815260078501602052604081205480158015612b2857506a0c097ce7bc90715b34b9f160241b6001600160e01b03861610155b15612b3e57506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280612b5e886001600160e01b03168561344a565b905290506000612b6e8683613590565b6001600160a01b038616600090815260088a016020526040902054909150612b9690826135b9565b93505050505b949350505050565b6001600160a01b038116600090815260098601602052604081205480158015612be457506a0c097ce7bc90715b34b9f160241b6001600160e01b03871610155b15612bfa57506a0c097ce7bc90715b34b9f160241b5b60006040518060200160405280612c1a896001600160e01b03168561344a565b81525090506000612c2f866020015188612ac3565b90506000612c3d8284613590565b6001600160a01b0387166000908152600a8c016020526040902054909150612c6590826135b9565b9a9950505050505050505050565b6001600160a01b0383811660008181526003602052604080822090516370a0823160e01b81529386166004850152929091906370a0823190602401602060405180830381865afa158015612ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cef9190613fdd565b905060005b8254811015612e2d576000838281548110612d1157612d11613ff6565b6000918252602082206003600b9092020190810154909250612d3f9083906001600160e01b0316868a612ae8565b60038301546001600160a01b03808a16600081815260078701602090815260408083206001600160e01b039096169095556008880190528390208490556001860154925193945091811692908b16907f51761e1f6548bc99f2a61f299986e1b08a489f06622f689a413e02d7654a476690612dbd9086815260200190565b60405180910390a48515612e18576001600160a01b03808816600090815260088401602052604081205460018501549192612dfb928b9291166135ef565b6001600160a01b0389166000908152600885016020526040902055505b50508080612e2590614035565b915050612cf4565b505050505050565b6001600160a01b0383166000818152600360209081526040808320815180840180845263aa5af0fd60e01b905291519094919283929163aa5af0fd91602480860192908187030181865afa158015612e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb59190613fdd565b905260408051808201918290526370a0823160e01b9091526001600160a01b038681166044830152919250600091819088166370a0823160648301602060405180830381865afa158015612f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f319190613fdd565b81526040516395dd919360e01b81526001600160a01b0388811660048301526020909201918916906395dd919390602401602060405180830381865afa158015612f7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa39190613fdd565b9052905060005b83548110156130e4576000848281548110612fc757612fc7613ff6565b6000918252602082206004600b9092020190810154909250612ff69083906001600160e01b031687878c612ba4565b60048301546001600160a01b03808b16600081815260098701602090815260408083206001600160e01b03909616909555600a880190528390208490556001860154925193945091811692908c16907f48a32d6daeb4317b45f49c3a1c0b1bd7d53a175d1f46c425138e328900cdccb4906130749086815260200190565b60405180910390a486156130cf576001600160a01b038089166000908152600a84016020526040812054600185015491926130b2928c9291166135ef565b6001600160a01b038a166000908152600a85016020526040902055505b505080806130dc90614035565b915050612faa565b50505050505050565b6001600160a01b0382166000908152600360205260408120815b815481101561316b57600082828154811061312457613124613ff6565b60009182526020909120600b9091020160018101549091506001600160a01b038681169116036131585792506109a9915050565b508061316381614035565b915050613107565b5060405162461bcd60e51b815260206004820152602f60248201527f556e61626c6520746f2066696e6420656d697373696f6e20746f6b656e20696e60448201526e206d546f6b656e20636f6e6669677360881b606482015260840161053e565b6001600160a01b038116600081815260036020908152604080832081516318160ddd60e01b815291519094926318160ddd92600480820193918290030181865afa15801561321e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132429190613fdd565b905060005b825481101561332f57600083828154811061326457613264613ff6565b6000918252602082206005600b9092020190810154600382015460028301549294506132a89263ffffffff600160e01b830416916001600160e01b0316908861290f565b8051602082015163ffffffff8116600160e01b026001600160e01b03831617600386015560018501546040519394507f79af45fe3972eecc4b95252214ad1d36529435ab4d4ae291d62a2ee5a0cc050093613312938b936001600160a01b0390931692909161438f565b60405180910390a15050808061332790614035565b915050613247565b50505050565b61333d613717565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586133723390565b6040516001600160a01b03909116815260200160405180910390a1565b61339761375f565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613372565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610a6a9084906137a8565b60008164010000000084106134425760405162461bcd60e51b815260040161053e91906143ea565b509192915050565b6000612ae18383604051806040016040528060158152602001747375627472616374696f6e20756e646572666c6f7760581b81525061387d565b6000612ae183836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000008152506138ac565b60408051602081019091526000815260405180602001604052806135016134fb866a0c097ce7bc90715b34b9f160241b613484565b8561355d565b90529392505050565b6040805160208101909152600081526040518060200160405280613501856000015185600001516135b9565b600081600160e01b84106134425760405162461bcd60e51b815260040161053e91906143ea565b6000612ae183836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250613908565b60006a0c097ce7bc90715b34b9f160241b6135af848460000151613484565b612ae1919061441d565b6000612ae18383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250613934565b60006135f9613965565b8260000361360857508161370e565b60005460ff161561361a57508161370e565b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613663573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136879190613fdd565b90506000851180156136995750808511155b156136bd576136b26001600160a01b03831687876133c8565b60009250505061370e565b604080516001600160a01b038089168252861660208201529081018690527f8b079e2b0be6cc9631b7883d8478590fe708e9d360391aab49aa147901fc7a379060600160405180910390a184925050505b612ae160018055565b60005460ff161561375d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161053e565b565b60005460ff1661375d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161053e565b60006137fd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139be9092919063ffffffff16565b905080516000148061381e57508080602001905181019061381e91906141b5565b610a6a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161053e565b600081848411156138a15760405162461bcd60e51b815260040161053e91906143ea565b50612b9c838561443f565b60008315806138b9575082155b156138c657506000612ae1565b60006138d28486614452565b9050836138df868361441d565b1483906138ff5760405162461bcd60e51b815260040161053e91906143ea565b50949350505050565b600081836139295760405162461bcd60e51b815260040161053e91906143ea565b50612b9c838561441d565b6000806139418486614022565b905082858210156138ff5760405162461bcd60e51b815260040161053e91906143ea565b6002600154036139b75760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161053e565b6002600155565b6060612b9c848460008585600080866001600160a01b031685876040516139e59190614469565b60006040518083038185875af1925050503d8060008114613a22576040519150601f19603f3d011682016040523d82523d6000602084013e613a27565b606091505b5091509150613a3887838387613a43565b979650505050505050565b60608315613ab2578251600003613aab576001600160a01b0385163b613aab5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161053e565b5081612b9c565b612b9c8383815115613ac75781518083602001fd5b8060405162461bcd60e51b815260040161053e91906143ea565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6001600160a01b038116811461055057600080fd5b600060208284031215613b5457600080fd5b8135612ae181613b2d565b60008060408385031215613b7257600080fd5b8235613b7d81613b2d565b91506020830135613b8d81613b2d565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613bfb57835180516001600160a01b0316845260208082015190850152604080820151908501526060908101519084015260808301938501939250600101613bb4565b50909695505050505050565b801515811461055057600080fd5b600080600060608486031215613c2a57600080fd5b8335613c3581613b2d565b92506020840135613c4581613b2d565b91506040840135613c5581613c07565b809150509250925092565b600060208284031215613c7257600080fd5b5035919050565b600080600060608486031215613c8e57600080fd5b8335613c9981613b2d565b92506020840135613ca981613b2d565b929592945050506040919091013590565b60008060408385031215613ccd57600080fd5b8235613cd881613b2d565b946020939093013593505050565b80516001600160a01b03908116835260208083015190911690830152604080820151908301526060808201516001600160e01b03169083015260808082015190613d379084018263ffffffff169052565b5060a0810151613d5260a08401826001600160e01b03169052565b5060c0810151613d6a60c084018263ffffffff169052565b5060e0818101519083015261010090810151910152565b6020808252825182820181905260009190848201906040850190845b81811015613bfb57613db0838551613ce6565b928401926101209290920191600101613d9d565b61012081016109a98284613ce6565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015613e9857898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b80831015613e8357835180516001600160a01b031683526020808201519084015260408082015190840152606090810151908301526080820191508b84019350600183019250613e38565b50978a01979550505091870191600101613dfb565b50919998505050505050505050565b600080600060608486031215613ebc57600080fd5b8335613ec781613b2d565b92506020840135613ed781613b2d565b91506040840135613c5581613b2d565b60008060008060008060c08789031215613f0057600080fd5b8635613f0b81613b2d565b95506020870135613f1b81613b2d565b94506040870135613f2b81613b2d565b959894975094956060810135955060808101359460a0909101359350915050565b600060208284031215613f5e57600080fd5b8151612ae181613b2d565b602080825260409082018190527f4f6e6c792074686520636f6d7074726f6c6c6572206f7220636f6d7074726f6c908201527f6c65722061646d696e2063616e2063616c6c20746869732066756e6374696f6e606082015260800190565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613fef57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156109a9576109a961400c565b6000600182016140475761404761400c565b5060010190565b60208082526031908201527f4f6e6c792074686520636f6d7074726f6c6c657227732061646d696e6973747260408201527061746f722063616e20646f20746869732160781b606082015260800190565b60208082526041908201527f4f6e6c792074686520636f6e666967206f776e6572206f7220636f6d7074726f60408201527f6c6c65722061646d696e2063616e2063616c6c20746869732066756e6374696f6060820152603760f91b608082015260a00190565b60208082526043908201527f4f6e6c792074686520706175736520677561726469616e206f7220636f6d707460408201527f726f6c6c65722061646d696e2063616e2063616c6c20746869732066756e637460608201526234b7b760e91b608082015260a00190565b60208082526026908201527f506175736520477561726469616e2063616e277420626520746865203020616460408201526564726573732160d01b606082015260800190565b6000602082840312156141c757600080fd5b8151612ae181613c07565b6020808252603e908201527f43616e6e6f7420736574206120737570706c792072657761726420737065656460408201527f20686967686572207468616e2074686520656d697373696f6e20636170210000606082015260800190565b6020808252603e908201527f43616e6e6f7420736574206120626f72726f772072657761726420737065656460408201527f20686967686572207468616e2074686520656d697373696f6e20636170210000606082015260800190565b805161429781613b2d565b919050565b600060208083850312156142af57600080fd5b825167ffffffffffffffff808211156142c757600080fd5b818501915085601f8301126142db57600080fd5b8151818111156142ed576142ed613fc7565b8060051b604051601f19603f8301168101818110858211171561431257614312613fc7565b60405291825284820192508381018501918883111561433057600080fd5b938501935b82851015614355576143468561428c565b84529385019392850192614335565b98975050505050505050565b6000806040838503121561437457600080fd5b825161437f81613c07565b6020939093015192949293505050565b6001600160a01b0394851681529290931660208301526001600160e01b0316604082015263ffffffff909116606082015260800190565b60005b838110156143e15781810151838201526020016143c9565b50506000910152565b60208152600082518060208401526144098160408501602087016143c6565b601f01601f19169190910160400192915050565b60008261443a57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156109a9576109a961400c565b80820281158282048414176109a9576109a961400c565b6000825161447b8184602087016143c6565b919091019291505056fea26469706673582212200d32beb5506804c2baa3306afefcf4cafb60b6e99e6635c4092d8d82c102873464736f6c63430008130033