0 txs
161 calls
constructor
constructor(address _bio)
functions
ABI_VERSION
viewfunction ABI_VERSION() view returns (string)
BIO_TOKEN
viewfunction BIO_TOKEN() view returns (address)
bioDaoTeam
viewfunction bioDaoTeam() view returns (address)
bioDaoToken
viewfunction bioDaoToken() view returns (address)
bioDaoTokenToDistribute
viewfunction bioDaoTokenToDistribute() view returns (uint256)
bioTarget
viewfunction bioTarget() view returns (uint256)
curationClosedByTeam
viewfunction curationClosedByTeam() view returns (bool)
curationStartTime
viewfunction curationStartTime() view returns (uint256)
deployFundraiserAutomatically
viewfunction deployFundraiserAutomatically() view returns (bool)
fee
viewfunction fee() view returns (uint256)
fundraiser
viewfunction fundraiser() view returns (address)
fundraiserDeploymentParams
viewfunction fundraiserDeploymentParams() view returns (bytes)
fundraiserImplementation
viewfunction fundraiserImplementation() view returns (address)
hasWhitelist
viewfunction hasWhitelist() view returns (bool)
isFundraiseSuccessful
viewfunction isFundraiseSuccessful() view returns (bool)
isLocked
viewfunction isLocked() view returns (bool)
lockedAt
viewfunction lockedAt() view returns (uint256)
lockTime
viewfunction lockTime() view returns (uint256)
maxAmountPerWhitelistedAddress
viewfunction maxAmountPerWhitelistedAddress() view returns (uint256)
maxTotalPledgePerAddress
viewfunction maxTotalPledgePerAddress() view returns (uint256)
minPledgePerAddress
viewfunction minPledgePerAddress() view returns (uint256)
owner
viewfunction owner() view returns (address)
pledges
viewfunction pledges(address) view returns (uint256)
totalCurators
viewfunction totalCurators() view returns (uint256)
totalPledged
viewfunction totalPledged() view returns (uint256)
totalPledgedForWhitelist
viewfunction totalPledgedForWhitelist() view returns (uint256)
vesting
viewfunction vesting() view returns (address)
vestingCliff
viewfunction vestingCliff() view returns (uint256)
vestingDuration
viewfunction vestingDuration() view returns (uint256)
vestingStart
viewfunction vestingStart() view returns (uint256)
vestingTimestampDuration
viewfunction vestingTimestampDuration() view returns (uint256)
whitelistAllocation
viewfunction whitelistAllocation() view returns (uint256)
whitelistEndtime
viewfunction whitelistEndtime() view returns (uint256)
whitelistPledges
viewfunction whitelistPledges(address) view returns (uint256)
claim
nonpayablefunction claim()
closeCuration
nonpayablefunction closeCuration()
closeWhitelistPhase
nonpayablefunction closeWhitelistPhase()
deployFundraiser
nonpayablefunction deployFundraiser()
initialize
nonpayablefunction initialize(tuple _params)
pledge
nonpayablefunction pledge(uint256 _amount, bytes32[] _proof)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unPledge
nonpayablefunction unPledge(uint256 amount)
unPledgeAll
nonpayablefunction unPledgeAll()
updateFee
nonpayablefunction updateFee(uint256 _fee)
updateFundraiser
nonpayablefunction updateFundraiser()
updateFundraiserDeploymentParams
nonpayablefunction updateFundraiserDeploymentParams(bytes _params)
updateFundraiserImplementation
nonpayablefunction updateFundraiserImplementation(address _newImplementation)
updateLockTime
nonpayablefunction updateLockTime(uint256 _lockTime)
updateMerkleRoot
nonpayablefunction updateMerkleRoot(bytes32 _root)
updateWhitelistAllocation
nonpayablefunction updateWhitelistAllocation(uint256 _whitelistAllocation)
updateWhitelistEndtime
nonpayablefunction updateWhitelistEndtime(uint256 _whitelistEndtime)
withdrawCuratedBio
nonpayablefunction withdrawCuratedBio() returns (uint256)
events
CurationClosed
event CurationClosed()
CurationSuccessful
event CurationSuccessful()
FeeUpdated
event FeeUpdated(uint256 oldFee, uint256 newFee)
FundraiserDeployed
event FundraiserDeployed(address indexed fundraiser)
FundraiseSuccessful
event FundraiseSuccessful(uint256 indexed vestingStart)
Initialized
event Initialized(uint64 version)
LockTimeUpdated
event LockTimeUpdated(uint256 indexed oldLockTime, uint256 indexed newLockTime)
MerkleRootUpdated
event MerkleRootUpdated(bytes32 indexed oldRoot, bytes32 indexed newRoot)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Pledged
event Pledged(address indexed account, uint256 amount)
TokenVested
event TokenVested(address indexed account, uint256 amount)
UnPledged
event UnPledged(address indexed account, uint256 amount, uint256 fee)
WhitelistAllocationUpdated
event WhitelistAllocationUpdated(uint256 indexed oldAllocation, uint256 indexed newAllocation)
WhitelistEndtimeUpdated
event WhitelistEndtimeUpdated(uint256 indexed oldDuration, uint256 indexed newDuration)
WhitelistPhaseClosed
event WhitelistPhaseClosed()
errors
Curation__AllocationAboveBioTarget
error Curation__AllocationAboveBioTarget()
Curation__AllocationAboveNewAllocation
error Curation__AllocationAboveNewAllocation()
Curation__AlreadyClaimed
error Curation__AlreadyClaimed()
Curation__AlreadySuccessful
error Curation__AlreadySuccessful()
Curation__BehindCurrentTime
error Curation__BehindCurrentTime()
Curation__BioDAOTokenForVestingNotSent
error Curation__BioDAOTokenForVestingNotSent()
Curation__BioTargetReached
error Curation__BioTargetReached()
Curation__CannotDeployFundraiser
error Curation__CannotDeployFundraiser()
Curation__ContractLocked
error Curation__ContractLocked()
Curation__CurationNotStarted
error Curation__CurationNotStarted()
Curation__DurationShorterThanCliff
error Curation__DurationShorterThanCliff()
Curation__FundraiserAlreadySuccessful
error Curation__FundraiserAlreadySuccessful()
Curation__FundraiserNotSuccessful
error Curation__FundraiserNotSuccessful()
Curation__FundraiserParamsEmpty
error Curation__FundraiserParamsEmpty()
Curation__InsufficientPledge
error Curation__InsufficientPledge()
Curation__InvalidDuration
error Curation__InvalidDuration()
Curation__InvalidProof
error Curation__InvalidProof()
Curation__InvalidZeroAddress
error Curation__InvalidZeroAddress()
Curation__MerkleRootEmpty
error Curation__MerkleRootEmpty()
Curation__NewLockupSameAsCurrentLockup
error Curation__NewLockupSameAsCurrentLockup()
Curation__NotActive
error Curation__NotActive()
Curation__OnlyApprovedIsCaller
error Curation__OnlyApprovedIsCaller()
Curation__OnlyFundraiserCanCaller
error Curation__OnlyFundraiserCanCaller()
Curation__OverMaxPledge
error Curation__OverMaxPledge()
Curation__OverMaxWhitelistPledge
error Curation__OverMaxWhitelistPledge()
Curation__UnderMinPledge
error Curation__UnderMinPledge()
Curation__WhitelistPledgedReached
error Curation__WhitelistPledgedReached()
Curation__ZeroValue
error Curation__ZeroValue()
Curation_NotWhitelisted
error Curation_NotWhitelisted()
FailedDeployment
error FailedDeployment()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60a060405234801561000f575f5ffd5b5060405161587538038061587583398101604081905261002e91610120565b61003661006e565b6001600160a01b03811661005d576040516336d0a4f160e11b815260040160405180910390fd5b6001600160a01b031660805261014d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100be5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461011d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610130575f5ffd5b81516001600160a01b0381168114610146575f5ffd5b9392505050565b6080516156ed6101885f395f818161057201528181610f9101528181611623015281816116b401528181611af80152611df301526156ed5ff3fe608060405234801561000f575f5ffd5b50600436106102ce575f3560e01c80637a84379c11610182578063b47d4eb1116100e0578063deac77991161008f578063deac77991461059d578063ecd11476146105a5578063f2fde38b146105ad578063f3640e74146105c0578063f385bcba146105c9578063f6b45cfd146105e8578063fbfa4e111461060c575f5ffd5b8063b47d4eb114610519578063b4f177241461052c578063b761f24b14610540578063cb3c050114610553578063d4ef5be61461055b578063d6e070d71461056d578063ddca3f4314610594575f5ffd5b80638c3009de1161013c5780638c3009de146104bd5780638cfe0b8a146104c65780638da5cb5b146104ce5780639012c4a8146104d6578063a4e2d634146104e9578063b0d4f5e4146104fd578063b216348214610510575f5ffd5b80637a84379c14610452578063824bd1f3146104655780638471eae21461047957806389585d10146104825780638a5d1d42146104955780638b341e09146104aa575f5ffd5b8063373eb2461161022f5780634e130b2a116101e95780634e130b2a146104005780634e71d92d1461040957806352ec55781461041157806355468ba4146104245780635666cd781461042d5780635d9c0d3614610436578063715018a61461044a575f5ffd5b8063373eb246146103ad57806342b245e6146103b557806344c63eec146103c85780634783f0ef146103db5780634926c54d146103ee5780634cee83c4146103f7575f5ffd5b80631fb4e8851161028b5780631fb4e88514610327578063245ef82c14610330578063254800d41461033957806326b66b9614610342578063310157c21461034a5780633119e4b41461036e578063343576f51461038e575f5ffd5b80630d668087146102d25780630ff37bbf146102ee578063102f3b3c14610303578063108dbe2c1461030c578063148a1b60146103155780631514617e1461031e575b5f5ffd5b6102db60085481565b6040519081526020015b60405180910390f35b6103016102fc3660046121d6565b61061f565b005b6102db60185481565b6102db600e5481565b6102db60145481565b6102db600f5481565b6102db60175481565b6102db60165481565b6102db600c5481565b610301610713565b60015461035e90600160b01b900460ff1681565b60405190151581526020016102e5565b600454610381906001600160a01b031681565b6040516102e591906121ed565b6102db61039c366004612215565b60196020525f908152604090205481565b610301610a53565b600254610381906001600160a01b031681565b600154610381906001600160a01b031681565b6103016103e93660046121d6565b610a6d565b6102db60135481565b6102db600a5481565b6102db60115481565b610301610b10565b61030161041f36600461224b565b610c9c565b6102db600b5481565b6102db60125481565b60015461035e90600160c01b900460ff1681565b610301610d1f565b610301610460366004612215565b610d30565b60015461035e90600160a81b900460ff1681565b6102db60155481565b600354610381906001600160a01b031681565b61049d610d81565b6040516102e59190612329565b6103016104b836600461233b565b610e0d565b6102db60105481565b6103016110b1565b61038161114c565b6103016104e43660046121d6565b61117a565b60015461035e90600160a01b900460ff1681565b61030161050b3660046121d6565b6111c3565b6102db60095481565b6103016105273660046123b3565b611293565b60015461035e90600160b81b900460ff1681565b61030161054e3660046121d6565b6115cb565b6102db6115d7565b5f54610381906001600160a01b031681565b6103817f000000000000000000000000000000000000000000000000000000000000000081565b6102db60075481565b6103016116e7565b610301611775565b6103016105bb366004612215565b61182f565b6102db600d5481565b6102db6105d7366004612215565b601a6020525f908152604090205481565b61049d604051806040016040528060058152602001640302e312e360dc1b81525081565b61030161061a3660046121d6565b611872565b6002546001600160a01b03163314801590610653575061063d61114c565b6001600160a01b0316336001600160a01b031614155b156106715760405163290649f360e21b815260040160405180910390fd5b600154600160a81b900460ff1661069b5760405163338f694d60e01b815260040160405180910390fd5b600a5481106106bd5760405163a5ce64c560e01b815260040160405180910390fd5b6015548110156106e05760405163714e975960e11b815260040160405180910390fd5b6012546040518291907f75cbec0af9db2f4618b4de1a4f8f4bffe262ec283a56e091589a6937cfbfaf17905f90a3601255565b6003546001600160a01b0316331461073e57604051634cf2abe960e01b815260040160405180910390fd5b600154600160b81b900460ff161561076957604051630e66f95560e11b815260040160405180910390fd5b5f546040516370a0823160e01b81526001600160a01b03909116906370a08231906107989030906004016121ed565b602060405180830381865afa1580156107b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d791906123ea565b60145411156107f95760405163c45dd58f60e01b815260040160405180910390fd5b5f546001600160a01b031661080c61114c565b6001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612401565b305f5f5f1b60405161087c906121c9565b6001600160a01b03958616815260e060208201819052600790820152667642696f44616f60c81b61010082015261012060408201819052600390820152621d909160ea1b610140820152938516606085015293909116608083015260a082015260c081019190915261016001604051809103905ff080158015610901573d5f5f3e3d5ffd5b5060018054600163ff00000160a01b0319166001600160a01b039290921691909117600160b81b17905542600c819055600f5461093e9190612430565b601755600354600154604051631bdbfcef60e21b81526001600160a01b0392831692636f6ff3bc92610975929116906004016121ed565b5f604051808303815f87803b15801561098c575f5ffd5b505af115801561099e573d5f5f3e3d5ffd5b5050600154600354604051632f2ff15d60e01b81527ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee760048201526001600160a01b03918216602482015291169250632f2ff15d91506044015f604051808303815f87803b158015610a0e575f5ffd5b505af1158015610a20573d5f5f3e3d5ffd5b5050600c546040519092507f92e9e39e1dfeb2f1294342e127dc43cf98a67f62e6f09e4b42b6e8da544067c791505f90a2565b335f90815260196020526040902054610a6b90611919565b565b6002546001600160a01b03163314801590610aa15750610a8b61114c565b6001600160a01b0316336001600160a01b031614155b15610abf5760405163290649f360e21b815260040160405180910390fd5b80610add5760405163188566ad60e31b815260040160405180910390fd5b6005546040518291907ffd69edeceaf1d6832d935be1fba54ca93bf17e71520c6c9ffc08d6e9529f8757905f90a3600555565b600154600160b81b900460ff16610b3a5760405163a94806b160e01b815260040160405180910390fd5b335f9081526019602052604081205490819003610b6a576040516355ec7cdb60e11b815260040160405180910390fd5b335f908152601960205260408120819055600b54601454610b8b9084612443565b610b95919061245a565b9050426017541015610bbc575f54610bb7906001600160a01b03163383611bd7565b610c63565b6001545f54610bd8916001600160a01b03918216911683611bd7565b60018054600c54600d54600f546040516317e289e960e01b815233600482015260248101939093526044830191909152606482015260848101929092525f60a483015260c482018390526001600160a01b0316906317e289e99060e4015f604051808303815f87803b158015610c4c575f5ffd5b505af1158015610c5e573d5f5f3e3d5ffd5b505050505b60405181815233907f7e04575a9d5f6038ea6ee0bb1a2cfe0ae38555fddafec1dec4d69b504b72ba189060200160405180910390a25050565b6002546001600160a01b03163314801590610cd05750610cba61114c565b6001600160a01b0316336001600160a01b031614155b15610cee5760405163290649f360e21b815260040160405180910390fd5b80515f03610d0f57604051636d67ec3760e01b815260040160405180910390fd5b6006610d1b8282612510565b5050565b610d27611c36565b610a6b5f611c68565b610d38611c36565b6001600160a01b038116610d5f576040516336d0a4f160e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60068054610d8e90612479565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90612479565b8015610e055780601f10610ddc57610100808354040283529160200191610e05565b820191905f5260205f20905b815481529060010190602001808311610de857829003601f168201915b505050505081565b601154421015610e305760405163e4ab4b3360e01b815260040160405180910390fd5b600154600160b01b900460ff1615610e5b576040516301dafd3f60e31b815260040160405180910390fd5b600a54600b5403610e7f576040516324d0431560e11b815260040160405180910390fd5b600154600160a81b900460ff168015610e99575042601054115b15610eae57610ea9838383611cd8565b505050565b600a5483600b54610ebf9190612430565b1115610ed857600b54600a54610ed591906125c5565b92505b335f908152601a6020526040812054610ef1575f610f01565b335f908152601a60205260409020545b90505f81601654610f129190612430565b335f9081526019602052604090205490915081610f2f8783612430565b1115610f4e576040516399669a0d60e01b815260040160405180910390fd5b601354861015610f8457601354610f6582846125c5565b1115610f8457604051634fbfd05160e11b815260040160405180910390fd5b610fb96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333089611ef4565b805f03610fd557600e8054905f610fcf836125d8565b91905055505b335f9081526019602052604081208054889290610ff3908490612430565b9250508190555085600b5f82825461100b9190612430565b909155505060405186815233907f2726ce6e3b7987cbbb10c5a55b44725526c540fbba590cfc20afab691fa45edf9060200160405180910390a2600a54600b54036110a9576001805460ff60a01b1916600160a01b179055426009556040517f13016a29ffcf9d907b8a6330d6d56ab9ab0bfc4af03bf6badeadc4c4f3f8c836905f90a1600154600160c01b900460ff16156110a9576110a9611f33565b505050505050565b6002546001600160a01b031633148015906110e557506110cf61114c565b6001600160a01b0316336001600160a01b031614155b156111035760405163290649f360e21b815260040160405180910390fd5b600154600160a01b900460ff16158061112657506003546001600160a01b031615155b15611144576040516347530dc360e01b815260040160405180910390fd5b610a6b611f33565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611182611c36565b60075460408051918252602082018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a1600755565b6002546001600160a01b031633148015906111f757506111e161114c565b6001600160a01b0316336001600160a01b031614155b156112155760405163290649f360e21b815260040160405180910390fd5b600154600160a81b900460ff1661123f5760405163338f694d60e01b815260040160405180910390fd5b4281101561126057604051635393be6560e01b815260040160405180910390fd5b6010546040518291907f90ba20ee0c5df3535b01f7602d38bb696ade293ae71dbf9c5d5994d3303f9765905f90a3601055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112d75750825b90505f826001600160401b031660011480156112f25750303b155b905081158015611300575080155b1561131e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561134857845460ff60401b1916600160401b1785555b6113513361201f565b61135e60208701876125f0565b156113f45760a08601356113855760405163188566ad60e31b815260040160405180910390fd5b85610100013586610180013511156113b05760405163a5ce64c560e01b815260040160405180910390fd5b6001805460ff60a81b1916600160a81b17905560a08601356005556101808601356012556113e761016087013560e0880135612430565b6010556102008601356018555b856101200135866101400135101561141e5760405162591e9360e51b815260040160405180910390fd5b62093a80866101400135108061143c5750635dfc0f00866101400135115b1561145a57604051634d1a349760e01b815260040160405180910390fd5b6101f460075560c0860135600855610100860135600a556114816080870160608801612215565b600280546001600160a01b0319166001600160a01b03929092169190911790556114b16060870160408801612215565b5f80546001600160a01b0319166001600160a01b0392909216919091179055610120860135600d5560e0860135601155610140860135600f556101a08601356013556101c086013560145561150c60a0870160808801612215565b600480546001600160a01b0319166001600160a01b03929092169190911790556101e086013560165561154361022087018761260f565b600691611551919083612658565b5061156260408701602088016125f0565b60018054911515600160c01b0260ff60c01b1990921691909117905583156110a957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b6115d481611919565b50565b5f6115e0611c36565b600154600160b81b900460ff1661160a5760405163a94806b160e01b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906116589030906004016121ed565b602060405180830381865afa158015611673573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169791906123ea565b905080156116e0576116db6116aa61114c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611bd7565b905090565b5f91505090565b6002546001600160a01b0316331480159061171b575061170561114c565b6001600160a01b0316336001600160a01b031614155b156117395760405163290649f360e21b815260040160405180910390fd5b6001805460ff60a81b191690555f60108190556040517f8d03dbe3af413849b741b3524d5c855ec38b2a199208e69e08781555a27b99e49190a1565b6002546001600160a01b031633148015906117a9575061179361114c565b6001600160a01b0316336001600160a01b031614155b156117c75760405163290649f360e21b815260040160405180910390fd5b600154600160a01b900460ff16156117f25760405163764e409f60e11b815260040160405180910390fd5b6001805460ff60b01b1916600160b01b1790556040517f73a766bf28fd361319ca7b762c3ddbfcb82701e0131dc408f0ab579755172518905f90a1565b611837611c36565b6001600160a01b038116611869575f604051631e4fbdf760e01b815260040161186091906121ed565b60405180910390fd5b6115d481611c68565b6002546001600160a01b031633148015906118a6575061189061114c565b6001600160a01b0316336001600160a01b031614155b156118c45760405163290649f360e21b815260040160405180910390fd5b60085481036118e657604051634d74770560e01b815260040160405180910390fd5b6008546040518291907f5707a70527b6cbb892bfe5d8739a8f0643d3212d9b1139bc31c742e731c65270905f90a3600855565b600154600160b81b900460ff161561194457604051630e66f95560e11b815260040160405180910390fd5b600154600160a01b900460ff16801561196b57506008546009546119689190612430565b42105b1561198957604051630b3a7a4960e21b815260040160405180910390fd5b805f036119a9576040516355ec7cdb60e11b815260040160405180910390fd5b335f908152601960205260409020548111156119d85760405163050b71db60e51b815260040160405180910390fd5b335f908152601960205260408120546119f29083906125c5565b90508015801590611a04575060135481105b15611a2257604051634fbfd05160e11b815260040160405180910390fd5b426010541115611a66578160155f828254611a3d91906125c5565b9091555050335f908152601a602052604081208054849290611a609084906125c5565b90915550505b81600b5f828254611a7791906125c5565b9091555050335f908152601960205260408120829055819003611aa957600e8054905f611aa38361270c565b91905055505b6001545f90600160b01b900460ff16611adc5761271060075484611acd9190612443565b611ad7919061245a565b611ade565b5f5b9050611b1f33611aee83866125c5565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190611bd7565b8015611b8f57611b8f611b3061114c565b6001600160a01b031663469048406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116aa9190612401565b337f370fdf6ac00ef2749a3dd149593acf61362f58735b29ef1b4e50f6baaae4c42b611bbb83866125c5565b60408051918252602082018590520160405180910390a2505050565b6040516001600160a01b03838116602483015260448201839052610ea991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612030565b33611c3f61114c565b6001600160a01b031614610a6b573360405163118cdaa760e01b815260040161186091906121ed565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f33604051602001611cea91906121ed565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050611d5f8383808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506005549150849050612093565b611d7c5760405163f554a08160e01b815260040160405180910390fd5b601254601554611d8c9086612430565b1115611dab576040516362518b6f60e01b815260040160405180910390fd5b601854335f90815260196020526040902054611dc79086612430565b1115611de657604051631748d72d60e31b815260040160405180910390fd5b611e1b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087611ef4565b335f908152601960205260408120549003611e4557600e8054905f611e3f836125d8565b91905055505b83600b5f828254611e569190612430565b9091555050335f9081526019602052604081208054869290611e79908490612430565b925050819055508360155f828254611e919190612430565b9091555050335f908152601a602052604081208054869290611eb4908490612430565b909155505060405184815233907f2726ce6e3b7987cbbb10c5a55b44725526c540fbba590cfc20afab691fa45edf9060200160405180910390a250505050565b6040516001600160a01b038481166024830152838116604483015260648201839052611f2d9186918216906323b872dd90608401611c04565b50505050565b60068054611f4090612479565b90505f03611f6157604051636d67ec3760e01b815260040160405180910390fd5b600454611f76906001600160a01b03166120d3565b600380546001600160a01b0319166001600160a01b0392909216918217905560405163cce2df0360e01b815263cce2df0390611fb9906006903090600401612721565b5f604051808303815f87803b158015611fd0575f5ffd5b505af1158015611fe2573d5f5f3e3d5ffd5b50506003546040516001600160a01b0390911692507fcbcee102074d5d86c8f50f8472b026af86b6fbaee9cd29ca6e3fa045b974af7f91505f90a2565b6120276120e4565b6115d48161212d565b5f5f60205f8451602086015f885af18061204f576040513d5f823e3d81fd5b50505f513d91508115612066578060011415612073565b6001600160a01b0384163b155b15611f2d5783604051635274afe760e01b815260040161186091906121ed565b5f8351156120cc5760208401845160051b81015b8151841160051b938452815160209485185260405f2093909101908082106120a75750505b5014919050565b5f6120de825f612135565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a6b57604051631afcd79f60e31b815260040160405180910390fd5b6118376120e4565b5f814710156121605760405163cf47918160e01b815247600482015260248101839052604401611860565b763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b176020526037600983f090506001600160a01b0381166120de5760405163b06ebf3d60e01b815260040160405180910390fd5b612f01806127b783390190565b5f602082840312156121e6575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146115d4575f5ffd5b5f60208284031215612225575f5ffd5b813561223081612201565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561225b575f5ffd5b81356001600160401b03811115612270575f5ffd5b8201601f81018413612280575f5ffd5b80356001600160401b0381111561229957612299612237565b604051601f8201601f19908116603f011681016001600160401b03811182821017156122c7576122c7612237565b6040528181528282016020018610156122de575f5ffd5b816020840160208301375f91810160200191909152949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61223060208301846122fb565b5f5f5f6040848603121561234d575f5ffd5b8335925060208401356001600160401b03811115612369575f5ffd5b8401601f81018613612379575f5ffd5b80356001600160401b0381111561238e575f5ffd5b8660208260051b84010111156123a2575f5ffd5b939660209190910195509293505050565b5f602082840312156123c3575f5ffd5b81356001600160401b038111156123d8575f5ffd5b82016102408185031215612230575f5ffd5b5f602082840312156123fa575f5ffd5b5051919050565b5f60208284031215612411575f5ffd5b815161223081612201565b634e487b7160e01b5f52601160045260245ffd5b808201808211156120de576120de61241c565b80820281158282048414176120de576120de61241c565b5f8261247457634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c9082168061248d57607f821691505b6020821081036124ab57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610ea957805f5260205f20601f840160051c810160208510156124d65750805b601f840160051c820191505b818110156124f5575f81556001016124e2565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b0381111561252957612529612237565b61253d816125378454612479565b846124b1565b6020601f82116001811461256a575f83156125585750848201515b61256284826124fc565b8555506124f5565b5f84815260208120601f198516915b828110156125995787850151825560209485019460019092019101612579565b50848210156125b657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818103818111156120de576120de61241c565b5f600182016125e9576125e961241c565b5060010190565b5f60208284031215612600575f5ffd5b81358015158114612230575f5ffd5b5f5f8335601e19843603018112612624575f5ffd5b8301803591506001600160401b0382111561263d575f5ffd5b602001915036819003821315612651575f5ffd5b9250929050565b6001600160401b0383111561266f5761266f612237565b6126838361267d8354612479565b836124b1565b5f601f8411600181146126af575f851561269d5750838201355b6126a786826124fc565b8455506124f5565b5f83815260208120601f198716915b828110156126de57868501358255602094850194600190920191016126be565b50868210156126fa575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f8161271a5761271a61241c565b505f190190565b604081525f5f845461273281612479565b806040860152600182165f8114612750576001811461276c5761279d565b60ff1983166060870152606082151560051b870101935061279d565b875f5260205f205f5b8381101561279457815488820160600152600190910190602001612775565b87016060019450505b5050506001600160a01b0384166020840152905061223056fe60a060405234801561000f575f5ffd5b50604051612f01380380612f0183398101604081905261002e9161036f565b60015f818155815460ff19169091558790879087908690338061006a57604051636116401160e11b81525f600482015260240160405180910390fd5b600380546001600160d01b0316600160d01b65ffffffffffff8516021790556100935f826101a1565b5050506001600160a01b03841660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156100de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101029190610421565b60ff1660121461012557604051631273be1d60e31b815260040160405180910390fd5b600561013184826104cc565b50600661013e83826104cc565b506101697ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee7826101a1565b505050600b929092555050600d5550600e80546001600160a01b0319166001600160a01b039290921691909117905550610586915050565b5f826101fd575f6101ba6004546001600160a01b031690565b6001600160a01b0316146101e157604051631fe1e13d60e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0384161790555b6102078383610210565b90505b92915050565b5f8281526002602090815260408083206001600160a01b038516845290915281205460ff166102b4575f8381526002602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561026c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161020a565b505f61020a565b6001600160a01b03811681146102cf575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102f5575f5ffd5b81516001600160401b0381111561030e5761030e6102d2565b604051601f8201601f19908116603f011681016001600160401b038111828210171561033c5761033c6102d2565b604052818152838201602001851015610353575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f5f5f60e0888a031215610385575f5ffd5b8751610390816102bb565b60208901519097506001600160401b038111156103ab575f5ffd5b6103b78a828b016102e6565b60408a015190975090506001600160401b038111156103d4575f5ffd5b6103e08a828b016102e6565b95505060608801516103f1816102bb565b6080890151909450610402816102bb565b60a089015160c090990151979a96995094979396949593949392505050565b5f60208284031215610431575f5ffd5b815160ff81168114610441575f5ffd5b9392505050565b600181811c9082168061045c57607f821691505b60208210810361047a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104c757805f5260205f20601f840160051c810160208510156104a55750805b601f840160051c820191505b818110156104c4575f81556001016104b1565b50505b505050565b81516001600160401b038111156104e5576104e56102d2565b6104f9816104f38454610448565b84610480565b6020601f82116001811461052b575f83156105145750848201515b5f19600385901b1c1916600184901b1784556104c4565b5f84815260208120601f198516915b8281101561055a578785015182556020948501946001909201910161053a565b508482101561057757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805161294e6105b35f395f818161043f01528181610b7e0152818161104b01526118a0015261294e5ff3fe608060405260043610610296575f3560e01c806370a0823111610160578063a9059cbb116100c9578063cf6eefb711610083578063cf6eefb7146107af578063d547741f146107e9578063d602b9fd14610808578063dd62ed3e1461081c578063e9a7fb541461083d578063ea1bb3d514610870578063f51321d71461088f575f5ffd5b8063a9059cbb14610338578063b67383ad1461072a578063b75c7dc614610749578063cb37f3b214610768578063cc8463c814610787578063cefc14291461079b575f5ffd5b806391d148541161011a57806391d148541461067057806395d89b411461068f5780639ef346b4146106a3578063a1eda53c146106cf578063a217fddf14610702578063a5205a0f14610715575f5ffd5b806370a08231146105c25780637cb64759146105f657806384ef8ffc146106155780638af104da146106295780638da5cb5b1461064857806390be10cc1461065c575f5ffd5b80632495a599116102025780635c975abb116101bc5780635c975abb1461051c57806362d5081d14610533578063634e93da14610546578063649a5ec71461056557806365ebf99a1461058457806366afd8ef146105a3575f5ffd5b80632495a5991461042e5780632e1a7d4d1461046e5780632f2ff15d1461048d578063313ce567146104ac57806336568abe146104d25780634b866a2d146104f1575f5ffd5b80631128fed4116102535780631128fed41461036b57806316c38b3c1461038a57806317e289e9146103a957806318160ddd146103c857806323b872dd146103e6578063248a9ca314610400575f5ffd5b806301ffc9a71461029a578063022d63fb146102ce57806305d6cc59146102f657806306fdde0314610317578063095ea7b3146103385780630aa6220b14610357575b5f5ffd5b3480156102a5575f5ffd5b506102b96102b4366004612402565b6108ae565b60405190151581526020015b60405180910390f35b3480156102d9575f5ffd5b50620697805b60405165ffffffffffff90911681526020016102c5565b348015610301575f5ffd5b5061031561031036600461243d565b6108d8565b005b348015610322575f5ffd5b5061032b6109a0565b6040516102c59190612458565b348015610343575f5ffd5b506102b961035236600461248d565b610a2c565b348015610362575f5ffd5b50610315610a46565b348015610376575f5ffd5b506102b96103853660046124cb565b610a58565b348015610395575f5ffd5b506103156103a436600461252e565b610ac8565b3480156103b4575f5ffd5b506103156103c33660046124cb565b610aec565b3480156103d3575f5ffd5b506007545b6040519081526020016102c5565b3480156103f1575f5ffd5b506102b9610352366004612547565b34801561040b575f5ffd5b506103d861041a366004612585565b5f9081526002602052604090206001015490565b348015610439575f5ffd5b506104617f000000000000000000000000000000000000000000000000000000000000000081565b6040516102c5919061259c565b348015610479575f5ffd5b50610315610488366004612585565b610b37565b348015610498575f5ffd5b506103156104a73660046125b0565b610baf565b3480156104b7575f5ffd5b506104c0601281565b60405160ff90911681526020016102c5565b3480156104dd575f5ffd5b506103156104ec3660046125b0565b610bd7565b3480156104fc575f5ffd5b506103d861050b36600461243d565b60096020525f908152604090205481565b348015610527575f5ffd5b5060015460ff166102b9565b6103156105413660046125de565b610c8d565b348015610551575f5ffd5b5061031561056036600461243d565b610e65565b348015610570575f5ffd5b5061031561057f36600461268c565b610e78565b34801561058f575f5ffd5b5061031561059e36600461243d565b610e8b565b3480156105ae575f5ffd5b506103156105bd3660046126b1565b610f13565b3480156105cd575f5ffd5b506103d86105dc36600461243d565b6001600160a01b03165f908152600a602052604090205490565b348015610601575f5ffd5b50610315610610366004612585565b610fa5565b348015610620575f5ffd5b50610461610fe2565b348015610634575f5ffd5b506103d861064336600461248d565b610ff1565b348015610653575f5ffd5b50610461611037565b348015610667575f5ffd5b506103d8611045565b34801561067b575f5ffd5b506102b961068a3660046125b0565b6110de565b34801561069a575f5ffd5b5061032b611108565b3480156106ae575f5ffd5b506106c26106bd366004612585565b611115565b6040516102c591906126e5565b3480156106da575f5ffd5b506106e36111dd565b6040805165ffffffffffff9384168152929091166020830152016102c5565b34801561070d575f5ffd5b506103d85f81565b348015610720575f5ffd5b506103d8600d5481565b348015610735575f5ffd5b50610315610744366004612585565b61122f565b348015610754575f5ffd5b50610315610763366004612585565b611296565b348015610773575f5ffd5b50600e54610461906001600160a01b031681565b348015610792575f5ffd5b506102df61145d565b3480156107a6575f5ffd5b506103156114bb565b3480156107ba575f5ffd5b506107c36114fa565b604080516001600160a01b03909316835265ffffffffffff9091166020830152016102c5565b3480156107f4575f5ffd5b506103156108033660046125b0565b61151b565b348015610813575f5ffd5b50610315611543565b348015610827575f5ffd5b506103d8610836366004612782565b5f92915050565b348015610848575f5ffd5b506103d87ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee781565b34801561087b575f5ffd5b506103d861088a366004612585565b611555565b34801561089a575f5ffd5b506106c26108a936600461248d565b6115eb565b5f6001600160e01b031982166318a4c3c360e11b14806108d257506108d282611607565b92915050565b6108e061163b565b336001600160a01b0382161480159061091257506108fc611037565b6001600160a01b0316336001600160a01b031614155b1561092f576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381165f90815260096020526040812054905b81811015610992575f61095c8483610ff1565b5f8181526008602052604081209192509061097690611663565b9050801561098857610988828261173a565b5050600101610949565b505061099d60015f55565b50565b600580546109ad906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546109d9906127ae565b8015610a245780601f106109fb57610100808354040283529160200191610a24565b820191905f5260205f20905b815481529060010190602001808311610a0757829003601f168201915b505050505081565b5f604051630280e1e560e61b815260040160405180910390fd5b5f610a5081611901565b61099d61190b565b5f5f88888888888888604051602001610a7797969594939291906127e0565b60408051601f198184030181528282528051602091820120908301520160408051808303601f1901815291815281516020928301205f908152600c90925290205460ff169998505050505050505050565b5f610ad281611901565b8115610ae457610ae0611917565b5050565b610ae0611965565b610af461199e565b7ff775c0bcd58c044bfc5fe4f46a6f6959085a968df72ead59815aea8f53313ee7610b1e81611901565b610b2d888888888888886119c2565b5050505050505050565b610b3f61163b565b5f610b4981611901565b610b51611045565b821115610b71576040516314a83c1960e01b815260040160405180910390fd5b610ba56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611d04565b5061099d60015f55565b81610bcd57604051631fe1e13d60e11b815260040160405180910390fd5b610ae08282611d5b565b81158015610bfd5750610be8610fe2565b6001600160a01b0316816001600160a01b0316145b15610c83575f5f610c0c6114fa565b90925090506001600160a01b038216151580610c2e575065ffffffffffff8116155b80610c4157504265ffffffffffff821610155b15610c6e576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b50506003805465ffffffffffff60a01b191690555b610ae08282611d85565b610c9561199e565b610c9d61163b565b5f33878787878787604051602001610cbb97969594939291906127e0565b60408051601f1981840301815282825280516020918201209083015201604051602081830303815290604052805190602001209050610d308989808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600b549150849050611db8565b610d4d576040516309bde33960e01b815260040160405180910390fd5b5f818152600c602052604090205460ff1615610d7c57604051630c8d9eab60e31b815260040160405180910390fd5b670de0b6b3a764000082600d54610d939190612831565b610d9d9190612848565b3414610dbc5760405163a8d2a67960e01b815260040160405180910390fd5b600e546040515f916001600160a01b03169034908381818185875af1925050503d805f8114610e06576040519150601f19603f3d011682016040523d82523d5f602084013e610e0b565b606091505b5050905080610e2d5760405163b609acc960e01b815260040160405180910390fd5b5f828152600c60205260409020805460ff19166001179055610e5a610e4f3390565b8989898989896119c2565b5050610b2d60015f55565b5f610e6f81611901565b610ae082611df8565b5f610e8281611901565b610ae082611e6a565b5f610e9581611901565b6001600160a01b038216610ebc5760405163e6c4247b60e01b815260040160405180910390fd5b600e80546001600160a01b0319166001600160a01b0384161790556040517fccbdeb71dc680b2f0fd85f93e7ef0f70eda32a12b918c9715be07bb646360e5990610f0790849061259c565b60405180910390a15050565b610f1b61163b565b5f82815260086020526040812060020154839103610f4c57604051631b742d9d60e31b815260040160405180910390fd5b60025f8281526008602052604090206006015460ff166002811115610f7357610f736126d1565b03610f9157604051632957a17760e01b815260040160405180910390fd5b610f9b838361173a565b50610ae060015f55565b5f610faf81611901565b600b82905560405182907f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea941905f90a25050565b6004546001600160a01b031690565b6040516bffffffffffffffffffffffff19606084901b166020820152603481018290525f9060540160405160208183030381529060405280519060200120905092915050565b5f611040610fe2565b905090565b5f6007547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611095919061259c565b602060405180830381865afa1580156110b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d49190612867565b611040919061287e565b5f9182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600680546109ad906127ae565b61111d6123ad565b60085f8381526020019081526020015f20604051806101200160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a900460ff166002811115611198576111986126d1565b60028111156111a9576111a96126d1565b81526006919091015461010081046001600160a01b03166020830152600160a81b900460ff16151560409091015292915050565b6004545f90600160d01b900465ffffffffffff16801515801561120857504265ffffffffffff821610155b611213575f5f611227565b600454600160a01b900465ffffffffffff16815b915091509091565b5f61123981611901565b662386f26fc100008211156112615760405163162908e360e11b815260040160405180910390fd5b600d8290556040518281527f24bff375ede260cfaf30e7c295df97c39dc90f9e1bc761ab3d31a1be31f8ffa490602001610f07565b5f6112a081611901565b5f828152600860205260408120600201548391036112d157604051631b742d9d60e31b815260040160405180910390fd5b60025f8281526008602052604090206006015460ff1660028111156112f8576112f86126d1565b0361131657604051632957a17760e01b815260040160405180910390fd5b5f8381526008602052604090206006810154600160a81b900460ff1661134f57604051633c34e69d60e01b815260040160405180910390fd5b5f61135982611663565b1115611371576113718461136c83611663565b61173a565b5f81600501548260040154611386919061287e565b905080600754611396919061287e565b600755600682015461010090046001600160a01b03165f908152600a60205260409020546113c590829061287e565b6006830180546001600160a01b03610100909104165f908152600a602052604080822093909355815460ff1916600217909155905186917f3672cfd57034e1b586da46ec42eea7bc449af89ac0ff5a795c3c00a0d1ae64c991a260068201546040518281525f9161010090046001600160a01b0316905f5160206128f95f395f51905f52906020015b60405180910390a35050505050565b6004545f90600160d01b900465ffffffffffff16801515801561148757504265ffffffffffff8216105b6114a257600354600160d01b900465ffffffffffff166114b5565b600454600160a01b900465ffffffffffff165b91505090565b5f6114c46114fa565b509050336001600160a01b038216146114f25733604051636116401160e11b8152600401610c65919061259c565b61099d611ed2565b6003546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161153957604051631fe1e13d60e11b815260040160405180910390fd5b610ae08282611f5e565b5f61154d81611901565b61099d611f82565b5f818152600860205260408120600201548290820361158757604051631b742d9d60e31b815260040160405180910390fd5b60025f8281526008602052604090206006015460ff1660028111156115ae576115ae6126d1565b036115cc57604051632957a17760e01b815260040160405180910390fd5b5f8381526008602052604090206115e290611663565b91505b50919050565b6115f36123ad565b6116006106bd8484610ff1565b9392505050565b5f6001600160e01b03198216637965db0b60e01b14806108d257506301ffc9a760e01b6001600160e01b03198316146108d2565b60025f540361165d57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b80545f90429081108061168e57506002600684015460ff16600281111561168c5761168c6126d1565b145b1561169b57505f92915050565b826002015483600101546116af9190612891565b81106116c957826005015483600401546115e2919061287e565b5f8360010154826116da919061287e565b60038501549091505f6116ed8284612848565b90505f6116fa8383612831565b90505f87600201548289600401546117129190612831565b61171c9190612848565b905087600501548161172e919061287e565b98975050505050505050565b5f828152600860205260408120600681015490916101009091046001600160a01b0316331490611768611037565b6001600160a01b0316336001600160a01b03161490508115801561178a575080155b156117a7576040516282b42960e81b815260040160405180910390fd5b6117b083611663565b8411156117d05760405163110c741b60e31b815260040160405180910390fd5b8383600501546117e09190612891565b60058401556007546117f390859061287e565b600755600683015461010090046001600160a01b03165f908152600a602052604090205461182290859061287e565b6006840180546001600160a01b036101009182900481165f908152600a60205260409081902094909455915492519204169086907f62eb4bd96d9a7a66875a9f46f9f9d8bf6cfed3fe0578671b752301427d2a4f66906118859088815260200190565b60405180910390a360068301546118ce906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169161010090041686611d04565b60068301546040518581525f9161010090046001600160a01b0316905f5160206128f95f395f51905f529060200161144e565b61099d8133611f8c565b6119155f5f611fc5565b565b61191f61199e565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405161195b919061259c565b60405180910390a1565b61196d612084565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361194e565b60015460ff16156119155760405163d93c066560e01b815260040160405180910390fd5b806119cb611045565b10156119ea576040516314a83c1960e01b815260040160405180910390fd5b6119f842630114db00612891565b861115611a1857604051630e0d5b9360e21b815260040160405180910390fd5b62093a80841080611a2c5750635dfc0f0084115b15611a4a57604051637616640160e01b815260040160405180910390fd5b801580611a5a5750600160c81b81115b15611a785760405163162908e360e11b815260040160405180910390fd5b821580611a855750603c83115b15611aa35760405163c36476e960e01b815260040160405180910390fd5b84841015611ac45760405163625a1c5760e11b815260040160405180910390fd5b6001600160a01b0387165f9081526009602052604081208054611af7918a919084611aee836128a4565b91905055610ff1565b90506040518061012001604052808789611b119190612891565b81526020018881526020018681526020018581526020018381526020015f815260200160016002811115611b4757611b476126d1565b8152602001896001600160a01b0316815260200184151581525060085f8381526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f6101000a81548160ff02191690836002811115611bd557611bd56126d1565b021790555060e082015160069091018054610100938401511515600160a81b0260ff60a81b196001600160a01b0390941690940292909216610100600160b01b031990921691909117919091179055600754611c32908390612891565b6007556001600160a01b0388165f908152600a6020526040902054611c58908390612891565b6001600160a01b0389165f818152600a60209081526040918290209390935580518581529283018a90528201889052606082018790526080820186905284151560a08301529082907f6a4b2f118c5372782b73db45bdf54f9241247604d5414fef92818ca34ad7d4629060c00160405180910390a36040518281526001600160a01b038916905f905f5160206128f95f395f51905f529060200160405180910390a35050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d569084906120a7565b505050565b5f82815260026020526040902060010154611d7581611901565b611d7f838361210a565b50505050565b6001600160a01b0381163314611dae5760405163334bd91960e11b815260040160405180910390fd5b611d568282612166565b5f835115611df15760208401845160051b81015b8151841160051b938452815160209485185260405f209390910190808210611dcc5750505b5014919050565b5f611e0161145d565b611e0a426121ad565b611e1491906128bc565b9050611e2082826121e3565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b5f611e7482612260565b611e7d426121ad565b611e8791906128bc565b9050611e938282611fc5565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101610f07565b5f5f611edc6114fa565b91509150611ef18165ffffffffffff16151590565b1580611f0557504265ffffffffffff821610155b15611f2d576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610c65565b611f3e5f611f39610fe2565b612166565b50611f495f8361210a565b5050600380546001600160d01b031916905550565b5f82815260026020526040902060010154611f7881611901565b611d7f8383612166565b6119155f5f6121e3565b611f9682826110de565b610ae05760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c65565b600454600160d01b900465ffffffffffff168015612047574265ffffffffffff8216101561201e57600454600380546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055612047565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec5905f90a15b50600480546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b60015460ff1661191557604051638dfc202b60e01b815260040160405180910390fd5b5f5f60205f8451602086015f885af1806120c6576040513d5f823e3d81fd5b50505f513d915081156120dd5780600114156120ea565b6001600160a01b0384163b155b15611d7f5783604051635274afe760e01b8152600401610c65919061259c565b5f8261215c575f612119610fe2565b6001600160a01b03161461214057604051631fe1e13d60e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0384161790555b61160083836122b1565b5f8215801561218d5750612178610fe2565b6001600160a01b0316826001600160a01b0316145b156121a357600480546001600160a01b03191690555b6116008383612342565b5f65ffffffffffff8211156121df576040516306dfcc6560e41b81526030600482015260248101839052604401610c65565b5090565b5f6121ec6114fa565b6003805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061222e90508165ffffffffffff16151590565b15611d56576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a9605109905f90a1505050565b5f5f61226a61145d565b90508065ffffffffffff168365ffffffffffff16116122925761228d83826128da565b6115e2565b6115e265ffffffffffff8416620697805f828218828410028218611600565b5f6122bc83836110de565b61233b575f8381526002602090815260408083206001600160a01b03861684529091529020805460ff191660011790556122f33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016108d2565b505f6108d2565b5f61234d83836110de565b1561233b575f8381526002602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016108d2565b6040518061012001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f60028111156123ef576123ef6126d1565b81525f6020820181905260409091015290565b5f60208284031215612412575f5ffd5b81356001600160e01b031981168114611600575f5ffd5b6001600160a01b038116811461099d575f5ffd5b5f6020828403121561244d575f5ffd5b813561160081612429565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f6040838503121561249e575f5ffd5b82356124a981612429565b946020939093013593505050565b803580151581146124c6575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a0312156124e1575f5ffd5b87356124ec81612429565b96506020880135955060408801359450606088013593506080880135925061251660a089016124b7565b96999598509396929591949193505060c09091013590565b5f6020828403121561253e575f5ffd5b611600826124b7565b5f5f5f60608486031215612559575f5ffd5b833561256481612429565b9250602084013561257481612429565b929592945050506040919091013590565b5f60208284031215612595575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b5f5f604083850312156125c1575f5ffd5b8235915060208301356125d381612429565b809150509250929050565b5f5f5f5f5f5f5f5f60e0898b0312156125f5575f5ffd5b883567ffffffffffffffff81111561260b575f5ffd5b8901601f81018b1361261b575f5ffd5b803567ffffffffffffffff811115612631575f5ffd5b8b60208260051b8401011115612645575f5ffd5b602091820199509750890135955060408901359450606089013593506080890135925061267460a08a016124b7565b979a969950949793969295919450919260c001359150565b5f6020828403121561269c575f5ffd5b813565ffffffffffff81168114611600575f5ffd5b5f5f604083850312156126c2575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b5f61012082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c08301516003811061274457634e487b7160e01b5f52602160045260245ffd5b8060c08401525060e083015161276560e08401826001600160a01b03169052565b5061010083015161277b61010084018215159052565b5092915050565b5f5f60408385031215612793575f5ffd5b823561279e81612429565b915060208301356125d381612429565b600181811c908216806127c257607f821691505b6020821081036115e557634e487b7160e01b5f52602260045260245ffd5b6001600160a01b039790971687526020870195909552604086019390935260608501919091526080840152151560a083015260c082015260e00190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108d2576108d261281d565b5f8261286257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612877575f5ffd5b5051919050565b818103818111156108d2576108d261281d565b808201808211156108d2576108d261281d565b5f600182016128b5576128b561281d565b5060010190565b65ffffffffffff81811683821601908111156108d2576108d261281d565b65ffffffffffff82811682821603908111156108d2576108d261281d56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204ee82dc9db129a2a1c8a43088c637af42bbea36ba1fe6747219975d46170532c64736f6c634300081c0033a26469706673582212201d57f06d876f5bb4bae739797d0d88c624abc55b73bf1ccb18b54c0049800ae864736f6c634300081c0033000000000000000000000000226a2fa2556c48245e57cd1cba4c6c9e67077dd2