1 tx
2 calls
constructor
constructor(address _governance)
functions
defaultOracleDecimals
viewfunction defaultOracleDecimals() view returns (uint8)
getMorphoRewardsRate
viewfunction getMorphoRewardsRate(address _vault) view returns (uint256)
getRewardsRate
viewfunction getRewardsRate(address _vault) view returns (uint256 totalAPR)
getVaultConfig
viewfunction getVaultConfig(address _vault) view returns (uint256 morphoRate, address assetPriceOracle, uint256 rewardTokenCount)
getVaultRewardTokens
viewfunction getVaultRewardTokens(address _vault) view returns (tuple[])
governance
viewfunction governance() view returns (address)
MAX_BPS
viewfunction MAX_BPS() view returns (uint256)
morphoToken
viewfunction morphoToken() view returns (address)
morphoWethPool
viewfunction morphoWethPool() view returns (address)
ORACLE_DECIMALS
viewfunction ORACLE_DECIMALS() view returns (uint256)
per
viewfunction per() view returns (uint256)
SECONDS_PER_YEAR
viewfunction SECONDS_PER_YEAR() view returns (uint256)
vaultRewards
viewfunction vaultRewards(address) view returns (uint256 morphoRate, uint8 assetDecimals, address assetPriceOracle)
WAD
viewfunction WAD() view returns (uint256)
wethUsdOracle
viewfunction wethUsdOracle() view returns (address)
removeVaultRewards
nonpayablefunction removeVaultRewards(address _vault)
setMorphoPricing
nonpayablefunction setMorphoPricing(address _morphoToken, address _morphoWethPool, address _wethUsdOracle)
setMorphoRate
nonpayablefunction setMorphoRate(address _vault, uint256 _morphoRate)
setMorphoRates
nonpayablefunction setMorphoRates(address[] _vaults, uint256[] _morphoRates)
setPer
nonpayablefunction setPer(uint256 _per)
setVaultRewards
nonpayablefunction setVaultRewards(address _vault, uint256 _morphoRate, address[] _tokens, address[] _priceOracles, uint256[] _rewardRates, address _assetPriceOracle)
transferGovernance
nonpayablefunction transferGovernance(address _newGovernance)
updatePriceOracle
nonpayablefunction updatePriceOracle(address _vault, uint256 _tokenIndex, address _priceOracle)
updateRewardRate
nonpayablefunction updateRewardRate(address _vault, uint256 _tokenIndex, uint256 _rewardRate)
events
GovernanceTransferred
event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance)
MorphoRateUpdated
event MorphoRateUpdated(address indexed vault, uint256 morphoRate)
RewardTokenAdded
event RewardTokenAdded(address indexed vault, address indexed token, uint256 rewardRate)
RewardTokenRemoved
event RewardTokenRemoved(address indexed vault, address indexed token)
VaultRewardsUpdated
event VaultRewardsUpdated(address indexed vault, uint256 morphoRate, uint256 rewardTokenCount)
errors
R
error R()
T
error T()
creation bytecode
0x60806040526002805460ff191660081790556305f5e10060055534801562000025575f80fd5b50604051620036b4380380620036b4833981016040819052620000489162000109565b5f80546001600160a01b0319166001600160a01b03831690811782556040518392907f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80908290a35050600280547458d97b57bb95320f9a05dc918aef65434969c2b200610100600160a81b0319909116179055600380546001600160a01b03199081167325b96761e765b9ac20db18fa57fa91e3b617ec6f1790915560048054909116735f4ec3df9cbd43714fe2740f5e3616155c5b841917905562000138565b5f602082840312156200011a575f80fd5b81516001600160a01b038116811462000131575f80fd5b9392505050565b61356e80620001465f395ff3fe608060405234801561000f575f80fd5b5060043610610153575f3560e01c806399e34231116100bf578063de1eb9a311610079578063de1eb9a3146102e1578063e51be96814610347578063e6a69ab8146103a6578063f7e9d166146103b1578063f7fff6aa146103c4578063fd967f47146103d7575f80fd5b806399e34231146102565780639df6e24d14610269578063b70bc3b51461027c578063b8543e701461029c578063ca44bb53146102af578063d38bfff4146102ce575f80fd5b80634709a4e9116101105780634709a4e9146101ee5780635aa6e675146102015780636893f913146102135780636a146024146102265780636cc8c543146102355780637ec9c3b81461024d575f80fd5b80630241c4ae14610157578063161c15d01461016c5780631ea155021461017f578063234474dc1461019d57806330b9fa25146101c8578063361870c1146101db575b5f80fd5b61016a610165366004612d53565b6103e0565b005b61016a61017a366004612d7d565b61046f565b61018a6305f5e10081565b6040519081526020015b60405180910390f35b6004546101b0906001600160a01b031681565b6040516001600160a01b039091168152602001610194565b61016a6101d6366004612ddc565b61047c565b6003546101b0906001600160a01b031681565b61016a6101fc366004612e43565b61060f565b5f546101b0906001600160a01b031681565b61016a610221366004612e75565b6106ed565b61018a670de0b6b3a764000081565b6002546101b09061010090046001600160a01b031681565b61018a60055481565b61016a610264366004612ebd565b61080f565b61016a610277366004612ed8565b610899565b61028f61028a366004612ebd565b6109e3565b6040516101949190612f0c565b61018a6102aa366004612ebd565b610a8b565b6002546102bc9060ff1681565b60405160ff9091168152602001610194565b61016a6102dc366004612ebd565b610ac4565b6103246102ef366004612ebd565b6001600160a01b039081165f908152600160208190526040909120805460028201549190920154919361010090910490921691565b604080519384526001600160a01b03909216602084015290820152606001610194565b610380610355366004612ebd565b60016020525f90815260409020805460029091015460ff81169061010090046001600160a01b031683565b6040805193845260ff90921660208401526001600160a01b031690820152606001610194565b61018a6301e1855881565b61018a6103bf366004612ebd565b610b60565b61016a6103d2366004612f7e565b610d3c565b61018a61271081565b6103e86111f4565b6001600160a01b0382166104175760405162461bcd60e51b815260040161040e9061303e565b60405180910390fd5b6001600160a01b0382165f8181526001602052604090819020839055517fd730882674feb88f24f966855778fe520d4c46810ee76d49b78f78a87edb726a906104639084815260200190565b60405180910390a25050565b6104776111f4565b600555565b6104846111f4565b8281146104cb5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604482015260640161040e565b5f5b83811015610608575f8585838181106104e8576104e8613065565b90506020020160208101906104fd9190612ebd565b6001600160a01b0316036105235760405162461bcd60e51b815260040161040e9061303e565b82828281811061053557610535613065565b9050602002013560015f87878581811061055157610551613065565b90506020020160208101906105669190612ebd565b6001600160a01b0316815260208101919091526040015f205584848281811061059157610591613065565b90506020020160208101906105a69190612ebd565b6001600160a01b03167fd730882674feb88f24f966855778fe520d4c46810ee76d49b78f78a87edb726a8484848181106105e2576105e2613065565b905060200201356040516105f891815260200190565b60405180910390a26001016104cd565b5050505050565b6106176111f4565b6001600160a01b03831661063d5760405162461bcd60e51b815260040161040e9061303e565b6001600160a01b0383165f9081526001602081905260409091200154821061069d5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b604482015260640161040e565b8060015f856001600160a01b03166001600160a01b031681526020019081526020015f2060010183815481106106d5576106d5613065565b905f5260205f20906004020160020181905550505050565b6106f56111f4565b6001600160a01b03831661073b5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161040e565b6001600160a01b0382166107805760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a59081c1bdbdb60a21b604482015260640161040e565b6001600160a01b0381166107c75760405162461bcd60e51b815260206004820152600e60248201526d496e76616c6964206f7261636c6560901b604482015260640161040e565b600280546001600160a01b0394851661010002610100600160a81b0319909116179055600380549284166001600160a01b031993841617905560048054919093169116179055565b6108176111f4565b6001600160a01b0381165f9081526001602081905260408220828155919061084190830182612ce0565b5060020180546001600160a81b0319169055604080515f80825260208201526001600160a01b038316917f3bdb93f5f2e87d9bff77ae9311c98da6fb4a8378fb8101c01a61a958eebfcfaf910160405180910390a250565b6108a16111f4565b6001600160a01b0383166108c75760405162461bcd60e51b815260040161040e9061303e565b6001600160a01b0383165f908152600160208190526040909120015482106109275760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e8ded6cadc40d2dcc8caf606b1b604482015260640161040e565b6001600160a01b0381166109745760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207072696365206f7261636c6560601b604482015260640161040e565b8060015f856001600160a01b03166001600160a01b031681526020019081526020015f2060010183815481106109ac576109ac613065565b905f5260205f2090600402016001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550505050565b6001600160a01b0381165f9081526001602081815260408084209092018054835181840281018401909452808452606094919290919084015b82821015610a80575f848152602090819020604080516080810182526004860290920180546001600160a01b039081168452600180830154909116848601526002820154928401929092526003015460ff1660608301529083529092019101610a1c565b505050509050919050565b6001600160a01b0381165f90815260016020526040812080548203610ab257505f92915050565b8054610abd9061123d565b9392505050565b610acc6111f4565b6001600160a01b038116610b115760405162461bcd60e51b815260206004820152600c60248201526b5a45524f204144445245535360a01b604482015260640161040e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce809190a35050565b6001600160a01b0381165f9081526001602052604081208054158015610b8857506001810154155b15610b9557505f92915050565b5f610c15846001600160a01b03166301e1d1146040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf99190613079565b60028401546001600160a01b036101008204169060ff16611438565b9050805f03610c2757505f9392505050565b815415610c4b575f610c3b835f015461123d565b9050610c4781856130a4565b9350505b5f5b6001830154811015610d34575f836001018281548110610c6f57610c6f613065565b5f918252602080832060408051608081018252600490940290910180546001600160a01b03908116855260018201541692840192909252600282015490830181905260039091015460ff1660608301529092509003610cce5750610d2c565b5f6301e185588260400151610ce391906130b7565b90505f610cf98284602001518560600151611438565b90505f85610d0f670de0b6b3a7640000846130b7565b610d1991906130e2565b9050610d2581896130a4565b9750505050505b600101610c4d565b505050919050565b610d446111f4565b6001600160a01b038916610d6a5760405162461bcd60e51b815260040161040e9061303e565b8584148015610d7857508582145b610dbc5760405162461bcd60e51b8152602060048201526015602482015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604482015260640161040e565b6001600160a01b0389165f9081526001602081905260408220610de192910190612ce0565b6001600160a01b03808a165f818152600160209081526040918290208c815560028101805495871661010002610100600160a81b031990961695909517909455815163313ce56760e01b8152915163313ce5679260048082019392918290030181865afa158015610e54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e789190613111565b60028201805460ff191660ff929092169190911790555f5b878110156111a3575f898983818110610eab57610eab613065565b9050602002016020810190610ec09190612ebd565b6001600160a01b031603610f065760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b604482015260640161040e565b5f878783818110610f1957610f19613065565b9050602002016020810190610f2e9190612ebd565b6001600160a01b031603610f7b5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207072696365206f7261636c6560601b604482015260640161040e565b8160010160405180608001604052808b8b85818110610f9c57610f9c613065565b9050602002016020810190610fb19190612ebd565b6001600160a01b03168152602001898985818110610fd157610fd1613065565b9050602002016020810190610fe69190612ebd565b6001600160a01b0316815260200187878581811061100657611006613065565b9050602002013581526020018b8b8581811061102457611024613065565b90506020020160208101906110399190612ebd565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110989190613111565b60ff9081169091528254600180820185555f948552602094859020845160049093020180546001600160a01b03199081166001600160a01b039485161782559585015191810180549096169190921617909355604082015160028401556060909101516003909201805460ff19169290911691909117905588888281811061112257611122613065565b90506020020160208101906111379190612ebd565b6001600160a01b03168b6001600160a01b03167f8ab68562a70a02d12b0bbb803d106d670bb6660d060e8cc535baee4fcb04598b87878581811061117d5761117d613065565b9050602002013560405161119391815260200190565b60405180910390a3600101610e90565b50604080518a8152602081018990526001600160a01b038c16917f3bdb93f5f2e87d9bff77ae9311c98da6fb4a8378fb8101c01a61a958eebfcfaf910160405180910390a250505050505050505050565b5f546001600160a01b0316331461123b5760405162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015260640161040e565b565b5f81158061125457506003546001600160a01b0316155b1561126057505f919050565b60035460408051630dfe168160e01b815290516001600160a01b03909216915f918391630dfe1681916004808201926020929091908290030181865afa1580156112ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d0919061312a565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611333919061312a565b6002549091505f906001600160a01b0361010090910481169084160361135b57506001611388565b6002546001600160a01b0361010090910481169083160361137d57505f611388565b505f95945050505050565b5f6113c8858389856113b8576113b3600173fffd8963efd1fc6a506488495d951d5263988d26613145565b6114c3565b6113b36401000276a3600161316c565b9150505f81126113de57505f9695505050505050565b6004545f906113f5906001600160a01b0316611b6d565b9050805f0361140b57505f979650505050505050565b600554816114188461318c565b61142291906130b7565b61142c91906130e2565b98975050505050505050565b5f835f0361144757505f610abd565b6001600160a01b03831661147f5761146082600a613286565b61146e6305f5e100866130b7565b61147891906130e2565b9050610abd565b5f61148984611b6d565b9050805f0361149b575f915050610abd565b6114a683600a613286565b6114b082876130b7565b6114ba91906130e2565b95945050505050565b5f80835f036114f95760405162461bcd60e51b8152602060048201526002602482015261415360f01b604482015260640161040e565b5f80876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155b91906132c5565b505050505091509150866115ab57816001600160a01b0316856001600160a01b03161180156115a6575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038616105b6115d9565b816001600160a01b0316856001600160a01b03161080156115d957506401000276a36001600160a01b038616115b61160b5760405162461bcd60e51b815260206004820152600360248201526214d41360ea1b604482015260640161040e565b5f6040518060a00160405280846001600160a01b031681526020018360020b81526020018a6001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168f919061335e565b6001600160801b031681526020018a6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fd9190613377565b62ffffff1681526020018a6001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611743573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117679190613399565b600290810b9091526040805160a0810182528a81525f602080830182905285516001600160a01b03168385015285015190930b6060820152908301516001600160801b031660808201529192508813905b8051158015906117de5750876001600160a01b031681604001516001600160a01b031614155b15611b28576040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260408201516001600160a01b0390811682526060830151608086015161184a928f1691635339c296918f611c72565b1515604083015260020b60208201819052620d89e719131561187557620d89e71960208201526118a9565b611882620d89e7196133b2565b60020b816020015160020b13156118a9576118a0620d89e7196133b2565b60020b60208201525b6118b68160200151611e53565b6001600160a01b03166060820152604082015161192b908c6118f0578a6001600160a01b031683606001516001600160a01b03161161190a565b8a6001600160a01b031683606001516001600160a01b0316105b61191857826060015161191a565b8a5b60808501518551606089015161216e565b60c085015260a084015260808301526001600160a01b03166040830152821561198d576119618160c00151826080015101612356565b825103825260a081015161197490612356565b8260200181815161198591906133d2565b9052506119d0565b61199a8160a00151612356565b825101825260c081015160808201516119bb916119b6916130a4565b612356565b826020018181516119cc91906133f1565b9052505b80606001516001600160a01b031682604001516001600160a01b031603611aec57806040015115611ac757602081015160405163f30dba9360e01b815260029190910b60048201525f906001600160a01b038e169063f30dba939060240161010060405180830381865afa158015611a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6e9190613418565b5050505050509150508b15611a80575f035b5f81600f0b12611a9f57808360800151611a9a91906134ba565b611ab7565b611aa8816134da565b8360800151611ab791906134ff565b6001600160801b03166080840152505b8a611ad6578060200151611adf565b60018160200151035b60020b6060830152611b22565b805f01516001600160a01b031682604001516001600160a01b031614611b2257611b19826040015161236a565b60020b60608301525b506117b8565b8115158a151514611b495760208101518151611b44908b6133d2565b611b5b565b8051611b55908a6133d2565b81602001515b909c909b509950505050505050505050565b5f6001600160a01b038216611b8757506305f5e100919050565b816001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611be1575060408051601f3d908101601f19168201909252611bde91810190613079565b60015b611bec57505f919050565b5f8113611bfb57505f92915050565b5f611c058461266f565b90508060ff16600803611c19575092915050565b60088160ff161015611c4d57611c3081600861351f565b611c3b90600a613286565b611c4590836130b7565b949350505050565b611c5860088261351f565b611c6390600a613286565b611c4590836130e2565b919050565b5f805f8460020b8660020b81611c8a57611c8a6130ce565b0590505f8660020b128015611cb657508460020b8660020b81611caf57611caf6130ce565b0760020b15155b15611cbf575f19015b8315611d86576040516001600160e01b031960e089901b168152600282900b600881901d600181810b600485015290926101009092079160ff83169190911b80015f1901905f9082908d908d90602401602060405180830381865afa158015611d2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4e9190613079565b168015159650905085611d6857888360ff16860302611d7b565b88611d72826126df565b840360ff168603025b965050505050611e48565b60405160e088901b6001600160e01b0319168152600182810160020b600881901d80830b6004850152926101009091079160ff83161b5f190119905f9082908d908d90602401602060405180830381865afa158015611de7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0b9190613079565b168015159650905085611e2b57888360ff0360ff16866001010102611e41565b8883611e368361277d565b0360ff168660010101025b9650505050505b509550959350505050565b5f805f8360020b12611e68578260020b611e6f565b8260020b5f035b9050620d89e8811115611e95576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f03611eaa57600160801b611ebc565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611ef0576ffff97272373d413259a46990580e213a0260801c5b6004821615611f0f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611f2e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611f4d576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611f6c576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611f8b576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611faa576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611fca576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611fea576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561200a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561202a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561204a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561206a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b61400082161561208a576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156120aa576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156120cb576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156120eb576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561210a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612127576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561214657805f1981612142576121426130ce565b0490505b64010000000081061561215a57600161215c565b5f5b60ff16602082901c0192505050919050565b5f8080806001600160a01b03808916908a1610158187128015906121f1575f6121a58989620f42400362ffffff16620f4240612864565b9050826121be576121b98c8c8c600161290e565b6121cb565b6121cb8b8d8c600161297d565b95508581106121dc578a96506121eb565b6121e88c8b8386612a32565b96505b50612237565b81612207576122028b8b8b5f61297d565b612213565b6122138a8c8b5f61290e565b935083885f031061222657899550612237565b6122348b8a8a5f0385612a7a565b95505b6001600160a01b038a8116908716148215612299578080156122565750815b61226c57612267878d8c600161297d565b61226e565b855b955080801561227b575081155b6122905761228b878d8c5f61290e565b612292565b845b94506122e2565b8080156122a35750815b6122b9576122b48c888c600161290e565b6122bb565b855b95508080156122c8575081155b6122dd576122d88c888c5f61297d565b6122df565b845b94505b811580156122f15750885f0385115b156122fc57885f0394505b81801561231b57508a6001600160a01b0316876001600160a01b031614155b1561232a578589039350612347565b612344868962ffffff168a620f42400362ffffff16612ac0565b93505b50505095509550955095915050565b5f600160ff1b8210612366575f80fd5b5090565b5f6401000276a36001600160a01b038316108015906123a5575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6123c2576040516324c070df60e11b815260040160405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061245657607f810383901c9150612460565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461266057886001600160a01b031661264582611e53565b6001600160a01b0316111561265a5781612662565b80612662565b815b9998505050505050505050565b5f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126ca575060408051601f3d908101601f191682019092526126c791810190613111565b60015b6126d957505060025460ff1690565b92915050565b5f8082116126eb575f80fd5b600160801b82106126fe57608091821c91015b68010000000000000000821061271657604091821c91015b640100000000821061272a57602091821c91015b62010000821061273c57601091821c91015b610100821061274d57600891821c91015b6010821061275d57600491821c91015b6004821061276d57600291821c91015b60028210611c6d57600101919050565b5f808211612789575f80fd5b5060ff6001600160801b038216156127a457607f19016127ac565b608082901c91505b67ffffffffffffffff8216156127c557603f19016127cd565b604082901c91505b63ffffffff8216156127e257601f19016127ea565b602082901c91505b61ffff8216156127fd57600f1901612805565b601082901c91505b60ff821615612817576007190161281f565b600882901c91505b600f8216156128315760031901612839565b600482901c91505b600382161561284b5760011901612853565b600282901c91505b6001821615611c6d575f1901919050565b5f80805f19858709858702925082811083820303915050805f03612898575f841161288d575f80fd5b508290049050610abd565b8084116128a3575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f836001600160a01b0316856001600160a01b0316111561292d579293925b8161295a57612955836001600160801b03168686036001600160a01b0316600160601b612864565b6114ba565b6114ba836001600160801b03168686036001600160a01b0316600160601b612ac0565b5f836001600160a01b0316856001600160a01b0316111561299c579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166129c5575f80fd5b836129fb57866001600160a01b03166129e88383896001600160a01b0316612864565b816129f5576129f56130ce565b04612a27565b612a27612a128383896001600160a01b0316612ac0565b886001600160a01b0316808204910615150190565b979650505050505050565b5f80856001600160a01b031611612a47575f80fd5b5f846001600160801b031611612a5b575f80fd5b81612a6d576129558585856001612afc565b6114ba8585856001612bde565b5f80856001600160a01b031611612a8f575f80fd5b5f846001600160801b031611612aa3575f80fd5b81612ab4576129558585855f612bde565b6114ba8585855f612afc565b5f612acc848484612864565b90505f8280612add57612add6130ce565b8486091115610abd575f198110612af2575f80fd5b6001019392505050565b5f8115612b6c575f6001600160a01b03841115612b3057612b2b84600160601b876001600160801b0316612864565b612b47565b612b476001600160801b038616606086901b6130e2565b9050612b64612b5f826001600160a01b0389166130a4565b612ccb565b915050611c45565b5f6001600160a01b03841115612b9957612b9484600160601b876001600160801b0316612ac0565b612bb6565b612bb6606085901b6001600160801b038716808204910615150190565b905080866001600160a01b031611612bcc575f80fd5b6001600160a01b038616039050611c45565b5f825f03612bed575083611c45565b600160601b600160e01b03606085901b168215612c7f576001600160a01b03861684810290858281612c2157612c216130ce565b0403612c5157818101828110612c4f57612c4583896001600160a01b031683612ac0565b9350505050611c45565b505b50612b648185612c6a6001600160a01b038a16836130e2565b612c7491906130a4565b808204910615150190565b6001600160a01b03861684810290858281612c9c57612c9c6130ce565b04148015612ca957508082115b612cb1575f80fd5b808203612c45612b5f846001600160a01b038b1684612ac0565b806001600160a01b0381168114611c6d575f80fd5b5080545f8255600402905f5260205f2090810190612cfe9190612d01565b50565b5b808211156123665780546001600160a01b0319908116825560018201805490911690555f600282015560038101805460ff19169055600401612d02565b6001600160a01b0381168114612cfe575f80fd5b5f8060408385031215612d64575f80fd5b8235612d6f81612d3f565b946020939093013593505050565b5f60208284031215612d8d575f80fd5b5035919050565b5f8083601f840112612da4575f80fd5b50813567ffffffffffffffff811115612dbb575f80fd5b6020830191508360208260051b8501011115612dd5575f80fd5b9250929050565b5f805f8060408587031215612def575f80fd5b843567ffffffffffffffff80821115612e06575f80fd5b612e1288838901612d94565b90965094506020870135915080821115612e2a575f80fd5b50612e3787828801612d94565b95989497509550505050565b5f805f60608486031215612e55575f80fd5b8335612e6081612d3f565b95602085013595506040909401359392505050565b5f805f60608486031215612e87575f80fd5b8335612e9281612d3f565b92506020840135612ea281612d3f565b91506040840135612eb281612d3f565b809150509250925092565b5f60208284031215612ecd575f80fd5b8135610abd81612d3f565b5f805f60608486031215612eea575f80fd5b8335612ef581612d3f565b9250602084013591506040840135612eb281612d3f565b602080825282518282018190525f919060409081850190868401855b82811015612f7157815180516001600160a01b039081168652878201511687860152858101518686015260609081015160ff169085015260809093019290850190600101612f28565b5091979650505050505050565b5f805f805f805f805f60c08a8c031215612f96575f80fd5b8935612fa181612d3f565b985060208a0135975060408a013567ffffffffffffffff80821115612fc4575f80fd5b612fd08d838e01612d94565b909950975060608c0135915080821115612fe8575f80fd5b612ff48d838e01612d94565b909750955060808c013591508082111561300c575f80fd5b506130198c828d01612d94565b90945092505060a08a013561302d81612d3f565b809150509295985092959850929598565b6020808252600d908201526c125b9d985b1a59081d985d5b1d609a1b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613089575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156126d9576126d9613090565b80820281158282048414176126d9576126d9613090565b634e487b7160e01b5f52601260045260245ffd5b5f826130fc57634e487b7160e01b5f52601260045260245ffd5b500490565b805160ff81168114611c6d575f80fd5b5f60208284031215613121575f80fd5b610abd82613101565b5f6020828403121561313a575f80fd5b8151610abd81612d3f565b6001600160a01b0382811682821603908082111561316557613165613090565b5092915050565b6001600160a01b0381811683821601908082111561316557613165613090565b5f600160ff1b82016131a0576131a0613090565b505f0390565b600181815b808511156131e057815f19048211156131c6576131c6613090565b808516156131d357918102915b93841c93908002906131ab565b509250929050565b5f826131f6575060016126d9565b8161320257505f6126d9565b816001811461321857600281146132225761323e565b60019150506126d9565b60ff84111561323357613233613090565b50506001821b6126d9565b5060208310610133831016604e8410600b8410161715613261575081810a6126d9565b61326b83836131a6565b805f190482111561327e5761327e613090565b029392505050565b5f610abd60ff8416836131e8565b8051600281900b8114611c6d575f80fd5b805161ffff81168114611c6d575f80fd5b80518015158114611c6d575f80fd5b5f805f805f805f60e0888a0312156132db575f80fd5b87516132e681612d3f565b96506132f460208901613294565b9550613302604089016132a5565b9450613310606089016132a5565b935061331e608089016132a5565b925061332c60a08901613101565b915061333a60c089016132b6565b905092959891949750929550565b80516001600160801b0381168114611c6d575f80fd5b5f6020828403121561336e575f80fd5b610abd82613348565b5f60208284031215613387575f80fd5b815162ffffff81168114610abd575f80fd5b5f602082840312156133a9575f80fd5b610abd82613294565b5f8160020b627fffff1981036133ca576133ca613090565b5f0392915050565b8181035f83128015838313168383128216171561316557613165613090565b8082018281125f83128015821682158216171561341057613410613090565b505092915050565b5f805f805f805f80610100898b031215613430575f80fd5b61343989613348565b9750602089015180600f0b811461344e575f80fd5b80975050604089015195506060890151945060808901518060060b8114613473575f80fd5b60a08a015190945061348481612d3f565b60c08a015190935063ffffffff8116811461349d575f80fd5b91506134ab60e08a016132b6565b90509295985092959890939650565b6001600160801b0381811683821601908082111561316557613165613090565b5f81600f0b6f7fffffffffffffffffffffffffffffff1981036133ca576133ca613090565b6001600160801b0382811682821603908082111561316557613165613090565b60ff82811682821603908111156126d9576126d961309056fea2646970667358221220a58701103d644e5bcc27448f4cf676a290ad7b2ffc6085c06c1f21648448a80c64736f6c634300081700330000000000000000000000001b5f15dcb82d25f91c65b53cee151e8b9fbdd271