0 txs
2.9k calls
constructor
constructor()
functions
cumulativeDrawdown
viewfunction cumulativeDrawdown() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultManagerId
viewfunction defaultManagerId() view returns (uint256)
DRAWDOWN_MANAGER_ROLE
viewfunction DRAWDOWN_MANAGER_ROLE() view returns (bytes32)
feesBasisPoints
viewfunction feesBasisPoints() view returns (uint16)
feesReceiver
viewfunction feesReceiver() view returns (address)
getAvailableBalance
viewfunction getAvailableBalance() view returns (uint256)
getAvailableCapacity
viewfunction getAvailableCapacity() view returns (uint256)
getControlledBalance
viewfunction getControlledBalance() view returns (uint256)
getInterestAmount
viewfunction getInterestAmount(uint256 managerId) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
INTEREST_TOPUP_ROLE
viewfunction INTEREST_TOPUP_ROLE() view returns (bytes32)
isRegisteredManager
viewfunction isRegisteredManager(address) view returns (bool)
LIQUIDITY_MANAGER_ROLE
viewfunction LIQUIDITY_MANAGER_ROLE() view returns (bytes32)
pauser
viewfunction pauser() view returns (address)
pendingInterest
viewfunction pendingInterest() view returns (uint256)
pendingPrincipal
viewfunction pendingPrincipal() view returns (uint256)
POSITION_MANAGER_ROLE
viewfunction POSITION_MANAGER_ROLE() view returns (bytes32)
positionAccountants
viewfunction positionAccountants(uint256) view returns (uint256 allocatedBalance, uint256 interestClaimedFromManager)
positionManagerConfigs
viewfunction positionManagerConfigs(uint256) view returns (address managerAddress, uint256 allocationCap, bool isActive)
positionManagerCount
viewfunction positionManagerCount() view returns (uint256)
shouldExecuteAllocation
viewfunction shouldExecuteAllocation() view returns (bool)
stakingContract
viewfunction stakingContract() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
totalAllocatedBalance
viewfunction totalAllocatedBalance() view returns (uint256)
totalAllocationCapacity
viewfunction totalAllocationCapacity() view returns (uint256)
totalFeesCollected
viewfunction totalFeesCollected() view returns (uint256)
totalFundsReceived
viewfunction totalFundsReceived() view returns (uint256)
totalFundsReturned
viewfunction totalFundsReturned() view returns (uint256)
totalInterestClaimed
viewfunction totalInterestClaimed() view returns (uint256)
totalInterestToppedUp
viewfunction totalInterestToppedUp() view returns (uint256)
addPositionManager
nonpayablefunction addPositionManager(address managerAddress, uint256 allocationCap) returns (uint256 managerId)
allocateETHToManager
nonpayablefunction allocateETHToManager(uint256 managerId, uint256 amount)
claimInterestAndTopUp
nonpayablefunction claimInterestAndTopUp(uint256 managerId, uint256 minAmount) returns (uint256)
claimInterestFromManager
nonpayablefunction claimInterestFromManager(uint256 managerId, uint256 minAmount) returns (uint256)
depositETH
payablefunction depositETH() payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(tuple init)
receiveETHFromPositionManager
payablefunction receiveETHFromPositionManager() payable
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
returnETHToStaking
nonpayablefunction returnETHToStaking(uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCumulativeDrawdown
nonpayablefunction setCumulativeDrawdown(uint256 drawdownAmount)
setDefaultManagerId
nonpayablefunction setDefaultManagerId(uint256 newDefaultManagerId)
setFeeBasisPoints
nonpayablefunction setFeeBasisPoints(uint16 newBasisPoints)
setFeesReceiver
nonpayablefunction setFeesReceiver(address newReceiver)
setPositionManagerStatus
nonpayablefunction setPositionManagerStatus(uint256 managerId, bool isActive)
setShouldExecuteAllocation
nonpayablefunction setShouldExecuteAllocation(bool executeAllocation)
topUpInterestToStaking
nonpayablefunction topUpInterestToStaking(uint256 amount) returns (uint256)
updatePositionManager
nonpayablefunction updatePositionManager(uint256 managerId, uint256 newAllocationCap, bool isActive)
withdrawAndReturn
nonpayablefunction withdrawAndReturn(uint256 managerId, uint256 amount)
withdrawETHFromManager
nonpayablefunction withdrawETHFromManager(uint256 managerId, uint256 amount)
events
ETHAllocatedToManager
event ETHAllocatedToManager(uint256 indexed managerId, uint256 amount)
ETHReceivedFromStaking
event ETHReceivedFromStaking(uint256 amount)
ETHReturnedToStaking
event ETHReturnedToStaking(uint256 amount)
ETHWithdrawnFromManager
event ETHWithdrawnFromManager(uint256 indexed managerId, uint256 amount)
FeesCollected
event FeesCollected(uint256 amount)
Initialized
event Initialized(uint8 version)
InterestClaimed
event InterestClaimed(uint256 indexed managerId, uint256 interestAmount)
InterestToppedUp
event InterestToppedUp(uint256 amount)
ProtocolConfigChanged
event ProtocolConfigChanged(bytes4 indexed setterSelector, string setterSignature, bytes value)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
LiquidityBuffer__DoesNotReceiveETH
error LiquidityBuffer__DoesNotReceiveETH()
LiquidityBuffer__ExceedsAllocationCap
error LiquidityBuffer__ExceedsAllocationCap()
LiquidityBuffer__ExceedsPendingInterest
error LiquidityBuffer__ExceedsPendingInterest()
LiquidityBuffer__ExceedsPendingPrincipal
error LiquidityBuffer__ExceedsPendingPrincipal()
LiquidityBuffer__InsufficientAllocation
error LiquidityBuffer__InsufficientAllocation()
LiquidityBuffer__InsufficientBalance
error LiquidityBuffer__InsufficientBalance()
LiquidityBuffer__InvalidConfiguration
error LiquidityBuffer__InvalidConfiguration()
LiquidityBuffer__ManagerAlreadyRegistered
error LiquidityBuffer__ManagerAlreadyRegistered()
LiquidityBuffer__ManagerInactive
error LiquidityBuffer__ManagerInactive()
LiquidityBuffer__ManagerNotFound
error LiquidityBuffer__ManagerNotFound()
LiquidityBuffer__NotPositionManagerContract
error LiquidityBuffer__NotPositionManagerContract()
LiquidityBuffer__NotStakingContract
error LiquidityBuffer__NotStakingContract()
LiquidityBuffer__Paused
error LiquidityBuffer__Paused()
LiquidityBuffer__ZeroAddress
error LiquidityBuffer__ZeroAddress()
creation bytecode
0x608060405234801562000010575f80fd5b506200001b62000021565b620000df565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614620000dd575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61462480620000ed5f395ff3fe608060405260043610610363575f3560e01c8063a217fddf116101c5578063d547741f116100f6578063f18e795111610094578063f4dc239e1161006e578063f4dc239e14610b09578063f5f1c6db14610b28578063f6326fb314610b47578063f9c33f6314610b4f5761039a565b8063f18e795114610a9d578063f2da6d6c14610abc578063f43b446514610adb5761039a565b8063e4763ab6116100d0578063e4763ab614610a28578063ee99205c14610a3d578063f05568dd14610a69578063f07b056f14610a7e5761039a565b8063d547741f146109d5578063d72a4c3a146109f4578063dc3ca0d514610a095761039a565b8063bf27f58511610163578063ca2bc7b21161013d578063ca2bc7b214610933578063cb043d0414610952578063ce02883614610997578063cf9ace7a146109b65761039a565b8063bf27f585146108e0578063c5354093146108f5578063ca15c873146109145761039a565b8063ba45f1071161019f578063ba45f10714610861578063bb8b6a7814610880578063bca93cf51461089f578063bd8db714146108cb5761039a565b8063a217fddf14610810578063b3998a3314610823578063b899456f146108425761039a565b80633e0881381161029f578063809dab6a1161023d57806391d148541161021757806391d14854146106f75780639441c05414610748578063970c18fa1461075c5780639fd0506d146107e45761039a565b8063809dab6a146106805780638c05a694146106945780639010d07c146106b35761039a565b8063607290711161027957806360729071146105dc57806360c6d8ae146105f15780636d753ef9146106065780636e19aa591461064d5761039a565b80633e0881381461057f5780634cb7afa3146105b257806350fa8221146105c75761039a565b8063248a9ca31161030c578063347e6ed3116102e6578063347e6ed31461052b57806336568abe14610533578063370dad80146105525780633729312d146105665761039a565b8063248a9ca3146104c9578063254b1514146104f75780632f2ff15d1461050c5761039a565b80631f19cdcc1161033d5780631f19cdcc14610456578063239ad40d14610475578063242f0551146104965761039a565b806301ffc9a7146103cc578063115302631461040057806315d5c6cc146104415761039a565b3661039a576040517f90eb9b8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f90eb9b8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156103d7575f80fd5b506103eb6103e6366004613df0565b610b64565b60405190151581526020015b60405180910390f35b34801561040b575f80fd5b506104337fae8857f8ca27ba6e01764c910e5411e200f3a15ef91d265c5a4692cec3f0145f81565b6040519081526020016103f7565b34801561044c575f80fd5b5061043360d45481565b348015610461575f80fd5b50610433610470366004613e2f565b610bbf565b348015610480575f80fd5b5061049461048f366004613e53565b610cd9565b005b3480156104a1575f80fd5b506104337f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f81565b3480156104d4575f80fd5b506104336104e3366004613e2f565b5f9081526065602052604090206001015490565b348015610502575f80fd5b5061043360d55481565b348015610517575f80fd5b50610494610526366004613e9f565b610e0b565b610494610e34565b34801561053e575f80fd5b5061049461054d366004613e9f565b610fc4565b34801561055d575f80fd5b5061043361107c565b348015610571575f80fd5b5060da546103eb9060ff1681565b34801561058a575f80fd5b506104337f52606b7a83252b71f5f70666fb4c3b069996459cd8fa61dfd0706f0e303c77a181565b3480156105bd575f80fd5b5061043360cb5481565b3480156105d2575f80fd5b5061043360d85481565b3480156105e7575f80fd5b5061043360d05481565b3480156105fc575f80fd5b5061043360d75481565b348015610611575f80fd5b50610638610620366004613e2f565b60cd6020525f90815260409020805460019091015482565b604080519283526020830191909152016103f7565b348015610658575f80fd5b506104337f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b81565b34801561068b575f80fd5b50610433611092565b34801561069f575f80fd5b506104946106ae366004613ecd565b6110a3565b3480156106be575f80fd5b506106d26106cd366004613eee565b6111e1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103f7565b348015610702575f80fd5b506103eb610711366004613e9f565b5f91825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b348015610753575f80fd5b506104336111ff565b348015610767575f80fd5b506107b0610776366004613e2f565b60cc6020525f908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff909116919060ff1683565b6040805173ffffffffffffffffffffffffffffffffffffffff909416845260208401929092521515908201526060016103f7565b3480156107ef575f80fd5b5060ca546106d29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561081b575f80fd5b506104335f81565b34801561082e575f80fd5b5061049461083d366004613eee565b6112e6565b34801561084d575f80fd5b5061049461085c366004613f0e565b6113df565b34801561086c575f80fd5b5061043361087b366004613e2f565b611595565b34801561088b575f80fd5b5061043361089a366004613f44565b6116cf565b3480156108aa575f80fd5b5060d6546106d29073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108d6575f80fd5b5061043360cf5481565b3480156108eb575f80fd5b5061043360ce5481565b348015610900575f80fd5b5061049461090f366004613e2f565b61196a565b34801561091f575f80fd5b5061043361092e366004613e2f565b611a5d565b34801561093e575f80fd5b5061043361094d366004613eee565b611a73565b34801561095d575f80fd5b5060d6546109849074010000000000000000000000000000000000000000900461ffff1681565b60405161ffff90911681526020016103f7565b3480156109a2575f80fd5b506104946109b1366004613e2f565b611bb1565b3480156109c1575f80fd5b506104336109d0366004613eee565b611ced565b3480156109e0575f80fd5b506104946109ef366004613e9f565b611e2c565b3480156109ff575f80fd5b5061043360d25481565b348015610a14575f80fd5b50610494610a23366004613eee565b611e50565b348015610a33575f80fd5b5061043360d15481565b348015610a48575f80fd5b5060c9546106d29073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a74575f80fd5b5061043360d95481565b348015610a89575f80fd5b50610494610a98366004613e2f565b611f49565b348015610aa8575f80fd5b50610494610ab7366004613f6e565b612041565b348015610ac7575f80fd5b50610494610ad6366004613fb6565b612192565b348015610ae6575f80fd5b506103eb610af5366004613f6e565b60db6020525f908152604090205460ff1681565b348015610b14575f80fd5b50610494610b2336600461409e565b6125f0565b348015610b33575f80fd5b50610494610b42366004613eee565b612778565b61049461287a565b348015610b5a575f80fd5b5061043360d35481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f000000000000000000000000000000000000000000000000000000001480610bb95750610bb9826129b2565b92915050565b5f81815260cc602090815260408083208151606081018352815473ffffffffffffffffffffffffffffffffffffffff1680825260018301548286015260029092015460ff1615158184015282517fe2c674390000000000000000000000000000000000000000000000000000000081529251909391928592849263e2c674399260048082019392918290030181865afa158015610c5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8291906140c1565b5f86815260cd6020908152604091829020825180840190935280548084526001909101549183019190915291925090821115610cce578051610cc49083614105565b9695505050505050565b505f95945050505050565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b610d0381612a48565b60da5482151560ff909116151503610d47576040517ff213a23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60da80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168315159081179091556040805160208101929092527f239ad40d00000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610dff91614183565b60405180910390a25050565b5f82815260656020526040902060010154610e2581612a48565b610e2f8383612a52565b505050565b5f805b60cb54811015610ec4575f81815260cc60209081526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff1680825260018301549382019390935260029091015460ff1615159281019290925233148015610ea2575080604001515b15610eb1576001925050610ec4565b5080610ebc816141c9565b915050610e37565b5080610efc576040517fed246b6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8a9190614200565b15610fc1576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116331461106e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6110788282612a73565b5050565b5f60d05460d35461108d9190614105565b905090565b5f60cf5460ce5461108d9190614105565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b6110cd81612a48565b61271061ffff8316111561110d576040517ff213a23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d680547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8516908102919091179091556040805160208101929092527f8c05a69400000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610dff9161421b565b5f8281526097602052604081206111f89083612a94565b9392505050565b5f47815b60cb548110156112e0575f81815260cc60205260409020600281015460ff16156112cd578054604080517fe2c67439000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff909216915f91839163e2c67439916004808201926020929091908290030181865afa158015611298573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bc91906140c1565b90506112c88186614261565b945050505b50806112d8816141c9565b915050611203565b50919050565b7f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f61131081612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561137a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139e9190614200565b156113d5576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2f8383612a9f565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b61140981612a48565b60cb548410611444576040517fb259407300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f84815260cc6020908152604080832060cd90925290912054841015611496576040517ff213a23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600101548460d3546114a99190614261565b6114b39190614105565b60d355600181018490556002810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016841515908117909155604080516020810188905290810186905260608101919091527fb899456f00000000000000000000000000000000000000000000000000000000907f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e7490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261158691614274565b60405180910390a25050505050565b5f7f52606b7a83252b71f5f70666fb4c3b069996459cd8fa61dfd0706f0e303c77a16115c081612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164e9190614200565b15611685576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b824710156116bf576040517f84165abd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116c883612ca7565b5090919050565b5f7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b6116fa81612a48565b8373ffffffffffffffffffffffffffffffffffffffff8116611748576040517fc2883d1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f90815260db602052604090205460ff16156117a7576040517f1eb902bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb8054935083905f6117b9836141c9565b90915550506040805160608101825273ffffffffffffffffffffffffffffffffffffffff808816808352602080840189815260018587018181525f8b815260cc85528881209751885497167fffffffffffffffffffffffff00000000000000000000000000000000000000009097169690961787559151868201559051600290950180549515157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00968716179055855180870187528481528083018581528a865260cd845287862091518255519082015591835260db90529281208054909216909217905560d380548692906118b0908490614261565b90915550506040805173ffffffffffffffffffffffffffffffffffffffff871660208201529081018590527fbb8b6a7800000000000000000000000000000000000000000000000000000000907f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e7490606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261195a916142e0565b60405180910390a2505092915050565b7fae8857f8ca27ba6e01764c910e5411e200f3a15ef91d265c5a4692cec3f0145f61199481612a48565b60d3548211156119d0576040517fae3642fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d482905560408051602081018490527fc535409300000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610dff9161434c565b5f818152609760205260408120610bb990612e74565b5f7f52606b7a83252b71f5f70666fb4c3b069996459cd8fa61dfd0706f0e303c77a1611a9e81612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b2c9190614200565b15611b63576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611b6d85612e7d565b905083811015611ba9576040517f84165abd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b949350505050565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b611bdb81612a48565b60cb548210611c16576040517fb259407300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260cc602052604090206002015460ff16611c60576040517f90ea8b0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d582905560408051602081018490527fce02883600000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610dff91614392565b5f7f52606b7a83252b71f5f70666fb4c3b069996459cd8fa61dfd0706f0e303c77a1611d1881612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d82573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da69190614200565b15611ddd576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611de785612e7d565b905083811015611e23576040517f84165abd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ba981612ca7565b5f82815260656020526040902060010154611e4681612a48565b610e2f8383612a73565b7f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f611e7a81612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f089190614200565b15611f3f576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2f8383613026565b7f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f611f7381612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120019190614200565b15612038576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611078826132b7565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b61206b81612a48565b8173ffffffffffffffffffffffffffffffffffffffff81166120b9576040517fc2883d1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091556040805160208101929092527ff18e795100000000000000000000000000000000000000000000000000000000917f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e749101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612185916143d8565b60405180910390a2505050565b5f54610100900460ff16158080156121b057505f54600160ff909116105b806121c95750303b1580156121c957505f5460ff166001145b612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401611065565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156122b1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b815173ffffffffffffffffffffffffffffffffffffffff1615806122ed5750602082015173ffffffffffffffffffffffffffffffffffffffff16155b806123105750604082015173ffffffffffffffffffffffffffffffffffffffff16155b806123335750606082015173ffffffffffffffffffffffffffffffffffffffff16155b806123565750608082015173ffffffffffffffffffffffffffffffffffffffff16155b80612379575060a082015173ffffffffffffffffffffffffffffffffffffffff16155b8061239c575060c082015173ffffffffffffffffffffffffffffffffffffffff16155b806123bf575060e082015173ffffffffffffffffffffffffffffffffffffffff16155b156123f6576040517fc2883d1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123fe613424565b815161240b905f90612a52565b6124397f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f8360200151612a52565b6124677f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b8360400151612a52565b6124957f52606b7a83252b71f5f70666fb4c3b069996459cd8fa61dfd0706f0e303c77a18360600151612a52565b6124c37fae8857f8ca27ba6e01764c910e5411e200f3a15ef91d265c5a4692cec3f0145f8360800151612a52565b60c082015160c9805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216811790925560e085015160ca805491851691831691909117905560a085015160d680549190941691161790915560da80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561258b907f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f90612a52565b8015611078575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b7f6af7a8f7f9ca95b722bc4d8832aeefb2b4e004a3a488a8f38b84605fa58e809b61261a81612a48565b60cb548310612655576040517fb259407300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260cc60205260409020600281015483151560ff9091161515036126a8576040517ff213a23300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091556040805160208101879052908101919091527ff4dc239e00000000000000000000000000000000000000000000000000000000907f01d854e8dde9402801a4c6f2840193465752abfad61e0bb7c4258d526ae42e7490606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261276a9161441e565b60405180910390a250505050565b7f77e60b99a50d27fb027f6912a507d956105b4148adab27a86d235c8bcca8fa2f6127a281612a48565b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561280c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128309190614200565b15612867576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128718383612a9f565b610e2f826132b7565b60c95473ffffffffffffffffffffffffffffffffffffffff1633146128cb576040517fc301466600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ca5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e348798b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190614200565b15612990576040517f7ca8535000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612999346134ba565b60da5460ff16156129b0576129b060d55434613026565b565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610bb957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610bb9565b610fc1813361351e565b612a5c82826135d7565b5f828152609760205260409020610e2f90826136c9565b612a7d82826136ea565b5f828152609760205260409020610e2f90826137a3565b5f6111f883836137c4565b60cb548210612ada576040517fb259407300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260cc60209081526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff1681526001820154928101929092526002015460ff16151591810182905290612b5f576040517f90ea8b0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260cd602052604090208054831115612ba7576040517f98fa509f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82815f015f828254612bb99190614105565b925050819055508260d05f828254612bd19190614105565b925050819055508260d95f828254612be99190614261565b909155505060405183815284907f7b035cfa047fbb3ca8111856b2eb061d4cba42da49add7e706a99e90018121279060200160405180910390a281516040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d906024015f604051808303815f87803b158015612c8a575f80fd5b505af1158015612c9c573d5f803e3d5ffd5b505050505050505050565b60d854811115612ce3576040517f9e82997600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060d85f828254612cf49190614105565b909155505060d6545f90612d279074010000000000000000000000000000000000000000900461ffff16836127106137ea565b90505f612d348284614105565b905060c95f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dc29f1de826040518263ffffffff1660e01b81526004015f604051808303818588803b158015612d9d575f80fd5b505af1158015612daf573d5f803e3d5ffd5b50505050508060d25f828254612dc59190614261565b90915550506040518181527f531f81575f415eae658cbb3c3df83603a83ab5be3ce3a64b4dea1f97a87ad27a9060200160405180910390a18115610e2f5760d654612e269073ffffffffffffffffffffffffffffffffffffffff168361390f565b8160d75f828254612e379190614261565b90915550506040518281527f860c0aa5520013080c2f65981705fcdea474d9f7c3daf954656ed5e65d692d1f9060200160405180910390a1505050565b5f610bb9825490565b5f80612e8883610bbf565b90508015612fe6575f83815260cc602090815260408083208151606081018352815473ffffffffffffffffffffffffffffffffffffffff1681526001808301548286015260029092015460ff1615158184015287855260cd90935290832001805491928492612ef8908490614261565b925050819055508160d15f828254612f109190614261565b925050819055508160d85f828254612f289190614261565b909155505060405182815284907f5348c12685b9d6fac64fb1a295926d2f7000dfe586d2c01493be7ac10fd6ffee9060200160405180910390a280516040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d906024015f604051808303815f87803b158015612fc9575f80fd5b505af1158015612fdb573d5f803e3d5ffd5b505050505050610bb9565b827f5348c12685b9d6fac64fb1a295926d2f7000dfe586d2c01493be7ac10fd6ffee8260405161301891815260200190565b60405180910390a292915050565b60d954811115613062576040517ff6a24eec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb54821061309d576040517fb259407300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b804710156130d7576040517f84165abd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815260cc60209081526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff1681526001820154928101929092526002015460ff1615159181018290529061315c576040517f90ea8b0500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260cd6020908152604090912090820151815461317d908590614261565b11156131b5576040517fae3642fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82815f015f8282546131c79190614261565b925050819055508260d05f8282546131df9190614261565b925050819055508260d95f8282546131f79190614105565b909155505060405183815284907fa6843d302437159b97ead3305e59a63488effc3cc89b8b69cb73d61cf23052d49060200160405180910390a281516040517fc9c0c77a0000000000000000000000000000000000000000000000000000000081525f600482015273ffffffffffffffffffffffffffffffffffffffff82169063c9c0c77a9086906024015f604051808303818588803b158015613299575f80fd5b505af11580156132ab573d5f803e3d5ffd5b50505050505050505050565b60c95473ffffffffffffffffffffffffffffffffffffffff16613306576040517fc2883d1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d954811115613342576040517ff6a24eec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cf5f8282546133539190614261565b925050819055508060d95f82825461336b9190614105565b90915550506040518181527fe6d11162ce743bffe259ab7bb6816ec557b38e532de0642f63bae9a0c9f30cd39060200160405180910390a160c95f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631103f1d3826040518263ffffffff1660e01b81526004015f604051808303818588803b15801561340a575f80fd5b505af115801561341c573d5f803e3d5ffd5b505050505050565b5f54610100900460ff166129b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401611065565b8060ce5f8282546134cb9190614261565b925050819055508060d95f8282546134e39190614261565b90915550506040518181527f133d230f3e6f6f07b707bea9d93b752bcf7a6806cab82e0f6fe23bd6c7047fee9060200160405180910390a150565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166110785761355d81613a65565b613568836020613a84565b60405160200161357992919061448a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526110659160040161450a565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611078575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561366b3390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f6111f88373ffffffffffffffffffffffffffffffffffffffff8416613cc1565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615611078575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6111f88373ffffffffffffffffffffffffffffffffffffffff8416613d0d565b5f825f0182815481106137d9576137d961451c565b905f5260205f200154905092915050565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f036138405783828161383657613836614549565b04925050506111f8565b8084116138a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401611065565b5f84868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203025f889003889004909101858311909403939093029303949094049190911702949350505050565b80471015613979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611065565b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146139cf576040519150601f19603f3d011682016040523d82523d5f602084013e6139d4565b606091505b5050905080610e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611065565b6060610bb973ffffffffffffffffffffffffffffffffffffffff831660145b60605f613a92836002614576565b613a9d906002614261565b67ffffffffffffffff811115613ab557613ab5613f89565b6040519080825280601f01601f191660200182016040528015613adf576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110613b1557613b1561451c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613b7757613b7761451c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f613bb1846002614576565b613bbc906001614261565b90505b6001811115613c58577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613bfd57613bfd61451c565b1a60f81b828281518110613c1357613c1361451c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c93613c518161458d565b9050613bbf565b5083156111f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401611065565b5f818152600183016020526040812054613d0657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bb9565b505f610bb9565b5f8181526001830160205260408120548015613de7575f613d2f600183614105565b85549091505f90613d4290600190614105565b9050818114613da1575f865f018281548110613d6057613d6061451c565b905f5260205f200154905080875f018481548110613d8057613d8061451c565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613db257613db26145c1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bb9565b5f915050610bb9565b5f60208284031215613e00575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146111f8575f80fd5b5f60208284031215613e3f575f80fd5b5035919050565b8015158114610fc1575f80fd5b5f60208284031215613e63575f80fd5b81356111f881613e46565b73ffffffffffffffffffffffffffffffffffffffff81168114610fc1575f80fd5b8035613e9a81613e6e565b919050565b5f8060408385031215613eb0575f80fd5b823591506020830135613ec281613e6e565b809150509250929050565b5f60208284031215613edd575f80fd5b813561ffff811681146111f8575f80fd5b5f8060408385031215613eff575f80fd5b50508035926020909101359150565b5f805f60608486031215613f20575f80fd5b83359250602084013591506040840135613f3981613e46565b809150509250925092565b5f8060408385031215613f55575f80fd5b8235613f6081613e6e565b946020939093013593505050565b5f60208284031215613f7e575f80fd5b81356111f881613e6e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f610100808385031215613fc8575f80fd5b6040519081019067ffffffffffffffff82118183101715614010577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b8160405261401d84613e8f565b815261402b60208501613e8f565b602082015261403c60408501613e8f565b604082015261404d60608501613e8f565b606082015261405e60808501613e8f565b608082015261406f60a08501613e8f565b60a082015261408060c08501613e8f565b60c082015261409160e08501613e8f565b60e0820152949350505050565b5f80604083850312156140af575f80fd5b823591506020830135613ec281613e46565b5f602082840312156140d1575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610bb957610bb96140d8565b5f5b8381101561413257818101518382015260200161411a565b50505f910152565b5f8151808452614151816020860160208601614118565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60408152602060408201527f73657453686f756c6445786563757465416c6c6f636174696f6e28626f6f6c296060820152608060208201525f6111f8608083018461413a565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141f9576141f96140d8565b5060010190565b5f60208284031215614210575f80fd5b81516111f881613e46565b60408152601960408201527f7365744665654261736973506f696e74732875696e74313629000000000000006060820152608060208201525f6111f8608083018461413a565b80820180821115610bb957610bb96140d8565b60408152602b60408201527f757064617465506f736974696f6e4d616e616765722875696e743235362c756960608201527f6e743235362c626f6f6c29000000000000000000000000000000000000000000608082015260a060208201525f6111f860a083018461413a565b60408152602360408201527f616464506f736974696f6e4d616e6167657228616464726573732c75696e743260608201527f3536290000000000000000000000000000000000000000000000000000000000608082015260a060208201525f6111f860a083018461413a565b60408152601e60408201527f73657443756d756c617469766544726177646f776e2875696e743235362900006060820152608060208201525f6111f8608083018461413a565b60408152601c60408201527f73657444656661756c744d616e6167657249642875696e7432353629000000006060820152608060208201525f6111f8608083018461413a565b60408152601860408201527f73657446656573526563656976657228616464726573732900000000000000006060820152608060208201525f6111f8608083018461413a565b60408152602660408201527f736574506f736974696f6e4d616e616765725374617475732875696e7432353660608201527f2c626f6f6c290000000000000000000000000000000000000000000000000000608082015260a060208201525f6111f860a083018461413a565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f83516144c1816017850160208801614118565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516144fe816028840160208801614118565b01602801949350505050565b602081525f6111f8602083018461413a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8082028115828204841417610bb957610bb96140d8565b5f8161459b5761459b6140d8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea2646970667358221220093729d2c632cfd04754bf2db2ceca721dbe18f10c2817a57cb77d906cafa2ea64736f6c63430008140033