0 txs
4 calls
constructor
constructor()
functions
coverage
viewfunction coverage(address _operator) view returns (uint256 delegation)
eigenAddresses
viewfunction eigenAddresses() view returns (tuple)
epochDuration
viewfunction epochDuration() view returns (uint32)
getEigenOperator
viewfunction getEigenOperator(address _operator) view returns (address)
operatorSetId
viewfunction operatorSetId(address _operator) view returns (uint32)
operatorToStrategy
viewfunction operatorToStrategy(address _operator) view returns (address)
pendingRewards
viewfunction pendingRewards(address _operator, address _token) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
slashableCollateral
viewfunction slashableCollateral(address _operator, uint48) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
allocate
nonpayablefunction allocate(address _operator)
distributeRewards
nonpayablefunction distributeRewards(address _operator, address _token)
initialize
nonpayablefunction initialize(address _accessControl, tuple _eigenAddresses, address _oracle, uint32 _epochDuration)
registerOperator
nonpayablefunction registerOperator(address _eigenOperator, address _avs, uint32[] _operatorSetIds, bytes)
registerStrategy
nonpayablefunction registerStrategy(address _strategy, address _operator, address _restaker, string _avsMetadata, string _operatorMetadata) returns (uint32 _operatorSetId)
setEpochDuration
nonpayablefunction setEpochDuration(uint32 _epochDuration)
slash
nonpayablefunction slash(address _operator, address _recipient, uint256 _slashShare, uint48)
upgradeEigenOperatorImplementation
nonpayablefunction upgradeEigenOperatorImplementation(address _newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
DistributedRewards
event DistributedRewards(address indexed strategy, address indexed token, uint256 amount)
EpochDurationSet
event EpochDurationSet(uint32 epochDuration)
Initialized
event Initialized(uint64 version)
MinRewardAmountSet
event MinRewardAmountSet(uint256 minRewardAmount)
OperatorRegistered
event OperatorRegistered(address indexed operator, address indexed eigenOperator, address indexed avs, uint32 operatorSetId)
Slash
event Slash(address indexed agent, address indexed recipient, uint256 slashShare, uint48 timestamp)
StrategyRegistered
event StrategyRegistered(address indexed strategy, address indexed operator)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessDenied
error AccessDenied()
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyRegisteredOperator
error AlreadyRegisteredOperator()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidAVS
error InvalidAVS()
InvalidDecimals
error InvalidDecimals()
InvalidInitialization
error InvalidInitialization()
InvalidOperator
error InvalidOperator()
InvalidOperatorSetIds
error InvalidOperatorSetIds()
InvalidRedistributionRecipient
error InvalidRedistributionRecipient()
MinMagnitudeNotMet
error MinMagnitudeNotMet()
MinShareNotMet
error MinShareNotMet()
NotInitializing
error NotInitializing()
OperatorSetAlreadyCreated
error OperatorSetAlreadyCreated()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlashShareTooSmall
error SlashShareTooSmall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroSlash
error ZeroSlash()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b5c6100f95f395f81816123020152818161232b01526124730152615b5c5ff3fe608060405260043610610110575f3560e01c8063754061a31161009d578063b9327b0711610062578063b9327b0714610324578063bd5795421461035b578063c63fd5021461037a578063e858a11d14610399578063ffd7d983146103b8575f5ffd5b8063754061a31461023357806380ac82281461028a578063814813c1146102a9578063ad3cb1cc146102c8578063b000685f14610305575f5ffd5b80633d11c00d116100e35780633d11c00d146101ba5780634f1ef286146101d95780634ff0876a146101ec57806352d1902d14610200578063610de09314610214575f5ffd5b806314c8d37d1461011457806332cfdfbf1461013557806333024430146101545780633b3979f314610186575b5f5ffd5b34801561011f575f5ffd5b5061013361012e366004612eaf565b6103d7565b005b348015610140575f5ffd5b5061013361014f366004612efe565b610446565b34801561015f575f5ffd5b5061017361016e366004612f4c565b6106d9565b6040519081526020015b60405180910390f35b348015610191575f5ffd5b506101a56101a0366004612f4c565b61082b565b60405163ffffffff909116815260200161017d565b3480156101c5575f5ffd5b506101336101d4366004612f67565b610867565b6101336101e7366004613062565b610ba2565b3480156101f7575f5ffd5b506101a5610bc1565b34801561020b575f5ffd5b50610173610bdb565b34801561021f575f5ffd5b506101a561022e3660046130df565b610bf6565b34801561023e575f5ffd5b506102476110cb565b60405161017d919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b348015610295575f5ffd5b506101736102a4366004612f67565b61113b565b3480156102b4575f5ffd5b506101736102c3366004613178565b61117c565b3480156102d3575f5ffd5b506102f8604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161017d91906131d9565b348015610310575f5ffd5b5061013361031f366004612f4c565b6111da565b34801561032f575f5ffd5b5061034361033e366004612f4c565b611281565b6040516001600160a01b03909116815260200161017d565b348015610366575f5ffd5b506101336103753660046131eb565b6112b0565b348015610385575f5ffd5b506101336103943660046132cf565b611668565b3480156103a4575f5ffd5b506103436103b3366004612f4c565b6118a3565b3480156103c3575f5ffd5b506101336103d2366004612f4c565b6118d5565b6314c8d37d60e01b6103e881611990565b5f6103f1611a50565b60078101805463ffffffff191663ffffffff86169081179091556040519081529091507feb2082219a5218c2cea66e230e64f60a80f027c8776b46dccdd048a4fb70ea3a9060200160405180910390a1505050565b6332cfdfbf60e01b61045781611990565b5f610460611a50565b6001600160a01b038088165f9081526009830160205260409020600181015492935091166104a15760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0386166104c85760405163d92e233d60e01b815260040160405180910390fd5b845f036104e85760405163dd31d0f960e01b815260040160405180910390fd5b600181015460408051632495a59960e01b815290516001600160a01b03909216915f918391632495a599916004808201926020929091908290030181865afa158015610536573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055a9190613392565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156105a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c591906133ad565b90506105d2838b8a611a74565b6040516370a0823160e01b81523060048201525f9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610618573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063c91906133ad565b61064691906133d8565b9050805f036106685760405163dd31d0f960e01b815260040160405180910390fd5b61067c6001600160a01b0384168b83611cac565b6040805182815265ffffffffffff421660208201526001600160a01b03808d1692908e16917f27bce4a45b376a3636aba7d132e3f6965189f680c9dd3435054b15ab8da7a731910160405180910390a35050505050505050505050565b5f5f6106e3611a50565b6001600160a01b038085165f9081526009830160205260409020600181015492935091168061071657505f949350505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061074a5761074a6133eb565b6001600160a01b03928316602091820292909201015260018501548454604051639004134760e01b81525f9392831692639004134792610791929116908690600401613442565b5f60405180830381865afa1580156107ab573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107d291908101906134e7565b9050633b9aca00815f815181106107eb576107eb6133eb565b6020026020010151101561080557505f9695505050505050565b60048501546001600160a01b031661081e888583611d0b565b5098975050505050505050565b5f5f610835611a50565b6001600160a01b039093165f90815260099093016020525050604090206001015463ffffffff600160c01b9091041690565b633d11c00d60e01b61087881611990565b5f610881611a50565b6001600160a01b038086165f908152600983016020908152604080832060038601548251639d45c28160e01b81529251969750909593941692639d45c281926004808401939192918290030181865afa1580156108e0573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906133ad565b6001600160a01b038681165f818152600386016020908152604080832054600189015460088b019093528184205491516370a0823160e01b815230600482015296975063ffffffff169591909416939192906370a0823190602401602060405180830381865afa15801561097a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099e91906133ad565b6109a891906133d8565b90508263ffffffff165f036109cc576001850154600160a01b900463ffffffff1692505b5f6109d78542613518565b60078801549091505f906109f19063ffffffff1686613537565b90508063ffffffff168263ffffffff161015610a77578215610a6a576001600160a01b038a165f90815260088901602052604081208054859290610a36908490613553565b90915550506001600160a01b038a165f90815260028801602052604081208054859290610a64908490613553565b90915550505b5050505050505050505050565b6001600160a01b038a165f908152600288016020526040812054610a9b9085613553565b9050805f03610ab257505050505050505050505050565b6003890154610acb908c906001600160a01b0316611e78565b610ae58c868d848a63ffffffff168863ffffffff16611f01565b6001600160a01b038b165f90815260028901602090815260408083205460088d019092528220805491929091610b1c9084906133d8565b90915550506001600160a01b038b81165f81815260028b016020908152604080832083905560038d01825291829020805463ffffffff191663ffffffff8916179055905184815291928f16917fb8da470998c312b635757eec53fc5481b3e89dd4847fcec080d663fc53b589e5910160405180910390a35050505050505050505b505050565b610baa6122f7565b610bb38261239d565b610bbd82826123a7565b5050565b5f5f610bcb611a50565b6007015463ffffffff1692915050565b5f610be4612468565b505f516020615b075f395f51905f5290565b5f63610de09360e01b610c0881611990565b5f610c11611a50565b6001600160a01b0388165f9081526009820160205260408120919250610c3789876124b1565b82546001600160a01b0319166001600160a01b038281169190911784556007850154600185015464010000000090910463ffffffff1697509192501615610c91576040516310169e8560e21b815260040160405180910390fd5b6001820154600160c01b900463ffffffff1615610cc15760405163399f20c360e21b815260040160405180910390fd5b60068a6001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d239190613392565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d829190613566565b60ff161015610da457604051630692acc560e51b815260040160405180910390fd5b82546040805160018082528183019092526001600160a01b03909216915f91816020015b604080518082019091525f815260606020820152815260200190600190039081610dc85750506040805160018082528183019092529192505f9190602080830190803683370190505090508c815f81518110610e2657610e266133eb565b60200260200101906001600160a01b031690816001600160a01b03168152505060405180604001604052808963ffffffff16815260200182815250825f81518110610e7357610e736133eb565b6020908102919091010152604051630caa1e7960e21b81526001600160a01b038416906332a879e490610eb1903090869060068c01906004016135c2565b5f604051808303815f87803b158015610ec8575f5ffd5b505af1158015610eda573d5f5f3e3d5ffd5b505050508c856001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550878560010160186101000a81548163ffffffff021916908363ffffffff1602179055505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa291906133ad565b9050610fae8142613518565b8660010160146101000a81548163ffffffff021916908363ffffffff160217905550610fd98b61255c565b60405163e129ff1360e01b815263ffffffff8a1660048201526001600160a01b038d8116602483015286169063e129ff13906044015f604051808303815f87803b158015611025575f5ffd5b505af1158015611037573d5f5f3e3d5ffd5b50505050600787018054640100000000900463ffffffff1690600461105b8361365a565b91906101000a81548163ffffffff021916908363ffffffff160217905550508c6001600160a01b03168e6001600160a01b03167f6bc9059a6c399333e5eae5f30fe0f84f34e4d9f81b5a38413a31337c366c8dda60405160405180910390a3505050505050505095945050505050565b604080516080810182525f8082526020820181905291810182905260608101829052906110f6611a50565b6040805160808101825282546001600160a01b039081168252600184015481166020830152600284015481169282019290925260039092015416606082015292915050565b5f5f611145611a50565b6001600160a01b038086165f9081526009909201602090815260408084209287168452600290920190529020549150505b92915050565b5f5f611186611a50565b6001600160a01b038086165f9081526009830160205260409020600181015492935091166111b8575f92505050611176565b60018101546111d19086906001600160a01b03166125c8565b95945050505050565b63b000685f60e01b6111eb81611990565b5f6111f4611a50565b90506001600160a01b03831661121d5760405163d92e233d60e01b815260040160405180910390fd5b6005810154604051631b2ce7f360e11b81526001600160a01b038581166004830152909116908190633659cfe6906024015f604051808303815f87803b158015611265575f5ffd5b505af1158015611277573d5f5f3e3d5ffd5b5050505050505050565b5f5f61128b611a50565b6001600160a01b039384165f9081526009909101602052604090205490921692915050565b5f6112b9612748565b805490915060ff600160401b82041615906001600160401b03165f811580156112df5750825b90505f826001600160401b031660011480156112fa5750303b155b905081158015611308575080155b156113265760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561135057845460ff60401b1916600160401b1785555b5f611359611a50565b90506113648a612770565b61136c612784565b885181546001600160a01b03199081166001600160a01b0392831617835560208b0151600184018054831691841691909117905560408b0151600284018054831691841691909117905560608b0151600384018054831691841691909117905560048084018054909216928b1692909217905560078201805463ffffffff191663ffffffff8a8116919091178083556401000000009004169161140e8361365a565b825463ffffffff9182166101009390930a9283029190920219909116179055506006810180546001810182555f918252602082200180546001600160a01b0319163017905560405161145f90612e67565b604051809103905ff080158015611478573d5f5f3e3d5ffd5b503060405161148690612e74565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156114b6573d5f5f3e3d5ffd5b506005830180546001600160a01b0319166001600160a01b0383161790556040516e1ec89b985b59488e880898d85c088b608a1b60208201527f2277656273697465223a202268747470733a2f2f6361702e6170702f222c0000602f8201527f226465736372697074696f6e223a2022537461626c65636f696e2070726f746f604d8201527f636f6c2077697468206372656469626c652066696e616e6369616c2067756172606d82015267185b9d19595cc88b60c21b608d8201527f226c6f676f223a202268747470733a2f2f6361702e6170702f6d656469612d6b60958201527f69742f6361705f625f795f3838322543332539373834382e706e67222c00000060b58201527f2274776974746572223a202268747470733a2f2f782e636f6d2f6361706d6f6e60d28201526465795f227d60d81b60f28201529091505f9060f70160405160208183030381529060405290506116148161255c565b505050831561165d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b63631fea8160e11b61167981611990565b5f611682611a50565b90506001600160a01b03871630146116ad576040516366e565df60e01b815260040160405180910390fd5b600185146116ce576040516352b5f9f360e11b815260040160405180910390fd5b8054604080518082019091526001600160a01b038981168252909116905f906020810189898481611701576117016133eb565b90506020020160208101906117169190612eaf565b63ffffffff16905260405163079efa8760e11b81529091505f906001600160a01b03841690630f3df50e9061174f90859060040161367e565b602060405180830381865afa15801561176a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061178e9190613392565b90506001600160a01b03811630146117b9576040516364be1a3f60e11b815260040160405180910390fd5b896001600160a01b03168b6001600160a01b03168c6001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611809573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182d9190613392565b6001600160a01b03167f72ef63d3cdc2eeb9e8fd182e139fa7574e8723da0ccb9c51c19e0149ba8bfb628c8c5f818110611869576118696133eb565b905060200201602081019061187e9190612eaf565b60405163ffffffff909116815260200160405180910390a45050505050505050505050565b5f5f6118ad611a50565b6001600160a01b039384165f9081526009909101602052604090206001015490921692915050565b5f6118de611a50565b6001600160a01b038084165f90815260098301602052604090208054929350911661191c5760405163d92e233d60e01b815260040160405180910390fd5b8054600182015460405163890b3ed160e01b8152600160c01b820463ffffffff1660048201526001600160a01b03918216602482015291169063890b3ed1906044015f604051808303815f87803b158015611975575f5ffd5b505af1158015611987573d5f5f3e3d5ffd5b50505050505050565b5f7fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b0054604051633657648360e21b81526001600160e01b0319841660048201523060248201523360448201526001600160a01b039091169063d95d920c90606401602060405180830381865afa158015611a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3091906136a4565b905080610bbd57604051634ca8886760e01b815260040160405180910390fd5b7f54b6f5557fb44acf280f59f684357ef1d216e247bba38a36a74ec93b2377e20090565b5f611a7d611a50565b6001600160a01b0384165f90815260098201602052604080822081516001808252818401909352939450929081602001602082028036833701905050905085815f81518110611ace57611ace6133eb565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905084815f81518110611b1d57611b1d6133eb565b6020908102919091018101919091526040805160a08101825285546001600160a01b0390811682526001870154600160c01b900463ffffffff16828501528183018690526060820185905282518084018452600b81526a3634b8bab4b230ba34b7b760a91b94810194909452608082019390935286549151633635205760e01b815290925f921690633635205790611bbb90309086906004016136c3565b5f604051808303815f875af1158015611bd6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bfd919081019061377c565b50604080518082018252308152600188015463ffffffff600160c01b90910481166020830190815260028b015493516316a26f7b60e11b815283516001600160a01b03908116600483015291519092166024830152604482018590528d81166064830152939450909290911690632d44def6906084015f604051808303815f87803b158015611c8a575f5ffd5b505af1158015611c9c573d5f5f3e3d5ffd5b5050505050505050505050505050565b6040516001600160a01b03838116602483015260448201839052610b9d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061278c565b5f5f5f846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6e9190613392565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dad573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd19190613566565b6040516341976e0960e01b81526001600160a01b0384811660048301529192505f918716906341976e09906024016040805180830381865afa158015611e19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3d91906137b6565b509050611e4a88886127fe565b9350611e5782600a6138bb565b611e6182866138c9565b611e6b9190613518565b9450505050935093915050565b604051636eb1769f60e11b81526001600160a01b03828116600483015230602483015283169063dd62ed3e90604401602060405180830381865afa158015611ec2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee691906133ad565b5f03610bbd57610bbd6001600160a01b038316825f196129fb565b5f611f0a611a50565b6001600160a01b0388165f908152600982016020526040808220815160018082528184019093529394509290816020015b611f866040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b815260200190600190039081611f3b5750506040805160018082528183019092529192505f9190602082015b604080518082019091525f8082526020820152815260200190600190039081611fb25750506040805160018082528183019092529192505f9190602082015b604080518082019091525f8082526020820152815260200190600190039081611ff15750506040805180820190915285546001600160a01b03168152602081018a905281519192509082905f9061204a5761204a6133eb565b6020908102919091018101919091526040805180820182523081526001870154600160c01b900463ffffffff168184015281518083019092526001600160a01b038d168252670de0b6b3a764000092820192909252835184905f906120b1576120b16133eb565b60200260200101819052505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612111573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213591906133ad565b905061214260018a613553565b98505f875f016003015f9054906101000a90046001600160a01b03166001600160a01b031663bf21a8aa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612199573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bd91906138e0565b63ffffffff1690505f6121d0838c6138c9565b90505f836121de8d8d6133d8565b6121e891906138c9565b90508265ffffffffffff16811115612205575065ffffffffffff82165b6040518060c001604052808881526020018f6001600160a01b031681526020018781526020018363ffffffff1681526020018263ffffffff168152602001604051806040016040528060088152602001671a5b9d195c995cdd60c21b815250815250885f81518110612279576122796133eb565b602090810291909101015260038a0154604051630ca2989960e01b81526001600160a01b0390911690630ca29899906122b89088908c90600401613940565b5f604051808303815f87803b1580156122cf575f5ffd5b505af11580156122e1573d5f5f3e3d5ffd5b5050505050505050505050505050505050505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061237d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123715f516020615b075f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561239b5760405163703e46dd60e11b815260040160405180910390fd5b565b5f610bbd81611990565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612401575060408051601f3d908101601f191682019092526123fe918101906133ad565b60015b61242e57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f516020615b075f395f51905f52811461245e57604051632a87526960e21b815260048101829052602401612425565b610b9d8383612a8a565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461239b5760405163703e46dd60e11b815260040160405180910390fd5b5f5f6124bb611a50565b90505f634571e3a660e01b3086866040516024016124db93929190613aa2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600584015491519092506001600160a01b0390911690829061252e90612e81565b612539929190613acd565b604051809103905ff080158015612552573d5f5f3e3d5ffd5b5095945050505050565b5f612565611a50565b805460405163a982182160e01b81529192506001600160a01b03169063a9821821906125979030908690600401613acd565b5f604051808303815f87803b1580156125ae575f5ffd5b505af11580156125c0573d5f5f3e3d5ffd5b505050505050565b5f5f6125d2611a50565b90505f836001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612611573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126359190613392565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612674573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126989190613566565b6004848101546040516341976e0960e01b81526001600160a01b03868116938201939093529293505f929116906341976e09906024016040805180830381865afa1580156126e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061270c91906137b6565b5090505f61271988612adf565b90505f61272784600a6138bb565b61273184846138c9565b61273b9190613518565b9998505050505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611176565b612778612b4d565b61278181612b72565b50565b61239b612b4d565b5f5f60205f8451602086015f885af1806127ab576040513d5f823e3d81fd5b50505f513d915081156127c25780600114156127cf565b6001600160a01b0384163b155b156127f857604051635274afe760e01b81526001600160a01b0385166004820152602401612425565b50505050565b5f5f612808611a50565b6001600160a01b0385165f908152600982016020908152604080832081518083018352308152600180830154600160c01b900463ffffffff16828601528351818152808501909452959650909490939282810190803683375050845482519293506001600160a01b0316918391505f90612884576128846133eb565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905086815f815181106128d3576128d36133eb565b6001600160a01b03928316602091820292909201015285546040516315d5962560e11b81525f929190911690632bab2c4a90612919908790879087904390600401613af0565b5f60405180830381865afa158015612933573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261295a9190810190613b4c565b9050876001600160a01b0316637a8b2637825f8151811061297d5761297d6133eb565b60200260200101515f81518110612996576129966133eb565b60200260200101516040518263ffffffff1660e01b81526004016129bc91815260200190565b602060405180830381865afa1580156129d7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061273b91906133ad565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612a4c8482612bbe565b6127f8576040516001600160a01b0384811660248301525f6044830152612a8091869182169063095ea7b390606401611cd9565b6127f8848261278c565b612a9382612c07565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612ad757610b9d8282612c50565b610bbd612cb9565b5f5f612ae9611a50565b6001600160a01b038085165f908152600983016020526040812060018101549394509290911690612b1a86836127fe565b83549091505f90612b34906001600160a01b031684612cd8565b90505f612b418284613553565b98975050505050505050565b612b55612dc6565b61239b57604051631afcd79f60e31b815260040160405180910390fd5b612b7a612b4d565b807fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b005b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612bfd57508115612bef5780600114612bfd565b5f866001600160a01b03163b115b9695505050505050565b806001600160a01b03163b5f03612c3c57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401612425565b805f516020615b075f395f51905f52612b9d565b60605f5f846001600160a01b031684604051612c6c9190613bfb565b5f60405180830381855af49150503d805f8114612ca4576040519150601f19603f3d011682016040523d82523d5f602084013e612ca9565b606091505b50915091506111d1858383612ddf565b341561239b5760405163b398979f60e01b815260040160405180910390fd5b5f5f612ce2611a50565b6001810154604051630dc2e88960e31b81526001600160a01b03878116600483015286811660248301819052939450637a8b2637921690636e17444890604401602060405180830381865afa158015612d3d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d6191906133ad565b6040518263ffffffff1660e01b8152600401612d7f91815260200190565b602060405180830381865afa158015612d9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dbe91906133ad565b949350505050565b5f612dcf612748565b54600160401b900460ff16919050565b606082612df457612def82612e3e565b612e37565b8151158015612e0b57506001600160a01b0384163b155b15612e3457604051639996b31560e01b81526001600160a01b0385166004820152602401612425565b50805b9392505050565b805115612e4e5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b61155d80613c1283390190565b6104218061516f83390190565b6105778061559083390190565b63ffffffff81168114612781575f5ffd5b8035612eaa81612e8e565b919050565b5f60208284031215612ebf575f5ffd5b8135612e3781612e8e565b6001600160a01b0381168114612781575f5ffd5b8035612eaa81612eca565b803565ffffffffffff81168114612eaa575f5ffd5b5f5f5f5f60808587031215612f11575f5ffd5b8435612f1c81612eca565b93506020850135612f2c81612eca565b925060408501359150612f4160608601612ee9565b905092959194509250565b5f60208284031215612f5c575f5ffd5b8135612e3781612eca565b5f5f60408385031215612f78575f5ffd5b8235612f8381612eca565b91506020830135612f9381612eca565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612fd457612fd4612f9e565b60405290565b604051601f8201601f191681016001600160401b038111828210171561300257613002612f9e565b604052919050565b5f5f6001600160401b0384111561302357613023612f9e565b50601f8301601f191660200161303881612fda565b91505082815283838301111561304c575f5ffd5b828260208301375f602084830101529392505050565b5f5f60408385031215613073575f5ffd5b823561307e81612eca565b915060208301356001600160401b03811115613098575f5ffd5b8301601f810185136130a8575f5ffd5b6130b78582356020840161300a565b9150509250929050565b5f82601f8301126130d0575f5ffd5b612e378383356020850161300a565b5f5f5f5f5f60a086880312156130f3575f5ffd5b85356130fe81612eca565b9450602086013561310e81612eca565b9350604086013561311e81612eca565b925060608601356001600160401b03811115613138575f5ffd5b613144888289016130c1565b92505060808601356001600160401b0381111561315f575f5ffd5b61316b888289016130c1565b9150509295509295909350565b5f5f60408385031215613189575f5ffd5b823561319481612eca565b91506131a260208401612ee9565b90509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612e3760208301846131ab565b5f5f5f5f84860360e08112156131ff575f5ffd5b853561320a81612eca565b94506080601f198201121561321d575f5ffd5b50613226612fb2565b602086013561323481612eca565b8152604086013561324481612eca565b6020820152606086013561325781612eca565b6040820152608086013561326a81612eca565b6060820152925061327d60a08601612ede565b9150612f4160c08601612e9f565b5f5f83601f84011261329b575f5ffd5b5081356001600160401b038111156132b1575f5ffd5b6020830191508360208285010111156132c8575f5ffd5b9250929050565b5f5f5f5f5f5f608087890312156132e4575f5ffd5b86356132ef81612eca565b955060208701356132ff81612eca565b945060408701356001600160401b03811115613319575f5ffd5b8701601f81018913613329575f5ffd5b80356001600160401b0381111561333e575f5ffd5b8960208260051b8401011115613352575f5ffd5b6020919091019450925060608701356001600160401b03811115613374575f5ffd5b61338089828a0161328b565b979a9699509497509295939492505050565b5f602082840312156133a2575f5ffd5b8151612e3781612eca565b5f602082840312156133bd575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611176576111766133c4565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156134385781516001600160a01b0316865260209586019590910190600101613411565b5093949350505050565b6001600160a01b03831681526040602082018190525f90612dbe908301846133ff565b5f6001600160401b0382111561347d5761347d612f9e565b5060051b60200190565b5f82601f830112613496575f5ffd5b81516134a96134a482613465565b612fda565b8082825260208201915060208360051b8601019250858311156134ca575f5ffd5b602085015b838110156125525780518352602092830192016134cf565b5f602082840312156134f7575f5ffd5b81516001600160401b0381111561350c575f5ffd5b612dbe84828501613487565b5f8261353257634e487b7160e01b5f52601260045260245ffd5b500490565b63ffffffff8181168382160190811115611176576111766133c4565b80820180821115611176576111766133c4565b5f60208284031215613576575f5ffd5b815160ff81168114612e37575f5ffd5b5f8154808452602084019350825f5260205f205f5b828110156134385781546001600160a01b031686526020909501946001918201910161359b565b5f6060820160018060a01b03861683526060602084015280855180835260808501915060808160051b8601019250602087015f5b8281101561364457607f19878603018452815163ffffffff8151168652602081015190506040602087015261362e60408701826133ff565b95505060209384019391909101906001016135f6565b505050508281036040840152612bfd8185613586565b5f63ffffffff821663ffffffff8103613675576136756133c4565b60010192915050565b81516001600160a01b0316815260208083015163ffffffff169082015260408101611176565b5f602082840312156136b4575f5ffd5b81518015158114612e37575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f9061370b60e08401826133ff565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b808310156137535783518252602082019150602084019350600183019250613730565b506080860151858203603f190160c0870152925061377181846131ab565b979650505050505050565b5f5f6040838503121561378d575f5ffd5b825160208401519092506001600160401b038111156137aa575f5ffd5b6130b785828601613487565b5f5f604083850312156137c7575f5ffd5b505080516020909101519092909150565b6001815b6001841115613813578085048111156137f7576137f76133c4565b600184161561380557908102905b60019390931c9280026137dc565b935093915050565b5f8261382957506001611176565b8161383557505f611176565b816001811461384b576002811461385557613871565b6001915050611176565b60ff841115613866576138666133c4565b50506001821b611176565b5060208310610133831016604e8410600b8410161715613894575081810a611176565b6138a05f1984846137d8565b805f19048211156138b3576138b36133c4565b029392505050565b5f612e3760ff84168361381b565b8082028115828204841417611176576111766133c4565b5f602082840312156138f0575f5ffd5b8151612e3781612e8e565b5f8151808452602084019350602083015f5b8281101561343857815180516001600160a01b03168752602090810151818801526040909601959091019060010161390d565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b82811015613a9557868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b808310156139fb57835180516001600160a01b031683526020908101516bffffffffffffffffffffffff168184015290930192600192909201916040909101906139b6565b5060208401519250613a1860208a01846001600160a01b03169052565b6040840151925088810360408a0152613a3181846138fb565b925050506060820151613a4c606089018263ffffffff169052565b506080820151613a64608089018263ffffffff169052565b5060a0820151915086810360a0880152613a7e81836131ab565b965050506020938401939190910190600101613986565b5092979650505050505050565b6001600160a01b038481168252831660208201526060604082018190525f906111d1908301846131ab565b6001600160a01b03831681526040602082018190525f90612dbe908301846131ab565b84516001600160a01b0316815260208086015163ffffffff169082015260a060408201525f613b2260a08301866133ff565b8281036060840152613b3481866133ff565b91505063ffffffff8316608083015295945050505050565b5f60208284031215613b5c575f5ffd5b81516001600160401b03811115613b71575f5ffd5b8201601f81018413613b81575f5ffd5b8051613b8f6134a482613465565b8082825260208201915060208360051b850101925086831115613bb0575f5ffd5b602084015b83811015613bf05780516001600160401b03811115613bd2575f5ffd5b613be189602083890101613487565b84525060209283019201613bb5565b509695505050505050565b5f82518060208501845e5f92019182525091905056fe6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611487806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80637de262301161006e5780637de262301461017a578063890b3ed11461019757806389ec63d5146101aa57806399be81c8146101b2578063bfc88179146101c5578063e129ff13146101d8575f5ffd5b80631626ba7e146100b557806318bf7323146100e6578063207613c2146101175780634571e3a61461012d578063570ca735146101425780636ae46cb914610172575b5f5ffd5b6100c86100c3366004610ca9565b6101eb565b6040516001600160e01b031990911681526020015b60405180910390f35b5f5160206114325f395f51905f52546001600160a01b03165b6040516001600160a01b0390911681526020016100dd565b61011f610252565b6040519081526020016100dd565b61014061013b366004610da0565b6102bc565b005b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01546001600160a01b03166100ff565b61014061052f565b5f5160206114125f395f51905f52546001600160a01b03166100ff565b6101406101a5366004610e11565b6105ad565b61011f61083a565b6101406101c0366004610e48565b610877565b61011f6101d3366004610e86565b610938565b6101406101e6366004610e11565b6109e3565b5f8281527f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee0660205260408120545f5160206114125f395f51905f529060ff161561023f5750630b135d3f60e11b905061024c565b506001600160e01b031990505b92915050565b5f5160206114325f395f51905f52545f905f5160206114125f395f51905f5290829061028b90600160a01b900463ffffffff1642610eb6565b6005830154909150600160a01b900463ffffffff166102ab826001610ed5565b6102b59190610ee8565b9250505090565b5f6102c5610bf3565b805490915060ff600160401b82041615906001600160401b03165f811580156102eb5750825b90505f826001600160401b031660011480156103065750303b155b905081158015610314575080155b156103325760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561035c57845460ff60401b1916600160401b1785555b5f5160206114125f395f51905f5280546001600160a01b03199081166001600160a01b038c811691821784557f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee018054909316908c16179091555f5160206114325f395f51905f52805463ffffffff60a01b191661127560a81b1790556040805163754061a360e01b815290515f929163754061a39160048083019260809291908290030181865afa158015610413573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104379190610eff565b80516002840180546001600160a01b03199081166001600160a01b03938416179091556020830151600386018054831691841691821790556060840151600480880180549094169190941617909155604051630554db1160e31b815292935091632aa6d888916104af9130915f918f918f9101610fab565b5f604051808303815f87803b1580156104c6575f5ffd5b505af11580156104d8573d5f5f3e3d5ffd5b505050505050831561052457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f5160206114325f395f51905f52545f5160206114125f395f51905f52906001600160a01b031633146105755760405163ed88957160e01b815260040160405180910390fd5b60058101545f9061058f906001600160a01b031630610938565b5f90815260069092016020525060409020805460ff19166001179055565b5f5160206114125f395f51905f5280546001600160a01b031633146105e557604051635b1582bb60e11b815260040160405180910390fd5b60028101546040516340120dab60e01b81523060048201526001600160a01b0384811660248301525f9216906340120dab906044015f60405180830381865afa158015610634573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261065b91908101906110cc565b91505080515f1461067f5760405163185e69a360e31b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106106b3576106b36111c3565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050670de0b6b3a7640000815f8151811061070a5761070a6111c3565b6001600160401b039290921660209283029190910182015260408051808201825233815263ffffffff8916818401528151600180825281840190935290925f929082015b6107826040805160a081019091525f6060820181815260808301919091528190815260200160608152602001606081525090565b81526020019060019003908161074e579050509050604051806060016040528083815260200185815260200184815250815f815181106107c4576107c46111c3565b60209081029190910101526002860154604051634a944cf760e11b81526001600160a01b039091169063952899ee90610803903090859060040161121a565b5f604051808303815f87803b15801561081a575f5ffd5b505af115801561082c573d5f5f3e3d5ffd5b505050505050505050505050565b5f5160206114325f395f51905f52545f905f5160206114125f395f51905f529061087190600160a01b900463ffffffff1642610eb6565b91505090565b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01545f5160206114125f395f51905f52906001600160a01b031633146108d057604051631f0853c160e21b815260040160405180910390fd5b60038101546040516378296ec560e01b81526001600160a01b03909116906378296ec5906109069030908790879060040161130b565b5f604051808303815f87803b15801561091d575f5ffd5b505af115801561092f573d5f5f3e3d5ffd5b50505050505050565b5f5f610942610252565b90505f5160206114125f395f51905f52600301546040516305cfa43d60e11b81526001600160a01b0386811660048301528581166024830152306044830152606482018490526084820184905290911690630b9f487a9060a401602060405180830381865afa1580156109b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109db9190611338565b949350505050565b5f5160206114125f395f51905f5280546001600160a01b03163314610a1b57604051635b1582bb60e11b815260040160405180910390fd5b60058101546001600160a01b031615610a4757604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b038216610a6e5760405163d92e233d60e01b815260040160405180910390fd5b5f610a798330610938565b5f818152600684016020526040808220805460ff191660019081179091556005860180546001600160a01b0389166001600160a01b03199091161790558151818152808301909252929350909181602001602082028036833701905050905084815f81518110610aeb57610aeb6111c3565b63ffffffff90921660209283029190910182015260408051606081018252338152808301849052815192830182525f8352808201929092526002850154905163adc2e3d960e01b81526001600160a01b03919091169063adc2e3d990610b57903090859060040161137d565b5f604051808303815f87803b158015610b6e575f5ffd5b505af1158015610b80573d5f5f3e3d5ffd5b5050505060048481015460405163dcbb03b360e01b815230928101929092523360248301525f60448301526001600160a01b03169063dcbb03b3906064015f604051808303815f87803b158015610bd5575f5ffd5b505af1158015610be7573d5f5f3e3d5ffd5b50505050505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061024c565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610c5157610c51610c1b565b60405290565b604080519081016001600160401b0381118282101715610c5157610c51610c1b565b604051601f8201601f191681016001600160401b0381118282101715610ca157610ca1610c1b565b604052919050565b5f5f60408385031215610cba575f5ffd5b8235915060208301356001600160401b03811115610cd6575f5ffd5b8301601f81018513610ce6575f5ffd5b80356001600160401b03811115610cff57610cff610c1b565b610d12601f8201601f1916602001610c79565b818152866020838501011115610d26575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b6001600160a01b0381168114610d59575f5ffd5b50565b5f5f83601f840112610d6c575f5ffd5b5081356001600160401b03811115610d82575f5ffd5b602083019150836020828501011115610d99575f5ffd5b9250929050565b5f5f5f5f60608587031215610db3575f5ffd5b8435610dbe81610d45565b93506020850135610dce81610d45565b925060408501356001600160401b03811115610de8575f5ffd5b610df487828801610d5c565b95989497509550505050565b63ffffffff81168114610d59575f5ffd5b5f5f60408385031215610e22575f5ffd5b8235610e2d81610e00565b91506020830135610e3d81610d45565b809150509250929050565b5f5f60208385031215610e59575f5ffd5b82356001600160401b03811115610e6e575f5ffd5b610e7a85828601610d5c565b90969095509350505050565b5f5f60408385031215610e97575f5ffd5b8235610e2d81610d45565b634e487b7160e01b5f52601160045260245ffd5b5f82610ed057634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561024c5761024c610ea2565b808202811582820484141761024c5761024c610ea2565b5f6080828403128015610f10575f5ffd5b50604051608081016001600160401b0381118282101715610f3357610f33610c1b565b6040528251610f4181610d45565b81526020830151610f5181610d45565b60208201526040830151610f6481610d45565b60408201526060830151610f7781610d45565b60608201529392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f90610fdb9083018486610f83565b9695505050505050565b5f6001600160401b03821115610ffd57610ffd610c1b565b5060051b60200190565b5f82601f830112611016575f5ffd5b815161102961102482610fe5565b610c79565b8082825260208201915060206060840286010192508583111561104a575f5ffd5b602085015b838110156110c25760608188031215611066575f5ffd5b61106e610c2f565b81516001600160401b0381168114611084575f5ffd5b81526020820151600f81900b811461109a575f5ffd5b602082015260408201516110ad81610e00565b6040820152835260209092019160600161104f565b5095945050505050565b5f5f604083850312156110dd575f5ffd5b82516001600160401b038111156110f2575f5ffd5b8301601f81018513611102575f5ffd5b805161111061102482610fe5565b8082825260208201915060208360061b850101925087831115611131575f5ffd5b6020840193505b8284101561118e576040848903121561114f575f5ffd5b611157610c57565b845161116281610d45565b8152602085015161117281610e00565b8060208301525080835250602082019150604084019350611138565b8095505050505060208301516001600160401b038111156111ad575f5ffd5b6111b985828601611007565b9150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156112105781516001600160401b03168652602095860195909101906001016111e9565b5093949350505050565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b828110156112fe57868503605f190184528151805180516001600160a01b0316875260209081015163ffffffff16818801528082015160806040890181905281519089018190529101905f9060a08901905b808310156112cb5783516001600160a01b0316825260209384019360019390930192909101906112a0565b506040840151935088810360608a01526112e581856111d7565b985050506020958601959390930192505060010161124e565b5092979650505050505050565b6001600160a01b03841681526040602082018190525f9061132f9083018486610f83565b95945050505050565b5f60208284031215611348575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0383811682526040602080840182905284519092169083015282810151606080840152805160a084018190525f929190910190829060c08501905b808310156113e85763ffffffff84511682526020820191506020840193506001830192506113bf565b506040860151858203603f190160808701529250611406818461134f565b97965050505050505056fe960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee00960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee05a2646970667358221220a7f968a8cb2863b44e5a1dc92225b5b27775073f4004f1d1ed947d08028c2d8264736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042138038061042183398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f5ffd5b919050565b5f5f60408385031215610170575f5ffd5b61017983610144565b915061018760208401610144565b90509250929050565b6102848061019d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f5ffd5b81356001600160a01b0381168114610247575f5ffd5b939250505056fea264697066735822122078c77a6b127cd728286db270c29664d7f8ce0baa26f01289a3ae09ce2b75770e64736f6c634300081c003360a060405260405161057738038061057783398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f5f846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461033b575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610365575f5ffd5b61036e83610325565b60208401519092506001600160401b03811115610389575f5ffd5b8301601f81018513610399575f5ffd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f5ffd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805161011b61045c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f5f375f5f365f845af43d5f5f3e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f5ffd5b81516001600160a01b038116811460de575f5ffd5b939250505056fea26469706673582212207288b9b838085ecf47fe0fcc8f8675ac932e7886271a517e6717d9054724764e64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220fad542b724ad80dbaad94a7e3a26f7c71244c9262bbabb7c434f868583efda2b64736f6c634300081c0033