2 txs
3 calls
constructor
constructor(address _v2Router, address _v3Router, address _rewardsManager, address _feeRecipient, uint256 _feePercentage)
functions
getHeldTokens
viewfunction getHeldTokens(uint256 _vaultId) view returns (address[])
getMemberSharePercentage
viewfunction getMemberSharePercentage(uint256 _vaultId, address _memberAddress) view returns (uint256)
getMemberVaults
viewfunction getMemberVaults(address _user) view returns (uint256[])
getPendingJoinRequests
viewfunction getPendingJoinRequests(uint256 _vaultId) view returns (address[])
getTotalVaults
viewfunction getTotalVaults() view returns (uint256)
getVaultLeader
viewfunction getVaultLeader(uint256 _vaultId) view returns (address)
getVaultMembers
viewfunction getVaultMembers(uint256 _vaultId) view returns (address[])
getVaultTokenBalance
viewfunction getVaultTokenBalance(uint256 _vaultId, address _tokenAddress) view returns (uint256)
isVaultAdmin
viewfunction isVaultAdmin(uint256 _vaultId, address _user) view returns (bool)
memberOfVaults
viewfunction memberOfVaults(address, uint256) view returns (uint256)
migrationSource
viewfunction migrationSource() view returns (address)
owner
viewfunction owner() view returns (address)
platformFeePercentage
viewfunction platformFeePercentage() view returns (uint256)
platformFeeRecipient
viewfunction platformFeeRecipient() view returns (address)
rewardsManager
viewfunction rewardsManager() view returns (address)
totalTrackedBalances
viewfunction totalTrackedBalances(address) view returns (uint256)
uniswapV2Router
viewfunction uniswapV2Router() view returns (address)
uniswapV3Router
viewfunction uniswapV3Router() view returns (address)
vaultCounter
viewfunction vaultCounter() view returns (uint256)
vaultNameExists
viewfunction vaultNameExists(string) view returns (bool)
vaults
viewfunction vaults(uint256) view returns (uint256 id, string name, address leader, uint256 totalEthValue, uint256 totalCapitalContributed, bool exists, uint256 rewardPool)
WETH
viewfunction WETH() view returns (address)
applyToJoin
nonpayablefunction applyToJoin(uint256 _vaultId)
claimVaultTradingRewards
nonpayablefunction claimVaultTradingRewards(uint256 _vaultId)
createVault
nonpayablefunction createVault(string _name)
deleteMember
nonpayablefunction deleteMember(uint256 _vaultId, address _memberToDelete)
demoteAdmin
nonpayablefunction demoteAdmin(uint256 _vaultId, address _admin)
depositETH
payablefunction depositETH(uint256 _vaultId) payable
executePayment
nonpayablefunction executePayment(uint256 _vaultId, address _recipient, address _token, uint256 _amount)
executeSwap
nonpayablefunction executeSwap(uint256 _vaultId, uint8 _router, address _tokenIn, address _tokenOut, uint256 _amountIn, uint256 _minAmountOut, uint24 _v3fee)
processJoinRequest
nonpayablefunction processJoinRequest(uint256 _vaultId, address _applicant, bool _accept)
promoteToAdmin
nonpayablefunction promoteToAdmin(uint256 _vaultId, address _member)
setInitialVaultCounter
nonpayablefunction setInitialVaultCounter(uint256 _counter)
setMigrationSource
nonpayablefunction setMigrationSource(address _source)
setupMigratedVault
payablefunction setupMigratedVault(tuple _data) payable
teamDepositETH
payablefunction teamDepositETH(uint256 _vaultId) payable
teamDepositToken
nonpayablefunction teamDepositToken(uint256 _vaultId, address _token, uint256 _amount)
tipVaultLeader
payablefunction tipVaultLeader(uint256 _vaultId) payable
withdrawETH
nonpayablefunction withdrawETH(uint256 _vaultId, uint256 _amount)
withdrawMyReward
nonpayablefunction withdrawMyReward(uint256 _vaultId)
events
AdminDemoted
event AdminDemoted(uint256 indexed vaultId, address indexed member, address indexed demotedBy)
AdminPromoted
event AdminPromoted(uint256 indexed vaultId, address indexed member, address indexed promotedBy)
Deposit
event Deposit(uint256 indexed vaultId, address indexed member, address indexed token, uint256 amount, uint256 timestamp)
JoinRequest
event JoinRequest(uint256 indexed vaultId, address indexed applicant, uint256 timestamp)
JoinRequestProcessed
event JoinRequestProcessed(uint256 indexed vaultId, address indexed applicant, bool accepted, uint256 timestamp)
MemberRemoved
event MemberRemoved(uint256 indexed vaultId, address indexed member, address indexed removedBy, uint256 timestamp)
MemberRewardWithdrawn
event MemberRewardWithdrawn(uint256 indexed vaultId, address indexed member, uint256 amount, uint256 timestamp)
PaymentExecuted
event PaymentExecuted(uint256 indexed vaultId, address indexed executor, address recipient, address token, uint256 amount)
TeamDeposit
event TeamDeposit(uint256 indexed vaultId, address indexed from, address indexed token, uint256 amount, uint256 timestamp)
TradeExecuted
event TradeExecuted(uint256 indexed vaultId, address indexed executor, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut)
VaultCreated
event VaultCreated(uint256 indexed vaultId, address indexed leader, string name, uint256 timestamp)
VaultLeaderTipped
event VaultLeaderTipped(uint256 indexed vaultId, address indexed tipper, address indexed leader, uint256 amount)
VaultMigratedIn
event VaultMigratedIn(uint256 indexed oldVaultId, address indexed from)
VaultRewardClaimed
event VaultRewardClaimed(uint256 indexed vaultId, address indexed triggeredBy, uint256 amount, uint256 timestamp)
Withdrawal
event Withdrawal(uint256 indexed vaultId, address indexed member, address indexed token, uint256 amount, uint256 timestamp)
errors
AlreadyAdmin
error AlreadyAdmin()
AlreadyMember
error AlreadyMember()
AmountMustBePositive
error AmountMustBePositive()
CallerNotMigrationSource
error CallerNotMigrationSource()
CannotDemoteSelf
error CannotDemoteSelf()
CannotRemoveLeader
error CannotRemoveLeader()
CannotWithdrawMoreThanDeposited
error CannotWithdrawMoreThanDeposited()
DepositMustBePositive
error DepositMustBePositive()
InsufficientFunds
error InsufficientFunds()
InsufficientTokenBalanceForMigration
error InsufficientTokenBalanceForMigration()
InvalidMigrationSource
error InvalidMigrationSource()
InvalidRecipient
error InvalidRecipient()
InvalidRouterVersion
error InvalidRouterVersion()
MemberHasNoShare
error MemberHasNoShare()
NoPendingRequest
error NoPendingRequest()
NoRewardToWithdraw
error NoRewardToWithdraw()
NotAdmin
error NotAdmin()
NotContractOwner
error NotContractOwner()
NotVaultAdmin
error NotVaultAdmin()
NotVaultLeader
error NotVaultLeader()
NotVaultMember
error NotVaultMember()
RequestAlreadyPending
error RequestAlreadyPending()
TargetNotMember
error TargetNotMember()
TipMustBePositive
error TipMustBePositive()
TokenTransferFailed
error TokenTransferFailed()
UseTeamDepositETHForETH
error UseTeamDepositETHForETH()
V3FeeNotProvided
error V3FeeNotProvided()
VaultDoesNotExist
error VaultDoesNotExist()
VaultIdAlreadyExists
error VaultIdAlreadyExists()
VaultNameTaken
error VaultNameTaken(string name)
WithdrawalExceedsShare
error WithdrawalExceedsShare()
WithdrawMustBePositive
error WithdrawMustBePositive()
creation bytecode
0x60a060405234801561000f575f5ffd5b5060405161442b38038061442b83398101604081905261002e91610113565b5f8054336001600160a01b0319918216179091556001805482166001600160a01b03888116918217909255600280548416888416179055600380548416878416179055600480549093169185169190911782556005839055604080516315ab88c960e31b81529051919263ad5c46489282820192602092908290030181865afa1580156100bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e1919061016d565b6001600160a01b03166080525061018d9350505050565b80516001600160a01b038116811461010e575f5ffd5b919050565b5f5f5f5f5f60a08688031215610127575f5ffd5b610130866100f8565b945061013e602087016100f8565b935061014c604087016100f8565b925061015a606087016100f8565b9150608086015190509295509295909350565b5f6020828403121561017d575f5ffd5b610186826100f8565b9392505050565b60805161426a6101c15f395f818161057801528181612f9f0152818161323701528181613632015261382a015261426a5ff3fe608060405260043610610236575f3560e01c80638c64ea4a11610129578063c7cdea37116100a8578063defe20531161006d578063defe2053146106cf578063e5fadbda146106ee578063eb13554f1461070d578063f49e76451461072c578063f51170311461074b575f5ffd5b8063c7cdea3714610616578063cdd78cfc14610635578063cf00d9771461064a578063d471442e14610684578063d60899aa146106a3575f5ffd5b8063ad5c4648116100ee578063ad5c464814610567578063ae326f241461059a578063b502907e146105b9578063be032a70146105d8578063c254cdee146105f7575f5ffd5b80638c64ea4a146104c45780638da5cb5b146104f65780639a8bf4e014610514578063a9a61e2514610533578063ac95804114610552575f5ffd5b80634e162fef116101b5578063663a63df1161017a578063663a63df146104295780636d1c06c6146104545780637736960314610473578063816aea321461048657806388df3a01146104a5575f5ffd5b80634e162fef1461039b57806350035ad2146103ba5780635358fbda146103d95780635486f100146103ec57806356990e651461040a575f5ffd5b806319b95909116101fb57806319b959091461030c5780632bbdda521461031f5780632c76d7a61461033e5780633129847d1461035d5780633fe1da881461037c575f5ffd5b80630500e2561461024157806309aececb146102755780630d80b186146102a15780631694505e146102c257806318d638d5146102f9575f5ffd5b3661023d57005b5f5ffd5b34801561024c575f5ffd5b5061026061025b366004613939565b61076a565b60405190151581526020015b60405180910390f35b348015610280575f5ffd5b5061029461028f366004613963565b6107d2565b60405161026c91906139bd565b3480156102ac575f5ffd5b506102c06102bb366004613963565b610874565b005b3480156102cd575f5ffd5b506001546102e1906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6102c0610307366004613963565b6109b2565b6102c061031a3660046139d6565b610aa1565b34801561032a575f5ffd5b50610294610339366004613963565b610f93565b348015610349575f5ffd5b506002546102e1906001600160a01b031681565b348015610368575f5ffd5b506102c0610377366004613963565b611032565b348015610387575f5ffd5b506102c0610396366004613a22565b611188565b3480156103a6575f5ffd5b506102c06103b5366004613ae5565b61133b565b3480156103c5575f5ffd5b506102946103d4366004613963565b61162e565b6102c06103e7366004613963565b6116cd565b3480156103f7575f5ffd5b506008545b60405190815260200161026c565b348015610415575f5ffd5b506102c0610424366004613963565b61183f565b348015610434575f5ffd5b506103fc610443366004613b22565b600a6020525f908152604090205481565b34801561045f575f5ffd5b506006546102e1906001600160a01b031681565b6102c0610481366004613963565b6119b6565b348015610491575f5ffd5b506103fc6104a0366004613b3b565b611a90565b3480156104b0575f5ffd5b506103fc6104bf366004613939565b611abb565b3480156104cf575f5ffd5b506104e36104de366004613963565b611b1b565b60405161026c9796959493929190613b91565b348015610501575f5ffd5b505f546102e1906001600160a01b031681565b34801561051f575f5ffd5b506102c061052e366004613939565b611bea565b34801561053e575f5ffd5b506103fc61054d366004613939565b611fed565b34801561055d575f5ffd5b506103fc60085481565b348015610572575f5ffd5b506102e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a5575f5ffd5b506102c06105b4366004613939565b61209d565b3480156105c4575f5ffd5b506102c06105d3366004613bde565b6121f1565b3480156105e3575f5ffd5b506102c06105f2366004613b22565b61238f565b348015610602575f5ffd5b506102c0610611366004613c11565b612402565b348015610621575f5ffd5b506102c0610630366004613c52565b612670565b348015610640575f5ffd5b506103fc60055481565b348015610655575f5ffd5b50610260610664366004613a22565b805160208183018101805160098252928201919093012091525460ff1681565b34801561068f575f5ffd5b506102e161069e366004613963565b612877565b3480156106ae575f5ffd5b506106c26106bd366004613b22565b6128c9565b60405161026c9190613c72565b3480156106da575f5ffd5b506003546102e1906001600160a01b031681565b3480156106f9575f5ffd5b506102c0610708366004613cb4565b612932565b348015610718575f5ffd5b506004546102e1906001600160a01b031681565b348015610737575f5ffd5b506102c0610746366004613963565b612c44565b348015610756575f5ffd5b506102c0610765366004613939565b612c73565b5f828152600760205260408120600a0154839060ff1661079d57604051634d827f1760e01b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b038716845260060190915290206002015460ff1691505b5092915050565b5f818152600760205260409020600a0154606090829060ff1661080857604051634d827f1760e01b815260040160405180910390fd5b5f838152600760208181526040928390209091018054835181840281018401909452808452909183018282801561086657602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610848575b505050505091505b50919050565b5f818152600760205260409020600a0154819060ff166108a757604051634d827f1760e01b815260040160405180910390fd5b5f828152600760209081526040808320338452600601909152902060020154610100900460ff16156108ec576040516340803a5f60e11b815260040160405180910390fd5b5f82815260076020908152604080832033845260080190915290205460ff161561092957604051634eccce3d60e01b815260040160405180910390fd5b5f82815260076020818152604080842033808652600882018452828620805460ff1916600190811790915594845260099091018054948501815585529382902090920180546001600160a01b03191684179055905142815284917f6f7a8fa167e9ec85f5e5895685288e228205a38b1c2c4c79d635c5d3a1d0bc98910160405180910390a35050565b5f818152600760205260409020600a0154819060ff166109e557604051634d827f1760e01b815260040160405180910390fd5b345f03610a0557604051630db63b4360e41b815260040160405180910390fd5b5f828152600760205260408082206002015490516001600160a01b039091169182913480156108fc0292909190818181858888f19350505050158015610a4d573d5f5f3e3d5ffd5b50806001600160a01b0316336001600160a01b0316847f14e474dbf0549a3599d7480da6638a0b63fbf76d928875bd476c56244d36f1db34604051610a9491815260200190565b60405180910390a4505050565b6006546001600160a01b03163314610acc57604051634d3c6dff60e11b815260040160405180910390fd5b80355f818152600760205260409020600a015460ff1615610b0057604051638029f2e160e01b815260040160405180910390fd5b6009610b0f6020840184613d30565b604051610b1d929190613d7a565b9081526040519081900360200190205460ff1615610b6657610b426020830183613d30565b604051632326ec2560e11b8152600401610b5d929190613d89565b60405180910390fd5b60016009610b776020850185613d30565b604051610b85929190613d7a565b9081526040805160209281900383019020805460ff1916931515939093179092555f838152600782529190912082815590610bc290840184613d30565b6001830191610bd2919083613e34565b50610be36060840160408501613b22565b6002820180546001600160a01b0319166001600160a01b0392909216919091179055606083013560038201556080830135600b820155600a8101805460ff191660011790555f805b610c3860a0860186613eee565b9050811015610daa575f610c4f60a0870187613eee565b83818110610c5f57610c5f613f34565b9050602002016020810190610c749190613b22565b90505f610c8460c0880188613eee565b84818110610c9457610c94613f34565b6007880180546001810182555f918252602080832090910180546001600160a01b0319166001600160a01b0389161790556040805160808101825293820295909501358084529083019190915293509182019050610cf560e08a018a613eee565b86818110610d0557610d05613f34565b9050602002016020810190610d1a9190613f48565b15158152600160209182018190526001600160a01b0385165f9081526006890183526040808220855181558585015181850155858201516002909101805460609097015115156101000261ff00199215159290921661ffff199097169690961717909455600b8352928320805491820181558352912001869055610d9e8185613f77565b93505050600101610c2b565b50600482018190555f808052600583016020908152604082203490819055600a9091527f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e3805491929091610dff908490613f77565b909155505f90505b610e15610100860186613eee565b9050811015610f57575f610e2d610100870187613eee565b83818110610e3d57610e3d613f34565b9050602002016020810190610e529190613b22565b90505f610e63610120880188613eee565b84818110610e7357610e73613f34565b6040516370a0823160e01b815230600482015260209091029290920135925082916001600160a01b03851691506370a0823190602401602060405180830381865afa158015610ec4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee89190613f90565b1015610f07576040516339e8e3a960e01b815260040160405180910390fd5b6001600160a01b0382165f9081526005860160209081526040808320849055600a90915281208054839290610f3d908490613f77565b90915550610f4d90508583612da2565b5050600101610e07565b50610f6183612e12565b604051339084907f012b62d8cdab3f81008fa326bbf8f09da2c18cead95c5ebedf4e2123de88b501905f90a350505050565b5f818152600760205260409020600a0154606090829060ff16610fc957604051634d827f1760e01b815260040160405180910390fd5b5f838152600760209081526040918290206009018054835181840281018401909452808452909183018282801561086657602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610848575050505050915050919050565b5f818152600760205260409020600a0154819060ff1661106557604051634d827f1760e01b815260040160405180910390fd5b5f8281526007602090815260408083203384526006019091529020600201548290610100900460ff166110ab57604051631cf443c960e31b815260040160405180910390fd5b600354604051632f50b8d960e21b8152600481018590525f602482015247916001600160a01b03169063bd42e364906044015f604051808303815f87803b1580156110f4575f5ffd5b505af1158015611106573d5f5f3e3d5ffd5b505050505f81476111179190613fa7565b90508015611145575f858152600760205260408120600b01805483929061113f908490613f77565b90915550505b60408051828152426020820152339187917f85c3008f867bf9cf941adf6102b256329a4023f9d49f2a860b8a18d5d3f4c0b8910160405180910390a35050505050565b6009816040516111989190613fba565b9081526040519081900360200190205460ff16156111cb5780604051632326ec2560e11b8152600401610b5d9190613fd0565b60088054905f6111da83613fe2565b90915550506008546040516001906009906111f6908590613fba565b9081526040805160209281900383019020805460ff1916931515939093179092555f838152600790915220818155600181016112328482613ffa565b5060028181018054336001600160a01b03199182168117909255600a8401805460ff19166001908117909155604080516080810182525f80825260208083018281528385018681526060850187815289855260068c0184528685209551865591518588015551939098018054985161ffff1990991693151561ff00191693909317610100981515989098029790971790915560078701805480850182559082528682200180549094168517909355838352600b85528083208054928301815583529390912001849055905183907f9376fbc8a3256ef7e3d46fbc814084da897437f53f0ba86ee0089df58497400b9061132e90879042906140b5565b60405180910390a3505050565b5f838152600760205260409020600a0154839060ff1661136e57604051634d827f1760e01b815260040160405180910390fd5b5f848152600760209081526040808320338452600601909152902060020154849060ff166113af57604051635871892b60e01b815260040160405180910390fd5b5f8581526007602090815260408083206001600160a01b038816845260080190915290205460ff166113f45760405163198580dd60e31b815260040160405180910390fd5b5f8581526007602081815260408084206001600160a01b0389168552600881018352908420805460ff19169055888452919052600901905b815481101561151f57856001600160a01b031682828154811061145157611451613f34565b5f918252602090912001546001600160a01b031603611517578154829061147a90600190613fa7565b8154811061148a5761148a613f34565b905f5260205f20015f9054906101000a90046001600160a01b03168282815481106114b7576114b7613f34565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806114f2576114f26140d6565b5f8281526020902081015f1990810180546001600160a01b031916905501905561151f565b60010161142c565b5083156115de57604080516080810182525f80825260208083018281528385018381526001606086018181528d865260078086528887206001600160a01b038f168089526006820188528a892099518a55955189850155935160029098018054925115156101000261ff00199915159990991661ffff19909316929092179790971790559401805480860182559084528284200180546001600160a01b031916821790558252600b815292812080549283018155815291909120018690555b6040805185151581524260208201526001600160a01b0387169188917f9a5dec7104f72ee053265bc6110d7b46eaddf13404b649500d1fa60bb2e6fe7191015b60405180910390a3505050505050565b5f818152600760205260409020600a0154606090829060ff1661166457604051634d827f1760e01b815260040160405180910390fd5b5f83815260076020908152604091829020600c018054835181840281018401909452808452909183018282801561086657602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311610848575050505050915050919050565b5f818152600760205260409020600a0154819060ff1661170057604051634d827f1760e01b815260040160405180910390fd5b5f8281526007602090815260408083203384526006019091529020600201548290610100900460ff1661174657604051631cf443c960e31b815260040160405180910390fd5b345f036117665760405163629aae3160e01b815260040160405180910390fd5b5f838152600760209081526040808320838052600581019092528220805491923492611793908490613f77565b9250508190555034816003015f8282546117ad9190613f77565b9091555050335f908152600682016020526040812080543492906117d2908490613f77565b9250508190555034816004015f8282546117ec9190613f77565b909155506117fb905084612e12565b604080513481524260208201525f91339187917feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a2910160405180910390a450505050565b5f818152600760205260409020600a0154819060ff1661187257604051634d827f1760e01b815260040160405180910390fd5b5f8281526007602090815260408083203384526006019091529020600201548290610100900460ff166118b857604051631cf443c960e31b815260040160405180910390fd5b5f8381526007602090815260408083203384526006810190925282206001015490918190036118fa576040516396d6e90560e01b815260040160405180910390fd5b5f6127108284600b015461190e91906140ea565b6119189190614101565b9050805f0361193a576040516367300f9160e11b815260040160405180910390fd5b8083600b015f82825461194d9190613fa7565b9091555050604051339082156108fc029083905f818181858888f1935050505015801561197c573d5f5f3e3d5ffd5b5060408051828152426020820152339188917fecc9a94875dd165d87168b13cc4e683640c1f019106d7adb67e8b41aa8fa92eb910161161e565b5f818152600760205260409020600a0154819060ff166119e957604051634d827f1760e01b815260040160405180910390fd5b345f03611a095760405163629aae3160e01b815260040160405180910390fd5b5f828152600760209081526040808320838052600581019092528220805491923492611a36908490613f77565b9250508190555034816003015f828254611a509190613f77565b9091555050604080513481524260208201525f91339186917f5e9aa68bd85b689b6274093662224a00afa00d8313fce790c3649baa7be460319101610a94565b600b602052815f5260405f208181548110611aa9575f80fd5b905f5260205f20015f91509150505481565b5f828152600760205260408120600a0154839060ff16611aee57604051634d827f1760e01b815260040160405180910390fd5b50505f9182526007602090815260408084206001600160a01b039390931684526005909201905290205490565b60076020525f908152604090208054600182018054919291611b3c90613db7565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6890613db7565b8015611bb35780601f10611b8a57610100808354040283529160200191611bb3565b820191905f5260205f20905b815481529060010190602001808311611b9657829003601f168201915b50505050600283015460038401546004850154600a860154600b9096015494956001600160a01b03909316949193509160ff169087565b5f828152600760205260409020600a0154829060ff16611c1d57604051634d827f1760e01b815260040160405180910390fd5b5f838152600760209081526040808320338452600601909152902060020154839060ff16611c5e57604051635871892b60e01b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b0387168452600681019092529091206002810154610100900460ff16611cae576040516329e28d5160e11b815260040160405180910390fd5b60028201546001600160a01b0390811690861603611cdf576040516339a376e360e01b815260040160405180910390fd5b80548015611da7575f808052600584016020526040902054811115611d175760405163356680b760e01b815260040160405180910390fd5b5f80805260058401602052604081208054839290611d36908490613fa7565b9250508190555080836003015f828254611d509190613fa7565b90915550505f808355600484018054839290611d6d908490613fa7565b90915550506040516001600160a01b0387169082156108fc029083905f818181858888f19350505050158015611da5573d5f5f3e3d5ffd5b505b6001600160a01b0386165f908152600684016020526040812081815560018101829055600201805461ffff1916905560078401905b8154811015611ecf57876001600160a01b0316828281548110611e0157611e01613f34565b5f918252602090912001546001600160a01b031603611ec75781548290611e2a90600190613fa7565b81548110611e3a57611e3a613f34565b905f5260205f20015f9054906101000a90046001600160a01b0316828281548110611e6757611e67613f34565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555081805480611ea257611ea26140d6565b5f8281526020902081015f1990810180546001600160a01b0319169055019055611ecf565b600101611ddc565b506001600160a01b0387165f908152600b60205260408120905b8154811015611f8a5789828281548110611f0557611f05613f34565b905f5260205f20015403611f825781548290611f2390600190613fa7565b81548110611f3357611f33613f34565b905f5260205f200154828281548110611f4e57611f4e613f34565b905f5260205f20018190555081805480611f6a57611f6a6140d6565b600190038181905f5260205f20015f90559055611f8a565b600101611ee9565b50611f9489612e12565b336001600160a01b0316886001600160a01b03168a7fc7afe249e6747ffd83e86b35ca8515c454464531b7667c0fd09c9051ccc3fede42604051611fda91815260200190565b60405180910390a4505050505050505050565b5f828152600760205260408120600a0154839060ff1661202057604051634d827f1760e01b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b0387168452600601909152902060020154610100900460ff1661206d57604051631cf443c960e31b815260040160405180910390fd5b50505f9182526007602090815260408084206001600160a01b039390931684526006909201905290206001015490565b5f828152600760205260409020600a0154829060ff166120d057604051634d827f1760e01b815260040160405180910390fd5b5f8381526007602052604090206002015483906001600160a01b0316331461210b5760405163291edb1f60e11b815260040160405180910390fd5b336001600160a01b03841603612134576040516328da208b60e11b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b038716845260060190915290206002810154610100900460ff16612182576040516329e28d5160e11b815260040160405180910390fd5b600281015460ff166121a757604051637bfa4b9f60e01b815260040160405180910390fd5b60028101805460ff1916905560405133906001600160a01b0386169087907f14d4079a25ab5d7957ba84d1c3ef18caf82b243c04b83b29508b6eee0b3d8870905f90a45050505050565b5f838152600760205260409020600a0154839060ff1661222457604051634d827f1760e01b815260040160405180910390fd5b6001600160a01b03831661224a57604051623375d360e81b815260040160405180910390fd5b815f0361226a57604051632e11316f60e11b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b03871684526005810190925282208054919285926122a0908490613f77565b909155506122b090508185612da2565b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015612300573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123249190614120565b6123415760405163022e258160e11b815260040160405180910390fd5b604080518481524260208201526001600160a01b03861691339188917f5e9aa68bd85b689b6274093662224a00afa00d8313fce790c3649baa7be46031910160405180910390a45050505050565b5f546001600160a01b031633146123b95760405163bfcafd3760e01b815260040160405180910390fd5b6001600160a01b0381166123e05760405163b82fd5bf60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b5f848152600760205260409020600a0154849060ff1661243557604051634d827f1760e01b815260040160405180910390fd5b5f8581526007602052604090206002015485906001600160a01b031633146124705760405163291edb1f60e11b815260040160405180910390fd5b825f0361249057604051632e11316f60e11b815260040160405180910390fd5b6001600160a01b0385166124b757604051634e46966960e11b815260040160405180910390fd5b5f8681526007602090815260408083206001600160a01b038816845260058101909252909120548411156124fe5760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0385165f90815260058201602052604081208054869290612527908490613fa7565b90915550506001600160a01b03851661258b5783816003015f82825461254d9190613fa7565b90915550506040516001600160a01b0387169085156108fc029086905f818181858888f19350505050158015612585573d5f5f3e3d5ffd5b50612618565b60405163a9059cbb60e01b81526001600160a01b0387811660048301526024820186905286169063a9059cbb906044016020604051808303815f875af11580156125d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125fb9190614120565b6126185760405163022e258160e11b815260040160405180910390fd5b604080516001600160a01b03888116825287166020820152908101859052339088907f602708861e349698fd7f83c89644e640393ef1fe91bf86f415d466adb5d859639060600160405180910390a350505050505050565b5f828152600760205260409020600a0154829060ff166126a357604051634d827f1760e01b815260040160405180910390fd5b5f8381526007602090815260408083203384526006019091529020600201548390610100900460ff166126e957604051631cf443c960e31b815260040160405180910390fd5b825f036127095760405163133693ef60e31b815260040160405180910390fd5b5f8481526007602090815260408083203384526006810190925290912080548511156127485760405163703049b560e01b815260040160405180910390fd5b5f6127108260010154846003015461276091906140ea565b61276a9190614101565b90508086111561278d576040516307ce76c360e21b815260040160405180910390fd5b85825f015f82825461279f9190613fa7565b9250508190555085836004015f8282546127b99190613fa7565b9250508190555085836003015f8282546127d39190613fa7565b90915550505f808052600584016020526040812080548892906127f7908490613fa7565b9091555050604051339087156108fc029088905f818181858888f19350505050158015612826573d5f5f3e3d5ffd5b5061283087612e12565b604080518781524260208201525f9133918a917f0c5bfef78f494cb36fb1b384aba1877f423229330262eb3207e301baecc1b39e910160405180910390a450505050505050565b5f818152600760205260408120600a0154829060ff166128aa57604051634d827f1760e01b815260040160405180910390fd5b50505f908152600760205260409020600201546001600160a01b031690565b6001600160a01b0381165f908152600b602090815260409182902080548351818402810184019094528084526060939283018282801561292657602002820191905f5260205f20905b815481526020019060010190808311612912575b50505050509050919050565b5f878152600760205260409020600a0154879060ff1661296557604051634d827f1760e01b815260040160405180910390fd5b5f8881526007602052604090206002015488906001600160a01b031633146129a05760405163291edb1f60e11b815260040160405180910390fd5b60018860018111156129b4576129b461413b565b1480156129c4575062ffffff8316155b156129e25760405163238f74d960e21b815260040160405180910390fd5b845f03612a0257604051632e11316f60e11b815260040160405180910390fd5b5f8981526007602090815260408083206001600160a01b038b1684526005810190925290912054861115612a495760405163356680b760e01b815260040160405180910390fd5b6001600160a01b0388165f90815260058201602052604081208054889290612a72908490613fa7565b90915550506001600160a01b038816612a9e5785816003015f828254612a989190613fa7565b90915550505b5f808a6001811115612ab257612ab261413b565b03612aca57612ac389898989612f04565b9050612b09565b60018a6001811115612ade57612ade61413b565b03612af057612ac38989898989613562565b604051634df29e4560e11b815260040160405180910390fd5b6001600160a01b038816612b305780826003015f828254612b2a9190613f77565b90915550505b6001600160a01b0388165f90815260058301602052604081208054839290612b59908490613f77565b90915550612b6990508289612da2565b6003546001600160a01b031615612be157600354604051634df667d160e11b8152600481018d9052600160248201525f60448201526001600160a01b0390911690639beccfa2906064015f604051808303815f87803b158015612bca575f5ffd5b505af1158015612bdc573d5f5f3e3d5ffd5b505050505b604080516001600160a01b038b811682528a1660208201529081018890526060810182905233908c907f535a3364ab5a6b89c3162f88e225b790260a4ee959966cc459ce2a3548e31f339060800160405180910390a35050505050505050505050565b5f546001600160a01b03163314612c6e5760405163bfcafd3760e01b815260040160405180910390fd5b600855565b5f828152600760205260409020600a0154829060ff16612ca657604051634d827f1760e01b815260040160405180910390fd5b5f8381526007602052604090206002015483906001600160a01b03163314612ce15760405163291edb1f60e11b815260040160405180910390fd5b5f8481526007602090815260408083206001600160a01b038716845260060190915290206002810154610100900460ff16612d2f576040516329e28d5160e11b815260040160405180910390fd5b600281015460ff1615612d5557604051631c3681a560e11b815260040160405180910390fd5b60028101805460ff1916600117905560405133906001600160a01b0386169087907f04aa9139bed4b41b34ed6042938256c1880d5bb0d6efdbe56cbad32670daed44905f90a45050505050565b6001600160a01b0381165f908152600d8301602052604090205460ff16612e0e576001600160a01b0381165f818152600d8401602090815260408220805460ff19166001908117909155600c860180549182018155835291200180546001600160a01b03191690911790555b5050565b5f8181526007602052604081206004810154909103612e8b575f5b6007820154811015612e86575f826006015f846007018481548110612e5457612e54613f34565b5f9182526020808320909101546001600160a01b03168352820192909252604001902060019081019190915501612e2d565b505050565b5f5b6007820154811015612e86575f826006015f846007018481548110612eb457612eb4613f34565b5f9182526020808320909101546001600160a01b0316835282019290925260400190206004840154815491925090612eee906127106140ea565b612ef89190614101565b60019182015501612e8d565b5f5f61271060055485612f1791906140ea565b612f219190614101565b90505f612f2e8286613fa7565b90506001600160a01b03871661315f578115612f7d576004546040516001600160a01b039091169083156108fc029084905f818181858888f19350505050158015612f7b573d5f5f3e3d5ffd5b505b6040805160028082526060820183525f926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110612fd057612fd0613f34565b60200260200101906001600160a01b031690816001600160a01b031681525050868160018151811061300457613004613f34565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201525f918916906370a0823190602401602060405180830381865afa158015613056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061307a9190613f90565b60015460405163b6f9de9560e01b81529192506001600160a01b03169063b6f9de959085906130b3908a9087903090429060040161414f565b5f604051808303818588803b1580156130ca575f5ffd5b505af11580156130dc573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528493506001600160a01b038c1692506370a0823191506024015b602060405180830381865afa158015613126573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061314a9190613f90565b6131549190613fa7565b94505050505061355a565b60015460405163095ea7b360e01b81526001600160a01b039182166004820152602481018790529088169063095ea7b3906044016020604051808303815f875af11580156131af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131d39190614120565b506001600160a01b038616613369576040805160028082526060820183525f9260208301908036833701905050905087815f8151811061321557613215613f34565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061326957613269613f34565b6001600160a01b03928316602091820292909201015260015460405163791ac94760e01b81524792919091169063791ac947906132b29086908a90879030904290600401614183565b5f604051808303815f87803b1580156132c9575f5ffd5b505af11580156132db573d5f5f3e3d5ffd5b505050505f84111561335f576004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018690528a169063a9059cbb906044016020604051808303815f875af1158015613339573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061335d9190614120565b505b6131548147613fa7565b6040805160028082526060820183525f9260208301908036833701905050905087815f8151811061339c5761339c613f34565b60200260200101906001600160a01b031690816001600160a01b03168152505086816001815181106133d0576133d0613f34565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201525f918916906370a0823190602401602060405180830381865afa158015613422573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134469190613f90565b600154604051635c11d79560e01b81529192506001600160a01b031690635c11d7959061347f9086908a90879030904290600401614183565b5f604051808303815f87803b158015613496575f5ffd5b505af11580156134a8573d5f5f3e3d5ffd5b505050505f84111561352c576004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018690528a169063a9059cbb906044016020604051808303815f875af1158015613506573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352a9190614120565b505b6040516370a0823160e01b815230600482015281906001600160a01b038a16906370a082319060240161310b565b949350505050565b5f5f6127106005548661357591906140ea565b61357f9190614101565b90505f61358c8287613fa7565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101919091529091506001600160a01b0389166136fb57821561361c576004546040516001600160a01b039091169084156108fc029085905f818181858888f1935050505015801561361a573d5f5f3e3d5ffd5b505b5060408051610100810182526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081168252898116602083015262ffffff87168284015230606083015242608083015260a0820184905260c082018890525f60e0830152600254925163414bf38960e01b81529192169063414bf3899084906136b09085906004016141be565b60206040518083038185885af11580156136cc573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136f19190613f90565b9350505050613915565b60025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101899052908a169063095ea7b3906044016020604051808303815f875af115801561374b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061376f9190614120565b5082156137ee576004805460405163a9059cbb60e01b81526001600160a01b0391821692810192909252602482018590528a169063a9059cbb906044016020604051808303815f875af11580156137c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ec9190614120565b505b6040518061010001604052808a6001600160a01b031681526020015f6001600160a01b03168a6001600160a01b031614613828578961384a565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03908116825262ffffff88166020830152306040808401919091524260608401526080830186905260a083018a90525f60c0909301839052600254905163414bf38960e01b8152939450919291169063414bf389906138b49085906004016141be565b6020604051808303815f875af11580156138d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f49190613f90565b90506001600160a01b03891661390f57935061391592505050565b93505050505b95945050505050565b80356001600160a01b0381168114613934575f5ffd5b919050565b5f5f6040838503121561394a575f5ffd5b8235915061395a6020840161391e565b90509250929050565b5f60208284031215613973575f5ffd5b5035919050565b5f8151808452602084019350602083015f5b828110156139b35781516001600160a01b031686526020958601959091019060010161398c565b5093949350505050565b602081525f6139cf602083018461397a565b9392505050565b5f602082840312156139e6575f5ffd5b813567ffffffffffffffff8111156139fc575f5ffd5b820161014081850312156139cf575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215613a32575f5ffd5b813567ffffffffffffffff811115613a48575f5ffd5b8201601f81018413613a58575f5ffd5b803567ffffffffffffffff811115613a7257613a72613a0e565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715613aa157613aa1613a0e565b604052818152828201602001861015613ab8575f5ffd5b816020840160208301375f91810160200191909152949350505050565b8015158114613ae2575f5ffd5b50565b5f5f5f60608486031215613af7575f5ffd5b83359250613b076020850161391e565b91506040840135613b1781613ad5565b809150509250925092565b5f60208284031215613b32575f5ffd5b6139cf8261391e565b5f5f60408385031215613b4c575f5ffd5b613b558361391e565b946020939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b87815260e060208201525f613ba960e0830189613b63565b6001600160a01b039790971660408301525060608101949094526080840192909252151560a083015260c09091015292915050565b5f5f5f60608486031215613bf0575f5ffd5b83359250613c006020850161391e565b929592945050506040919091013590565b5f5f5f5f60808587031215613c24575f5ffd5b84359350613c346020860161391e565b9250613c426040860161391e565b9396929550929360600135925050565b5f5f60408385031215613c63575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015613ca9578351835260209384019390920191600101613c8b565b509095945050505050565b5f5f5f5f5f5f5f60e0888a031215613cca575f5ffd5b87359650602088013560028110613cdf575f5ffd5b9550613ced6040890161391e565b9450613cfb6060890161391e565b93506080880135925060a0880135915060c088013562ffffff81168114613d20575f5ffd5b8091505092959891949750929550565b5f5f8335601e19843603018112613d45575f5ffd5b83018035915067ffffffffffffffff821115613d5f575f5ffd5b602001915036819003821315613d73575f5ffd5b9250929050565b818382375f9101908152919050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b600181811c90821680613dcb57607f821691505b60208210810361086e57634e487b7160e01b5f52602260045260245ffd5b601f821115612e8657805f5260205f20601f840160051c81016020851015613e0e5750805b601f840160051c820191505b81811015613e2d575f8155600101613e1a565b5050505050565b67ffffffffffffffff831115613e4c57613e4c613a0e565b613e6083613e5a8354613db7565b83613de9565b5f601f841160018114613e91575f8515613e7a5750838201355b5f19600387901b1c1916600186901b178355613e2d565b5f83815260208120601f198716915b82811015613ec05786850135825560209485019460019092019101613ea0565b5086821015613edc575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f5f8335601e19843603018112613f03575f5ffd5b83018035915067ffffffffffffffff821115613f1d575f5ffd5b6020019150600581901b3603821315613d73575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613f58575f5ffd5b81356139cf81613ad5565b634e487b7160e01b5f52601160045260245ffd5b80820180821115613f8a57613f8a613f63565b92915050565b5f60208284031215613fa0575f5ffd5b5051919050565b81810381811115613f8a57613f8a613f63565b5f82518060208501845e5f920191825250919050565b602081525f6139cf6020830184613b63565b5f60018201613ff357613ff3613f63565b5060010190565b815167ffffffffffffffff81111561401457614014613a0e565b614028816140228454613db7565b84613de9565b6020601f82116001811461405a575f83156140435750848201515b5f19600385901b1c1916600184901b178455613e2d565b5f84815260208120601f198516915b828110156140895787850151825560209485019460019092019101614069565b50848210156140a657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f6140c76040830185613b63565b90508260208301529392505050565b634e487b7160e01b5f52603160045260245ffd5b8082028115828204841417613f8a57613f8a613f63565b5f8261411b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215614130575f5ffd5b81516139cf81613ad5565b634e487b7160e01b5f52602160045260245ffd5b848152608060208201525f614167608083018661397a565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f6141a160a083018661397a565b6001600160a01b0394909416606083015250608001529392505050565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015191821690830152610100820190506080830151608083015260a083015160a083015260c083015160c083015260e08301516107cb60e08401826001600160a01b0316905256fea26469706673582212203bbd95765ab6a9c940800cf103e495d3a42b5fe2d033aa0fb0698103e260773e64736f6c634300081e00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000d226ee94a5dea695551d429a75eb5556dd2f0dc40000000000000000000000005608f3dd5bc51a6bd6350078115fc496485d30ab00000000000000000000000000000000000000000000000000000000000001f4