0 txs
710 calls
constructor
No constructor.
functions
activeOperators
viewfunction activeOperators() view returns (address[])
activeOperatorsAt
viewfunction activeOperatorsAt(uint48 timestamp) view returns (address[])
activeOperatorVaults
viewfunction activeOperatorVaults(address operator) view returns (address[])
activeOperatorVaultsAt
viewfunction activeOperatorVaultsAt(uint48 timestamp, address operator) view returns (address[])
activeSharedVaults
viewfunction activeSharedVaults() view returns (address[])
activeSharedVaultsAt
viewfunction activeSharedVaultsAt(uint48 timestamp) view returns (address[])
activeSubnetworks
viewfunction activeSubnetworks() view returns (uint160[])
activeSubnetworksAt
viewfunction activeSubnetworksAt(uint48 timestamp) view returns (uint160[])
activeVaults
viewfunction activeVaults() view returns (address[])
activeVaults
viewfunction activeVaults(address operator) view returns (address[])
activeVaultsAt
viewfunction activeVaultsAt(uint48 timestamp, address operator) view returns (address[])
activeVaultsAt
viewfunction activeVaultsAt(uint48 timestamp) view returns (address[])
auxiliaryCheckUpkeep
viewfunction auxiliaryCheckUpkeep() view returns (bool upkeepNeeded, bytes performData)
CACHE_DATA_COMMAND
viewfunction CACHE_DATA_COMMAND() view returns (uint8)
collateralToOracle
viewfunction collateralToOracle(address collateral) view returns (address)
DEFAULT_DECIMALS
viewfunction DEFAULT_DECIMALS() view returns (uint8)
EpochCapture_VERSION
viewfunction EpochCapture_VERSION() view returns (uint64)
getCaptureTimestamp
viewfunction getCaptureTimestamp() view returns (uint48 timestamp)
getCurrentEpoch
viewfunction getCurrentEpoch() view returns (uint48)
getEpochAtTs
viewfunction getEpochAtTs(uint48 timestamp) view returns (uint48 epoch)
getEpochCacheIndex
viewfunction getEpochCacheIndex(uint48 epoch) view returns (uint256)
getEpochDuration
viewfunction getEpochDuration() view returns (uint48)
getEpochStart
viewfunction getEpochStart(uint48 epoch) view returns (uint48)
getForwarderAddress
viewfunction getForwarderAddress() view returns (address)
getGateway
viewfunction getGateway() view returns (address)
getInterval
viewfunction getInterval() view returns (uint256)
getLastTimestamp
viewfunction getLastTimestamp() view returns (uint256)
getOperatorKeyAt
viewfunction getOperatorKeyAt(address operator, uint48 timestamp) view returns (bytes)
getOperatorPower
viewfunction getOperatorPower(address operator, address vault, uint96 subnetwork) view returns (uint256)
getOperatorPower
viewfunction getOperatorPower(address operator, address[] vaults, uint160[] subnetworks) view returns (uint256)
getOperatorPower
viewfunction getOperatorPower(address operator) view returns (uint256)
getOperatorPowerAt
viewfunction getOperatorPowerAt(uint48 timestamp, address operator, address vault, uint96 subnetwork) view returns (uint256)
getOperatorPowerAt
viewfunction getOperatorPowerAt(uint48 timestamp, address operator, address[] vaults, uint160[] subnetworks) view returns (uint256)
getOperatorPowerAt
viewfunction getOperatorPowerAt(uint48 timestamp, address operator) view returns (uint256)
getOperatorRewardsAddress
viewfunction getOperatorRewardsAddress() view returns (address)
getOperatorsByEpoch
viewfunction getOperatorsByEpoch(uint48 epoch) view returns (address[] activeOperators_)
getOperatorToPowerCached
viewfunction getOperatorToPowerCached(uint48 epoch, bytes32 operatorKey) view returns (uint256)
getOperatorVaultPairs
viewfunction getOperatorVaultPairs(uint48 epoch) view returns (tuple[] operatorVaultPairs)
getOperatorVaults
viewfunction getOperatorVaults(address operator, uint48 epochStartTs) view returns (uint256 vaultIdx, address[] vaults)
getPowerInUSD
viewfunction getPowerInUSD(address vault, uint256 stake) view returns (uint256 power)
getStakerRewardsFactoryAddress
viewfunction getStakerRewardsFactoryAddress() view returns (address)
getTotalStake
viewfunction getTotalStake(uint48 epoch) view returns (uint256 totalStake)
getValidatorSet
viewfunction getValidatorSet(uint48 epoch) view returns (tuple[] validatorSet)
isOperatorRegistered
viewfunction isOperatorRegistered(address operator) view returns (bool)
isVaultRegistered
viewfunction isVaultRegistered(address vault) view returns (bool)
KeyManager256_VERSION
viewfunction KeyManager256_VERSION() view returns (uint64)
keyWasActiveAt
viewfunction keyWasActiveAt(uint48 timestamp, bytes key_) view returns (bool)
MAX_ACTIVE_VAULTS
viewfunction MAX_ACTIVE_VAULTS() view returns (uint256)
MAX_OPERATORS_TO_PROCESS
viewfunction MAX_OPERATORS_TO_PROCESS() view returns (uint256)
MAX_OPERATORS_TO_SEND
viewfunction MAX_OPERATORS_TO_SEND() view returns (uint256)
MIN_INTERVAL_TO_SEND_OPERATOR_KEYS
viewfunction MIN_INTERVAL_TO_SEND_OPERATOR_KEYS() view returns (uint256)
NETWORK
viewfunction NETWORK() view returns (address)
OPERATOR_NET_OPTIN
viewfunction OPERATOR_NET_OPTIN() view returns (address)
OPERATOR_REGISTRY
viewfunction OPERATOR_REGISTRY() view returns (address)
operatorByKey
viewfunction operatorByKey(bytes key) view returns (address)
operatorKey
viewfunction operatorKey(address operator) view returns (bytes)
operatorsLength
viewfunction operatorsLength() view returns (uint256)
operatorVaultsLength
viewfunction operatorVaultsLength(address operator) view returns (uint256)
operatorVaultWasActiveAt
viewfunction operatorVaultWasActiveAt(uint48 timestamp, address operator, address vault) view returns (bool)
operatorVaultWithTimesAt
viewfunction operatorVaultWithTimesAt(address operator, uint256 pos) view returns (address, uint48, uint48)
operatorWasActiveAt
viewfunction operatorWasActiveAt(uint48 timestamp, address operator) view returns (bool)
operatorWithTimesAt
viewfunction operatorWithTimesAt(uint256 pos) view returns (address, uint48, uint48)
PARTS_PER_BILLION
viewfunction PARTS_PER_BILLION() view returns (uint256)
SEND_DATA_COMMAND
viewfunction SEND_DATA_COMMAND() view returns (uint8)
sharedVaultsLength
viewfunction sharedVaultsLength() view returns (uint256)
sharedVaultWasActiveAt
viewfunction sharedVaultWasActiveAt(uint48 timestamp, address vault) view returns (bool)
sharedVaultWithTimesAt
viewfunction sharedVaultWithTimesAt(uint256 pos) view returns (address, uint48, uint48)
SLASHING_WINDOW
viewfunction SLASHING_WINDOW() view returns (uint48)
sortOperatorsByPower
viewfunction sortOperatorsByPower(uint48 epoch) view returns (bytes32[] sortedKeys)
stakeToPower
viewfunction stakeToPower(address vault, uint256 stake) view returns (uint256 power)
subnetworksLength
viewfunction subnetworksLength() view returns (uint256)
subnetworkWasActiveAt
viewfunction subnetworkWasActiveAt(uint48 timestamp, uint96 subnetwork) view returns (bool)
subnetworkWithTimesAt
viewfunction subnetworkWithTimesAt(uint256 pos) view returns (uint160, uint48, uint48)
totalPower
viewfunction totalPower(address[] operators) view returns (uint256)
VAULT_REGISTRY
viewfunction VAULT_REGISTRY() view returns (address)
vaultToCollateral
viewfunction vaultToCollateral(address vault) view returns (address)
vaultToOracle
viewfunction vaultToOracle(address vault) view returns (address)
vaultWasActiveAt
viewfunction vaultWasActiveAt(uint48 timestamp, address operator, address vault) view returns (bool)
VERSION
viewfunction VERSION() view returns (uint256)
events
Initialized
event Initialized(uint64 version)
InstantSlash
event InstantSlash(address vault, bytes32 subnetwork, uint256 amount)
VetoSlash
event VetoSlash(address vault, bytes32 subnetwork, uint256 index)
errors
DuplicateKey
error DuplicateKey()
InactiveVaultSlash
error InactiveVaultSlash()
InvalidInitialization
error InvalidInitialization()
NonVetoSlasher
error NonVetoSlasher()
NoSlasher
error NoSlasher()
NotInitializing
error NotInitializing()
NotOperator
error NotOperator()
NotOperatorSpecificVault
error NotOperatorSpecificVault()
NotOperatorVault
error NotOperatorVault()
NotVault
error NotVault()
OBaseMiddlewareReader__NotSupportedCollateral
error OBaseMiddlewareReader__NotSupportedCollateral(address collateral)
OperatorNotOptedIn
error OperatorNotOptedIn()
PreviousKeySlashable
error PreviousKeySlashable()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TooOldTimestampSlash
error TooOldTimestampSlash()
UnknownSlasherType
error UnknownSlasherType()
VaultAlreadyRegistered
error VaultAlreadyRegistered()
VaultEpochTooShort
error VaultEpochTooShort()
VaultNotInitialized
error VaultNotInitialized()
creation bytecode
0x60808060405234601557613829908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063017d709c146104f5578063019f91e9146104f057806302ace7fe146104eb57806305f1a1aa146104e6578063063d7cd8146104e157806308d5566a146104dc578063105a88e3146104d7578063186ee8a4146104d25780631e0f2e1f146104cd57806322207cc7146104c8578063244339de146104c3578063246e158f146104be5780632ff754cc146104b957806333a5dba9146104b45780633441856f146104af57806337899770146104aa57806339fe0bde146104a55780633e1ad83f146104a057806342bf3cc11461049b57806346de2451146104965780634ba2ad45146104915780634ddb204f1461048c57806356581273146104875780635d3ea8f11461048257806364f084d51461037e5780636561ed7f1461047d57806367d3f46e14610478578063697abb92146104735780636a444a741461046e5780636b1906f8146104695780636d3b8b8314610464578063705e07cd1461045f5780637a3c33721461045a5780637a613c5f146104555780637b47fb42146104505780637bf206021461044b5780637fd1f34c146104465780638047b4f01461044157806381b643ef1461043c57806383ce03221461043757806384af6324146104325780638759e6d11461042d57806387cc5f79146104285780638c3e28cf146104235780638dc639691461041e57806391ad27b41461041957806391e9f4661461041457806393fe38891461040f57806396ad8d2d1461040a5780639ad48f54146104055780639d94a1e3146104005780639ec0626e146103fb5780639fee2cdb146103f6578063a1665984146103f1578063a190f119146103ec578063a3b9626f146103e7578063a74f9b4d146103e2578063aa7578a9146103dd578063ac1c1416146103d8578063b18125be146103d3578063b41fd912146103ce578063b8dc4fe9146103c9578063b97dd9e2146103c4578063bcdc52be146103bf578063c0ac1074146103ba578063c5008f46146103b5578063c5e85920146103b0578063cab18f6d146103ab578063cdef5315146103a6578063ce083911146103a1578063ce489d271461039c578063d68f676414610397578063d9e717831461037e578063db3adf1214610392578063e68c8ade1461038d578063e6989de71461037e578063f5ab2b4414610388578063fdc7d0dc146103835763ffa1ad741461037e575f80fd5b610d80565b611db7565b611d7b565b611d5c565b611d3f565b611caf565b611c6a565b611c14565b611af2565b6119a4565b611920565b611905565b6118cd565b611876565b61185c565b611824565b6117cb565b6117a3565b61173d565b611722565b6116ba565b61168f565b611673565b6115d9565b611542565b611520565b6114ad565b61145f565b61141b565b6113d6565b611368565b6112aa565b61125a565b611215565b6111e7565b6111a2565b611177565b611132565b611101565b6110bc565b611054565b610ff4565b610fd3565b610fa3565b610f39565b610ed8565b610ebd565b610e60565b610e3f565b610e24565b610dec565b610d9b565b610d39565b610d1e565b610cbc565b610c80565b610c03565b610b83565b610b02565b610aab565b610a6f565b610a2a565b610a0b565b6109c0565b610992565b61096c565b610928565b61089d565b6107b6565b610759565b610729565b6106c1565b61068a565b610621565b6105f6565b610575565b6004359065ffffffffffff8216820361050f57565b5f80fd5b6024359065ffffffffffff8216820361050f57565b6001600160a01b0381160361050f57565b9081518082526020808093019301915f5b828110610558575050505090565b83516001600160a01b03168552938101939281019260010161054a565b3461050f57604036600319011261050f576105f26105de6105946104fa565b6105d96024356105a381610528565b6001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b613257565b604051918291602083526020830190610539565b0390f35b3461050f57602036600319011261050f5760206106186004356105a381610528565b54604051908152f35b3461050f575f36600319011261050f5760206001600160a01b037f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db005416604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b3461050f575f36600319011261050f576106a2611e83565b906105f260405192839215158352604060208401526040830190610666565b3461050f57602036600319011261050f576105f26105de6106e06104fa565b6130ca565b60209060206040818301928281528551809452019301915f5b82811061070c575050505090565b83516001600160a01b0316855293810193928101926001016106fe565b3461050f57602036600319011261050f576105f261074d6107486104fa565b613153565b604051918291826106e5565b3461050f57602036600319011261050f576001600160a01b0360043561077e81610528565b165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db04602052602060405f20541515604051908152f35b3461050f575f36600319011261050f576105f26105de6107dc6107d7612a29565b61203f565b612d0d565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761081157604052565b6107e1565b90601f8019910116810190811067ffffffffffffffff82111761081157604052565b60405190610845826107f5565b565b81601f8201121561050f5780359067ffffffffffffffff8211610811576040519261087c601f8401601f191660200185610816565b8284526020838301011161050f57815f926020809301838601378301015290565b3461050f57604036600319011261050f576108b66104fa565b60243567ffffffffffffffff811161050f576020916108ed6108df61091e933690600401610847565b848082518301019101612030565b5f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc028352600160405f2001612bf9565b6040519015158152f35b3461050f575f36600319011261050f5760207f937e0d2984afc3afaa413d74098ba180cc0c6aae6527cc2713827ed6bc72f2005465ffffffffffff60405191168152f35b3461050f575f36600319011261050f576105f26105de61098d6107d7612a29565b6131d5565b3461050f57602036600319011261050f5760206109b06107d76104fa565b65ffffffffffff60405191168152f35b3461050f57604036600319011261050f576109ee6004356109e081610528565b6109e8610513565b9061210a565b906105f26040519283928352604060208401526040830190610539565b3461050f57602036600319011261050f576105f26105de6107dc6104fa565b3461050f575f36600319011261050f5760206001600160a01b037fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce91035416604051908152f35b3461050f575f36600319011261050f5760207fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910154604051908152f35b3461050f57602036600319011261050f57610ac7600435612faf565b508054600190910154604080516001600160a01b03909316835265ffffffffffff808316602085015260309290921c90911690820152606090f35b3461050f57602036600319011261050f5760043567ffffffffffffffff811161050f57610b36610b45913690600401610847565b60208082518301019101612030565b5f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0260205260206001600160a01b0360405f205416604051908152f35b3461050f575f36600319011261050f5760206001600160a01b037fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce91005416604051908152f35b606090600319011261050f5760043565ffffffffffff8116810361050f5790602435610bf381610528565b90604435610c0081610528565b90565b3461050f576020610c1336610bc8565b9091610c1f8282613562565b928315610c34575b5050506040519015158152f35b610c789350610c73906001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b6135c0565b5f8080610c27565b3461050f575f36600319011261050f5760207f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e0254604051908152f35b3461050f57604036600319011261050f57610ac7600435610cdc81610528565b610d19602435916001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b6130b1565b3461050f575f36600319011261050f57602060405160148152f35b3461050f575f36600319011261050f57602065ffffffffffff7f4e241e104e7ef4df0fc8eb6aad7b0f201c6126c722652f1bd1305b6b75c86d005460301c16604051908152f35b3461050f575f36600319011261050f57602060405160018152f35b3461050f575f36600319011261050f576020604051633b9aca008152f35b9081518082526020808093019301915f5b828110610dd8575050505090565b835185529381019392810192600101610dca565b3461050f57602036600319011261050f576105f2610e10610e0b6104fa565b6122b7565b604051918291602083526020830190610db9565b3461050f575f36600319011261050f57602060405160028152f35b3461050f575f36600319011261050f576105f261074d6107486107d7612a29565b3461050f57602036600319011261050f576001600160a01b03600435610e8581610528565b165f527f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e03602052602060405f20541515604051908152f35b3461050f575f36600319011261050f57602060405160508152f35b3461050f57606036600319011261050f57600435610ef581610528565b60243590610f0282610528565b6044356bffffffffffffffffffffffff8116810361050f57602092610f3192610f2c6107d7612a29565b61334c565b604051908152f35b3461050f57602036600319011261050f5760206001600160a01b03610f99600435610f6381610528565b6001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910560205260405f2090565b5416604051908152f35b3461050f57604036600319011261050f57602061091e610fc16104fa565b60243590610fce82610528565b613562565b3461050f575f36600319011261050f576105f26105de6106e06107d7612a29565b3461050f57602036600319011261050f5760206001600160a01b03610f9960043561101e81610528565b6001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910460205260405f2090565b3461050f57604036600319011261050f576110a56110706104fa565b65ffffffffffff165f527f93540b1a1dc30969947272428a8d0331ac0b23f753e3edd38c70f80cf083510160205260405f2090565b6024355f52602052602060405f2054604051908152f35b3461050f57604036600319011261050f576105f26110ed6004356110df81610528565b6110e7610513565b9061236d565b604051918291602083526020830190610666565b3461050f57604036600319011261050f576105f26105de6111206104fa565b6024359061112d82610528565b612c3c565b3461050f575f36600319011261050f5760206001600160a01b037f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e005416604051908152f35b3461050f57604036600319011261050f576020610f3160043561119981610528565b602435906124e0565b3461050f575f36600319011261050f5760207f933223a21808ea6583da836861e2265bfa3c7e3b9070740cd75dc9ff6fb41700546001600160a01b0360405191168152f35b3461050f57602036600319011261050f576105f26105de60043561120a81610528565b61112d6107d7612a29565b3461050f575f36600319011261050f5760206001600160a01b037fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce91085416604051908152f35b3461050f57602036600319011261050f576060611278600435613005565b5060016001600160a01b0382541691015465ffffffffffff90604051928352818116602084015260301c166040820152f35b3461050f575f36600319011261050f5760207fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910254604051908152f35b67ffffffffffffffff81116108115760051b60200190565b9080601f8301121561050f576020908235611318816112e6565b936113266040519586610816565b81855260208086019260051b82010192831161050f57602001905b82821061134f575050505090565b838091833561135d81610528565b815201910190611341565b3461050f57606036600319011261050f5760043561138581610528565b67ffffffffffffffff60243581811161050f576113a69036906004016112fe565b9160443591821161050f576020926113c5610f319336906004016112fe565b916113d16107d7612a29565b612f2a565b3461050f575f36600319011261050f5760206001600160a01b037f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e015416604051908152f35b3461050f57604036600319011261050f576020610f316114396104fa565b60243561144581610528565b61144f8183612c3c565b9061145983613153565b92612f2a565b3461050f57602061091e610c7361147536610bc8565b92906001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b3461050f57602036600319011261050f5760206115076115176114ce6104fa565b7f4e241e104e7ef4df0fc8eb6aad7b0f201c6126c722652f1bd1305b6b75c86d00549061150c65ffffffffffff94859283851690612554565b61253d565b9160301c1690612580565b60405191168152f35b3461050f57602036600319011261050f576105f26105de61098d6107d76104fa565b3461050f57602036600319011261050f5761155b6104fa565b6115655f9161203f565b9061156f826131d5565b918251905f935b82851061158857602084604051908152f35b9091926115bc6001600160a01b036115a087856120d1565b51166115ac8186612c3c565b6115b586613153565b9186612f2a565b81018091116115d45760019490940193929190611576565b611e16565b3461050f57604036600319011261050f576115f26104fa565b6001600160a01b0360243561160681610528565b165f527f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e0360205260405f20548015159081611649575b6020826040519015158152f35b5f198101915081116115d457602091600161166661166d93612faf565b5001612bf9565b5f61163c565b3461050f57602036600319011261050f57610ac760043561305b565b3461050f57604036600319011261050f576020610f316004356116b181610528565b6024359061261c565b3461050f57602036600319011261050f576105f26105de6004356116dd81610528565b6105d96116eb6107d7612a29565b916001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b3461050f575f36600319011261050f57602060405160328152f35b3461050f57608036600319011261050f576117566104fa565b6024359061176382610528565b67ffffffffffffffff9060443582811161050f576117859036906004016112fe565b60643592831161050f57602093611459610f319436906004016112fe565b3461050f57602036600319011261050f576105f26110ed6004356117c681610528565b61280e565b3461050f575f36600319011261050f576020604051603a8152f35b9081518082526020808093019301915f5b828110611805575050505090565b83518051865282015185830152604090940193928101926001016117f7565b3461050f57602036600319011261050f576105f26118486118436104fa565b6128b2565b6040519182916020835260208301906117e6565b3461050f575f36600319011261050f5760206109b0612a29565b3461050f57608036600319011261050f5761188f6104fa565b6024359061189c82610528565b6044356118a881610528565b606435906bffffffffffffffffffffffff8216820361050f57602093610f319361334c565b3461050f57602036600319011261050f576020610f316004356118ef81610528565b6118fa6107d7612a29565b9061144f8183612c3c565b3461050f575f36600319011261050f57602060405160128152f35b3461050f57602036600319011261050f5760043567ffffffffffffffff811161050f576119519036906004016112fe565b5f90815b8151831015611999576119856001600160a01b0361197385856120d1565b51166119806107d7612a29565b612e08565b81018091116115d457600190920191611955565b604051908152602090f35b3461050f57602036600319011261050f576020611a0a610f996004356119c981610528565b6001600160a01b039283916001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910560205260405f2090565b54166001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910460205260405f2090565b6020808201908083528351809252604092604081018260408560051b8401019601945f925b858410611a78575050505050505090565b90919293949596603f1982820301845285885184830190826060816001600160a01b039384815116885201519588838201528651809552019401915f915b818310611ad6575050505080600192990194019401929594939190611a67565b835181168652948401948a949390930192600190920191611ab6565b3461050f5760208060031936011261050f57611b0f6107d76104fa565b90611b19826131d5565b805191611b25836112e6565b92604090611b366040519586610816565b808552611b45601f19916112e6565b0190825f5b838110611bf257505050505f938251925f5b848110611b7457868652604051806105f28882611a42565b611b8e611b8182846120d1565b516001600160a01b031690565b611b98848261210a565b90611ba8575b5050600101611b5c565b6001929198611bea91611bcb611bbc610838565b6001600160a01b03909c168c52565b878b0152611bd881612a86565b99611be3828b6120d1565b52886120d1565b50905f611b9e565b8251611bfd816107f5565b5f8152606083820152828289010152018390611b4a565b3461050f57602036600319011261050f5765ffffffffffff611c346104fa565b165f527f93540b1a1dc30969947272428a8d0331ac0b23f753e3edd38c70f80cf0835100602052602060405f2054604051908152f35b3461050f575f36600319011261050f5760206001600160a01b037fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce91075416604051908152f35b3461050f57604036600319011261050f57611cc86104fa565b6024356bffffffffffffffffffffffff811680910361050f575f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0260205260405f20548015159081611d22576020826040519015158152f35b5f198101915081116115d457602091600161166661166d93613005565b3461050f575f36600319011261050f5760206109b06107d7612a29565b3461050f57602036600319011261050f576105f26105de61098d6104fa565b3461050f575f36600319011261050f5760207f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0354604051908152f35b3461050f575f36600319011261050f5760207f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0154604051908152f35b604051906020820182811067ffffffffffffffff821117610811576040525f8252565b634e487b7160e01b5f52601160045260245ffd5b919082039182116115d457565b60609065ffffffffffff610c0094936001835216602082015281604082015201906117e6565b60609065ffffffffffff610c009493600283521660208201528160408201520190610db9565b611e8b612a29565b90611e958261203f565b917f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e025492831561202257611ef88265ffffffffffff165f527f93540b1a1dc30969947272428a8d0331ac0b23f753e3edd38c70f80cf083510060205260405f2090565b54611f038186611e2a565b80611fc357505050909150611f4a611f1a426134a6565b65ffffffffffff7fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce9101549116611e2a565b7fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce91025410611f7c57505f90610c00611df3565b90611fb4611f89836122b7565b92603a845111611fba575b611fa660405194859260208401611e5d565b03601f198101845283610816565b60019190565b603a8452611f94565b603a92611fe692611fe18360148a9510601490151591180260141890565b612a94565b91909411159081612019575b5061200d57611fb490611fa660405194859260208401611e37565b505f9150610c00611df3565b9050155f611ff2565b505090505f90610c00611df3565b9081602091031261050f575190565b7f4e241e104e7ef4df0fc8eb6aad7b0f201c6126c722652f1bd1305b6b75c86d005465ffffffffffff9182808360301c16911602908282169182036115d4578216019081116115d45790565b90612095826112e6565b6120a26040519182610816565b82815280926120b3601f19916112e6565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b80518210156120e55760209160051b010190565b6120bd565b9081602091031261050f5751610c0081610528565b6040513d5f823e3d90fd5b915f926121178184612c3c565b612121815161208b565b7f933223a21808ea6583da836861e2265bfa3c7e3b9070740cd75dc9ff6fb417005490949060601b6bffffffffffffffffffffffff1916908251925f5b84811061217057505050505050828252565b61217d611b8182846120d1565b60408051630ce9b79360e41b815260209392916001600160a01b039160049190868184818789165afa90811561227f57899488948e948d935f95612284575b5061220990519788968795869463e02f693760e01b8652850191926001600160a01b0360a09465ffffffffffff938552166020840152166040820152608060608201525f60808201520190565b0392165afa90811561227f576001945f92612252575b505061222d575b500161215e565b61224c9061223e848d019c8c6120d1565b906001600160a01b03169052565b5f612226565b6122719250803d10612278575b6122698183610816565b810190612030565b5f8061221f565b503d61225f565b6120ff565b6122099195506122a990883d8a116122b0575b6122a18183610816565b8101906120ea565b94906121bc565b503d612297565b6122c0906128b2565b9081518015612366575f1981019081116115d4576122df905f84613680565b8151916123046122ee846112e6565b936122fc6040519586610816565b8085526112e6565b60209390601f1901368583013780938251905f935b828510612327575b50505052565b90919361233481836120d1565b515115612360578083612349600193856120d1565b51015161235682876120d1565b5201939190612319565b93612321565b5060609150565b6123a7816001600160a01b03165f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0060205260405f2090565b54801515806124a3575b61248557506123f0906001600160a01b03165f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0160205260405f2090565b54908115159081612441575b506124285750604051610c008161241a60208201905f602083019252565b03601f198101835282610816565b604080516020810192909252610c00908290810161241a565b61247f91506001612479845f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0260205260405f2090565b01612bf9565b5f6123fc565b61241a9250610c009150604051928391602083019190602083019252565b506124db836001612479845f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0260205260405f2090565b6123b1565b906001600160a01b036040519263212bd8c960e21b8452166004830152602482015260208160448160131936013560601c5afa90811561227f575f91612524575090565b610c00915060203d602011612278576122698183610816565b65ffffffffffff9081165f1901919082116115d457565b65ffffffffffff91821690821603919082116115d457565b634e487b7160e01b5f52601260045260245ffd5b9065ffffffffffff80911691821561259757160490565b61256c565b919082018092116115d457565b519069ffffffffffffffffffff8216820361050f57565b908160a091031261050f576125d4816125a9565b91602082015191604081015191610c006080606084015193016125a9565b9081602091031261050f575160ff8116810361050f5790565b60ff16604d81116115d457600a0a90565b91909182156128085761266261266f916001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910560205260405f2090565b546001600160a01b031690565b916001600160a01b03806126b6612662866001600160a01b03165f527fca64b196a0d05040904d062f739ed1d1e1d3cc5de78f7001fb9039595fce910460205260405f2090565b169384156127e557604051633fabe5a360e21b81529060a082600481895afa91821561227f575f926127af575b50604051809463313ce56760e01b9788835282600460209889935afa90811561227f57869461271f612725936004955f91612792575b5061260b565b91612eb7565b9660405194859384928352165afa91821561227f575f92612765575b5050601260ff8216036127515750565b9161275f610c00929361260b565b90612e20565b6127849250803d1061278b575b61277c8183610816565b8101906125f2565b5f80612741565b503d612772565b6127a99150883d8a1161278b5761277c8183610816565b5f612719565b6127d291925060a03d60a0116127de575b6127ca8183610816565b8101906125c0565b5050509050905f6126e3565b503d6127c0565b604051630c2b7acf60e31b81526001600160a01b03919091166004820152602490fd5b505f9150565b6128196107d7612a29565b906123a7816001600160a01b03165f527f3da47716e6090d5a5545e03387f4dac112d37cd069a5573bb81de8579bd9dc0060205260405f2090565b9061285e826112e6565b60409061286e6040519182610816565b838152809361287f601f19916112e6565b01915f5b8381106128905750505050565b602090825161289e816107f5565b5f8152825f81830152828601015201612883565b906128bc8261203f565b6128c5816131d5565b928351906128d282612854565b945f936128de816130ca565b9161292e61291d7f933223a21808ea6583da836861e2265bfa3c7e3b9070740cd75dc9ff6fb41700546bffffffffffffffffffffffff199060601b1690565b6bffffffffffffffffffffffff1690565b905f955b80871061294457505050505050508252565b612951611b8188846120d1565b9661295c858961236d565b97612972895199602080809c8301019101612030565b60018093019981612987575b50505050612932565b6129d1826129c48c65ffffffffffff165f527f93540b1a1dc30969947272428a8d0331ac0b23f753e3edd38c70f80cf083510160205260405f2090565b905f5260205260405f2090565b54928315612a14575b50821561297e576129ed9b93949b610838565b9283528201526129fd828d6120d1565b52612a08818c6120d1565b5001965f80808061297e565b612a22919350878a8a6132bc565b915f6129da565b612a32426134a6565b7f4e241e104e7ef4df0fc8eb6aad7b0f201c6126c722652f1bd1305b6b75c86d005465ffffffffffff8082169281168314612a7f5761150c611507610c0094612a7a426134a6565b612554565b5050505f90565b5f1981146115d45760010190565b9293915f94612aa285612854565b95612aac836130ca565b94612aeb61291d7f933223a21808ea6583da836861e2265bfa3c7e3b9070740cd75dc9ff6fb41700546bffffffffffffffffffffffff199060601b1690565b92855b612af8898861259c565b811080612bf0575b15612be55789858988612b1285613478565b5f9592949165ffffffffffff85811691811682119283612bc4575b505050612b94575b505050600192612af89492612b4c612b8b9361280e565b612b6181519160208080948301019101612030565b90612b6a610838565b928352820152612b84612b7d8d86611e2a565b80936120d1565b528d6120d1565b50019050612aee565b600195929950612af8969450612bb484612b8b9593612b4c93899d6132bc565b949650509150925088888c612b35565b16801592508215612bda575b50505f8080612b2d565b101590505f80612bd0565b505094509450505050565b50818110612b00565b549065ffffffffffff8091169081818416109283612c18575b50505090565b60301c16801592508215612c31575b50505f8080612c12565b101590505f80612c27565b612c83906105d9612c4c826130ca565b936001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b81518151918282018083116115d457612c9b9061208b565b935f5b838110612ce35750505f5b838110612cb7575050505090565b80612cdd612cca611b81600194866120d1565b61223e612cd7848861259c565b896120d1565b01612ca9565b80612d076001600160a01b03612cfb600194866120d1565b511661223e838a6120d1565b01612c9e565b612d16816130ca565b908151907f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0654908183018084116115d457612d509061208b565b935f5b848110612de55750505f5b828110612d6d57505050815290565b80610c73612dbc84612d806001956134d8565b9381949291926001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b612dc8575b5001612d5e565b612ddf9061223e612dd888612a86565b97896120d1565b5f612dc1565b80612e02612df8611b81600194866120d1565b61223e838a6120d1565b01612d53565b610c009161144f8183612c3c565b8115612597570490565b90670de0b6b3a764000080830291905f1981850993838086109503948086039514612eaa5784831115612e9d5790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b821560030260111861378e565b505090610c009250612e16565b91818302915f1981850993838086109503948086039514612eaa5784831115612e9d5790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b909192935f925f935b8551851015612fa5576001600160a01b03612f4e86886120d1565b5116925f915b8851831015612f9557612f816bffffffffffffffffffffffff612f77858c6120d1565b511686868961334c565b81018091116115d457600190920191612f54565b6001909601959093509050612f33565b9450509350505090565b7f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e0280548210156120e5575f5260011b7f705ef947cc8cdcca82faf0a2f100ebf54645b0dc75e0679e805afd7f7a48052601905f90565b7f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0180548210156120e5575f5260011b7f30d22b6608408cca7b6879775b63a63e629084831f1881ca9c28b95bbb984a5101905f90565b7f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0380548210156120e5575f5260011b7fecfc319653c6064eab193aeb17a7bbf6b64b6bf8d270efa19a55b3048c09153501905f90565b80548210156120e5575f5260205f209060011b01905f90565b907f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db03546130f68161208b565b905f905f5b81811061310a57505081529150565b8061311b876001611666819561305b565b613126575b016130fb565b6001600160a01b036131378261305b565b50541661314d61314686612a86565b95876120d1565b52613120565b907f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db015461317f8161208b565b905f905f5b81811061319357505081529150565b806131a48760016116668195613005565b6131af575b01613184565b6001600160a01b036131c082613005565b5054166131cf61314686612a86565b526131a9565b907f3b2b549db680c436ebf9aa3c8eeee850852f16da5cdb5137dbc0299ebb219e02546132018161208b565b905f905f5b81811061321557505081529150565b806132268760016116668195612faf565b613231575b01613206565b6001600160a01b0361324282612faf565b50541661325161314686612a86565b5261322b565b9081546132638161208b565b925f925f5b8381106132785750505050815290565b8061328a8360016116668195886130b1565b613295575b01613268565b6001600160a01b036132a782866130b1565b5054166132b6612dd888612a86565b5261328f565b91909392935f94613301846105d9836001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0560205260405f2090565b918051835181018091116115d4576050101561331f575b5050505050565b849596508361333291836133389761379e565b9461379e565b81018091116115d457905f80808080613318565b7f933223a21808ea6583da836861e2265bfa3c7e3b9070740cd75dc9ff6fb4170054919390929160601b6bffffffffffffffffffffffff19166bffffffffffffffffffffffff90911617916001600160a01b039060405191630ce9b79360e41b835260209586846004818589165afa91821561227f5761341c9688955f94613459575b506040519788958694859363e02f693760e01b85526004850191926001600160a01b0360a09465ffffffffffff938552166020840152166040820152608060608201525f60808201520190565b0392165afa91821561227f57610c00935f9361343a575b50506124e0565b613451929350803d10612278576122698183610816565b905f80613433565b613471919450863d88116122b0576122a18183610816565b925f6133cf565b61348190612faf565b509060016001600160a01b038354169201549065ffffffffffff8083169260301c1690565b65ffffffffffff908181116134b9571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b7f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db06548110156120e5577ff4b9cbf3619e32580a6489035e19d8ac6906abf09f144261111f9f8ad6ab7049015490815f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0860205260405f2054916001600160a01b03809116921690565b906001600160a01b03165f527f485f0695561726d087d0cb5cf546efed37ef61dfced21455f1ba7eb5e5b3db0460205260405f205480151591826135a557505090565b5f19820192509082116115d4576001611666610c009361305b565b90916001600160a01b03165f526001810160205260405f20549182151592836135e95750505090565b919250905f1981019081116115d457611666600191613607946130b1565b5f8080612c12565b81810392915f1380158285131691841216176115d457565b9190915f83820193841291129080158216911516176115d457565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115d45760010190565b600160ff1b81146115d4575f190190565b91908082838214613318576136b16136ab6136a561369e858861360f565b6002900590565b84613627565b866120d1565b51515b818413156136ed57508082126136dc575b50508181126136d357505050565b61084592613680565b6136e69185613680565b5f806136c5565b959192949390945b8661370082876120d1565b515111156137165761371190613642565b6136f5565b95945b61372381866120d1565b515186111561373a576137359061366f565b613719565b909394959291958184136136b45790926137826137889161375b86896120d1565b51613766828a6120d1565b51613771888b6120d1565b5261377c828a6120d1565b52613642565b9361366f565b906136b4565b634e487b715f526020526024601cfd5b925f938351925f945b8486106137b75750505050505090565b9091929394956137dc856001600160a01b036137d38a866120d1565b5116858761334c565b81018091116115d4579560010194939291906137a756fea264697066735822122034cc0c6c1292a789f4d5f998b5275b14dfdffd023a1c580e89e0cbeb24b70bbf64736f6c63430008190033