232 txs
7.6k calls
constructor
constructor(address _usd)
functions
_currentCumulativeSupply
viewfunction _currentCumulativeSupply() view returns (uint256)
_twaSupplySinceLastClaim
viewfunction _twaSupplySinceLastClaim(address user) view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
apy
viewfunction apy() view returns (uint256)
aqtisApy
viewfunction aqtisApy() view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
buyActive
viewfunction buyActive() view returns (bool)
calculateTokensToMintWithEth
viewfunction calculateTokensToMintWithEth(uint256 ethAmount) view returns (uint256)
calculateTokensToMintWithUSD
viewfunction calculateTokensToMintWithUSD(uint256 amount) view returns (uint256)
cap
viewfunction cap() view returns (uint256)
circulatingSupply
viewfunction circulatingSupply() view returns (uint256)
cumSupplyLastClaim
viewfunction cumSupplyLastClaim(address) view returns (uint256)
cumulativeCirculatingSupply
viewfunction cumulativeCirculatingSupply() view returns (uint256)
currentCumSupply
viewfunction currentCumSupply() view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
distributionAddress
viewfunction distributionAddress() view returns (address)
getRewardsFor
viewfunction getRewardsFor(address user) view returns (tuple)
lastClaimTime
viewfunction lastClaimTime(address user) view returns (uint256)
lastSupplyUpdateTime
viewfunction lastSupplyUpdateTime() view returns (uint256)
minAmountBuy
viewfunction minAmountBuy() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
QRT_PRICE
viewfunction QRT_PRICE() view returns (uint256)
rewardsAddress
viewfunction rewardsAddress() view returns (address)
symbol
viewfunction symbol() view returns (string)
tokenPriceCalculator
viewfunction tokenPriceCalculator() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
twaCircSupplySinceLastClaim
viewfunction twaCircSupplySinceLastClaim(address user) view returns (uint256)
usdAddress
viewfunction usdAddress() view returns (address)
userTWAB
viewfunction userTWAB(address user) view returns (uint256)
whitelist
viewfunction whitelist(address) view returns (bool)
whitelistActive
viewfunction whitelistActive() view returns (bool)
whitelistedContracts
viewfunction whitelistedContracts(address) view returns (bool)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
buyTokens
nonpayablefunction buyTokens(uint256 amount)
buyTokensWithEth
payablefunction buyTokensWithEth() payable
mint
nonpayablefunction mint(uint256 amount)
mintWithCap
nonpayablefunction mintWithCap(uint256 amount)
renounceOwnership
nonpayablefunction renounceOwnership()
resetUser
nonpayablefunction resetUser(address user)
setBuyActive
nonpayablefunction setBuyActive(bool _buyActive)
setCap
nonpayablefunction setCap(uint256 _newCap)
setContractRewardsWhitelist
nonpayablefunction setContractRewardsWhitelist(address _contract, bool _whitelisted)
setDistributionAddress
nonpayablefunction setDistributionAddress(address _distributionAddress)
setMinAmountBuy
nonpayablefunction setMinAmountBuy(uint256 _newMinAmountBuy)
setRewardsAddress
nonpayablefunction setRewardsAddress(address _rewardsAddress)
setTokenPriceCalculator
nonpayablefunction setTokenPriceCalculator(address _tokenPriceCalculator)
setWhitelistActive
nonpayablefunction setWhitelistActive(bool _whitelistActive)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateWhitelist
nonpayablefunction updateWhitelist(address _addr, bool _whitelisted)
withdrawERC20
nonpayablefunction withdrawERC20(address token)
withdrawETH
nonpayablefunction withdrawETH()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BuyActivated
event BuyActivated(address indexed activator)
BuyDeactivated
event BuyDeactivated(address indexed deactivator)
BuyTokens
event BuyTokens(address indexed user, uint256 amount, uint256 newTotalSupply)
DistributionAddressUpdated
event DistributionAddressUpdated(address indexed newDistributionAddress)
MinAmountBuyChanged
event MinAmountBuyChanged(uint256 newMinAmountBuy)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SoftMaxSupplyChanged
event SoftMaxSupplyChanged(uint256 newSoftMaxSupply)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
WhitelistActivated
event WhitelistActivated(address indexed activator)
WhitelistDeactivated
event WhitelistDeactivated(address indexed deactivator)
WhitelistUpdated
event WhitelistUpdated(address indexed addr, bool whitelisted)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
FailedInnerCall
error FailedInnerCall()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620031c0380380620031c0833981016040819052620000349162000173565b60af601981816040518060400160405280601381526020017f5175616e74205265736572766520546f6b656e000000000000000000000000008152506040518060400160405280600381526020016214549560ea1b815250655af3107a40003383838382828160039081620000aa91906200024c565b506004620000b982826200024c565b50505060055550506001600160a01b038116620000f057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000fb8162000121565b50506001600755505060809190915260a05250506001600160a01b031660c05262000318565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200018657600080fd5b81516001600160a01b03811681146200019e57600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001d057607f821691505b602082108103620001f157634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000247576000816000526020600020601f850160051c81016020861015620002225750805b601f850160051c820191505b8181101562000243578281556001016200022e565b5050505b505050565b81516001600160401b03811115620002685762000268620001a5565b6200028081620002798454620001bb565b84620001f7565b602080601f831160018114620002b857600084156200029f5750858301515b600019600386901b1c1916600185901b17855562000243565b600085815260208120601f198616915b82811015620002e957888601518255948401946001909101908401620002c8565b5085821015620003085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c051612e556200036b60003960008181610774015281816110a801526110df01526000818161094f01528181610c750152611cfb0152600081816105bc0152610c960152612e556000f3fe6080604052600436106103605760003560e01c80639b19251a116101c6578063ccdfff53116100f7578063e347358011610095578063f2fde38b1161006f578063f2fde38b14610a4a578063f4f3b20014610a6a578063f89b764414610a8a578063fed1280b14610aaa57600080fd5b8063e3473580146109ea578063e7e5a93e14610a0a578063eb45261a14610a2a57600080fd5b8063d5c16dd3116100d1578063d5c16dd314610971578063d87744cf14610987578063dd62ed3e1461098f578063e086e5ec146109d557600080fd5b8063ccdfff5314610908578063d0bc41a914610928578063d34fd4121461093d57600080fd5b8063a9c8d48811610164578063b89fc89e1161013e578063b89fc89e14610892578063c0973eed146108b2578063c3b754dc146108d2578063cbd898a0146108f257600080fd5b8063a9c8d4881461080c578063af5e8ce81461082c578063b77cf9c61461085957600080fd5b8063a0712d68116101a0578063a0712d6814610796578063a11a1add146107b6578063a6f9d12e146107d7578063a9059cbb146107ec57600080fd5b80639b19251a1461071c5780639bdd940c1461074c5780639e1a86131461076257600080fd5b806337fb7e21116102a0578063715018a61161023e578063918f867411610218578063918f8674146106bc5780639358928b146106d257806393dd451e146106e757806395d89b411461070757600080fd5b8063715018a6146106695780638906758d1461067e5780638da5cb5b1461069e57600080fd5b806347786d371161027a57806347786d37146105de5780634fbee124146105fe5780636aae22031461061357806370a082311461063357600080fd5b806337fb7e2114610542578063391feebb1461057a5780633bcfc4b8146105aa57600080fd5b806323b872dd1161030d578063343959b4116102e7578063343959b4146104cd578063353d224b146104ed578063355274ea1461050d5780633610724e1461052257600080fd5b806323b872dd1461047157806328a6591014610491578063313ce567146104b157600080fd5b80630d392cd91161033e5780630d392cd9146103dd57806318160ddd146103ff5780632260b83e1461041e57600080fd5b806302ce58131461036557806306fdde031461039b578063095ea7b3146103bd575b600080fd5b34801561037157600080fd5b5060085461038690600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b3480156103a757600080fd5b506103b0610aca565b6040516103929190612b8a565b3480156103c957600080fd5b506103866103d8366004612bd9565b610b5c565b3480156103e957600080fd5b506103fd6103f8366004612c11565b610b76565b005b34801561040b57600080fd5b506002545b604051908152602001610392565b34801561042a57600080fd5b5061043e610439366004612c48565b610bde565b60405161039291908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561047d57600080fd5b5061038661048c366004612c63565b610d1c565b34801561049d57600080fd5b506104106104ac366004612c9f565b610d42565b3480156104bd57600080fd5b5060405160068152602001610392565b3480156104d957600080fd5b506103fd6104e8366004612c48565b610df0565b3480156104f957600080fd5b50610410610508366004612c9f565b610e81565b34801561051957600080fd5b50600554610410565b34801561052e57600080fd5b506103fd61053d366004612c9f565b610f0c565b34801561054e57600080fd5b50600854610562906001600160a01b031681565b6040516001600160a01b039091168152602001610392565b34801561058657600080fd5b50610386610595366004612c48565b60116020526000908152604090205460ff1681565b3480156105b657600080fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ea57600080fd5b506103fd6105f9366004612c9f565b611112565b34801561060a57600080fd5b5061041061115a565b34801561061f57600080fd5b506103fd61062e366004612c48565b611190565b34801561063f57600080fd5b5061041061064e366004612c48565b6001600160a01b031660009081526020819052604090205490565b34801561067557600080fd5b506103fd6111c3565b34801561068a57600080fd5b506103fd610699366004612c48565b6111d7565b3480156106aa57600080fd5b506006546001600160a01b0316610562565b3480156106c857600080fd5b506104106103e881565b3480156106de57600080fd5b50600f54610410565b3480156106f357600080fd5b506103fd610702366004612c9f565b61120a565b34801561071357600080fd5b506103b06112ea565b34801561072857600080fd5b50610386610737366004612c48565b600a6020526000908152604090205460ff1681565b34801561075857600080fd5b5061041060095481565b34801561076e57600080fd5b506105627f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a257600080fd5b506103fd6107b1366004612c9f565b6112f9565b3480156107c257600080fd5b5060085461038690600160a01b900460ff1681565b3480156107e357600080fd5b50610410600a81565b3480156107f857600080fd5b50610386610807366004612bd9565b611379565b34801561081857600080fd5b506103fd610827366004612c9f565b611387565b34801561083857600080fd5b50610410610847366004612c48565b60136020526000908152604090205481565b34801561086557600080fd5b50610410610874366004612c48565b6001600160a01b031660009081526012602052604090206004015490565b34801561089e57600080fd5b506103fd6108ad366004612c48565b61143a565b3480156108be57600080fd5b50600b54610562906001600160a01b031681565b3480156108de57600080fd5b506103fd6108ed366004612cb8565b611499565b3480156108fe57600080fd5b5061041060145481565b34801561091457600080fd5b506103fd610923366004612cb8565b61153a565b34801561093457600080fd5b506104106115db565b34801561094957600080fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b34801561097d57600080fd5b5061041060155481565b6103fd61160a565b34801561099b57600080fd5b506104106109aa366004612cd5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109e157600080fd5b506103fd6117b6565b3480156109f657600080fd5b50610410610a05366004612c48565b611859565b348015610a1657600080fd5b50610410610a25366004612c48565b611864565b348015610a3657600080fd5b506103fd610a45366004612c11565b6118bc565b348015610a5657600080fd5b506103fd610a65366004612c48565b6118ec565b348015610a7657600080fd5b506103fd610a85366004612c48565b611940565b348015610a9657600080fd5b50600c54610562906001600160a01b031681565b348015610ab657600080fd5b50610410610ac5366004612c48565b611a6f565b606060038054610ad990612d08565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0590612d08565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b600033610b6a818585611b4b565b60019150505b92915050565b610b7e611b5d565b6001600160a01b0382166000818152600a6020908152604091829020805460ff191685151590811790915591519182527ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91015b60405180910390a25050565b610c096040518060800160405280600081526020016000815260200160008152602001600081525090565b6000610c1483611ba3565b6001600160a01b03841660009081526012602052604081206004015491925090610c3e9042612d58565b90506000610c4b85611a6f565b610c57906103e8612d6b565b610c65906301e13380612d6b565b8284610c7088611864565b610cba7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612d58565b610cc49190612d6b565b610cce9190612d6b565b610cd89190612d6b565b610ce29190612d82565b90506000610cf08484611c5e565b604080516080810182526000808252602082015290810191909152606081019290925250949350505050565b600033610d2a858285611d56565b610d35858585611ded565b60019150505b9392505050565b600080600c60009054906101000a90046001600160a01b03166001600160a01b03166330c0b9ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc9190612da4565b9050610dcd600a6305f5e100612d6b565b610ddc9064e8d4a51000612d6b565b610de68285612d6b565b610d3b9190612d82565b600b546001600160a01b03163314610e755760405162461bcd60e51b815260206004820152603560248201527f526577617264733a204f6e6c79207265776172647320636f6e7472616374206360448201527f616e2063616c6c20746869732066756e6374696f6e000000000000000000000060648201526084015b60405180910390fd5b610e7e81611e65565b50565b600080600c60009054906101000a90046001600160a01b03166001600160a01b031663caafa6c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190612da4565b9050610ddc600a6305f5e100612d6b565b600854600160a01b900460ff16610f655760405162461bcd60e51b815260206004820152601c60248201527f4162737472616374204c53543a20627579206e6f7420616374697665000000006044820152606401610e6c565b600854600160a81b900460ff1615610fe657336000908152600a602052604090205460ff16610fe65760405162461bcd60e51b815260206004820152602760248201527f4162737472616374204c53543a2063616c6c6572206973206e6f742077686974604482015266195b1a5cdd195960ca1b6064820152608401610e6c565b6000610ff182610e81565b9050610ffc81611eb4565b156110495760405162461bcd60e51b815260206004820152601460248201527f5172743a204275792065786365656473206361700000000000000000000000006044820152606401610e6c565b60095482101561109b5760405162461bcd60e51b815260206004820152601c60248201527f5172743a20496e73756666696369656e742062757920616d6f756e74000000006044820152606401610e6c565b6110d06001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333085611ed4565b6110da3382611f50565b6111047f000000000000000000000000000000000000000000000000000000000000000083611f86565b61110e3382612080565b5050565b61111a611b5d565b61112381600555565b6040518181527fb42dbc56569dad594f79a8fa479f0b9b87b68602d1b8fc221d10b62bf703dbed906020015b60405180910390a150565b600e54600090819061116c9042612d58565b600f5490915061117d908290612d6b565b60105461118a9190612dbd565b91505090565b611198611b5d565b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550565b6111cb611b5d565b6111d560006120ca565b565b6111df611b5d565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03831617905550565b600b546001600160a01b0316331461128a5760405162461bcd60e51b815260206004820152603560248201527f526577617264733a204f6e6c79207265776172647320636f6e7472616374206360448201527f616e2063616c6c20746869732066756e6374696f6e00000000000000000000006064820152608401610e6c565b61129381611eb4565b156112e05760405162461bcd60e51b815260206004820152601560248201527f5172743a204d696e7420657863656564732063617000000000000000000000006044820152606401610e6c565b610e7e3382611f50565b606060048054610ad990612d08565b600b546001600160a01b031633146112e05760405162461bcd60e51b815260206004820152603560248201527f526577617264733a204f6e6c79207265776172647320636f6e7472616374206360448201527f616e2063616c6c20746869732066756e6374696f6e00000000000000000000006064820152608401610e6c565b600033610b6a818585611ded565b61138f611b5d565b600081116114055760405162461bcd60e51b815260206004820152602560248201527f4d696e20616d6f756e7420627579206d7573742062652067726561746572207460448201527f68616e20300000000000000000000000000000000000000000000000000000006064820152608401610e6c565b60098190556040518181527f4d02ac2bfe90115b91d59c32ad6d07ea86d935aedb62055d844decbc0a6cb4719060200161114f565b611442611b5d565b6008805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f8125853d25d6f68e074fb323e9f6e68b582733c9f03a78a2fda62e81d5d594f490600090a250565b6114a1611b5d565b6008805482158015600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9092169190911790915561150c5760405133907fe17ac05ff4095c2a1b270ddc6f70ea762311620bf4be3b1c2b0a9f4d5b16a53390600090a250565b60405133907f5a5fb1bb60b955fafbedf12a782cf1135ba3f37b851d547e79c04e55d1d9a2bb90600090a250565b611542611b5d565b6008805482158015600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179091556115ad5760405133907f414deba86f382e3da8ecf26ff472fe712d2e8489ed191afbb662b3d720cb4b4590600090a250565b60405133907fb474c7aee2343d3d4a0a18ecf7798a53688ce4d25cab70fbad7ea88866e881a590600090a250565b600080601554426115ec9190612d58565b600d549091506115fd908290612d6b565b60145461118a9190612dbd565b600854600160a01b900460ff166116635760405162461bcd60e51b815260206004820152601c60248201527f4162737472616374204c53543a20627579206e6f7420616374697665000000006044820152606401610e6c565b600854600160a81b900460ff16156116e457336000908152600a602052604090205460ff166116e45760405162461bcd60e51b815260206004820152602760248201527f4162737472616374204c53543a2063616c6c6572206973206e6f742077686974604482015266195b1a5cdd195960ca1b6064820152608401610e6c565b60006116ef34610d42565b90506116fa81611eb4565b156117475760405162461bcd60e51b815260206004820152601460248201527f5172743a204275792065786365656473206361700000000000000000000000006044820152606401610e6c565b6009543410156117995760405162461bcd60e51b815260206004820152601c60248201527f5172743a20496e73756666696369656e742062757920616d6f756e74000000006044820152606401610e6c565b6117a33382611f50565b6117ac34612129565b610e7e3382612080565b6117be611b5d565b60006117d26006546001600160a01b031690565b6001600160a01b03160361183e5760405162461bcd60e51b815260206004820152602d60248201527f41627374726163744c53543a206f776e65722063616e6e6f742062652074686560448201526c207a65726f206164647265737360981b6064820152608401610e6c565b6111d56118536006546001600160a01b031690565b4761221d565b6000610b7082611ba3565b6001600160a01b038116600090815260126020526040812060040154819061188c9042612d58565b6001600160a01b03841660009081526013602052604090205490915081906118b26115db565b610de69190612d58565b6118c4611b5d565b6001600160a01b0382166000908152601160205260409020805460ff19168215151790555050565b6118f4611b5d565b6001600160a01b038116611937576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610e6c565b610e7e816120ca565b611948611b5d565b600061195c6006546001600160a01b031690565b6001600160a01b0316036119c85760405162461bcd60e51b815260206004820152602d60248201527f41627374726163744c53543a206f776e65722063616e6e6f742062652074686560448201526c207a65726f206164647265737360981b6064820152608401610e6c565b610e7e6119dd6006546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5e9190612da4565b6001600160a01b03841691906122b4565b6001600160a01b0381166000908152601260209081526040808320815160a081018352815481526001820154938101939093526002810154918301919091526003810154606083015260040154608082018190528290611acf9042612d58565b905060008111611b215760405162461bcd60e51b815260206004820152601860248201527f526577617264733a20436c61696d2074696d65206973203000000000000000006044820152606401610e6c565b808260600151611b2f61115a565b611b399190612d58565b611b439190612d82565b949350505050565b611b5883838360016122e5565b505050565b6006546001600160a01b031633146111d5576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610e6c565b6001600160a01b0381166000908152601260209081526040808320815160a081018352815481526001820154938101939093526002810154918301919091526003810154606083015260040154608082018190528290611c039042612d58565b905080600003611c17575060009392505050565b6000826020015142611c299190612d58565b905081818460000151611c3c9190612d6b565b8460400151611c4b9190612dbd565b611c559190612d82565b95945050505050565b600080600c60009054906101000a90046001600160a01b03166001600160a01b031663831f3eb86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd89190612da4565b9050611ce6816103e8612d6b565b611cf4906301e13380612d6b565b8385611d217f0000000000000000000000000000000000000000000000000000000000000000600a612d6b565b611d2b9190612d6b565b611d359190612d6b565b611d4790670de0b6b3a7640000612d6b565b611b399064e8d4a51000612d6b565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611de75781811015611dd8576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401610e6c565b611de7848484840360006122e5565b50505050565b6001600160a01b038316611e30576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610e6c565b6001600160a01b038216611e5a5760405163ec442f0560e01b815260006004820152602401610e6c565b611b588383836123ec565b6014546001600160a01b03821660009081526013602090815260408083209390935560129052908120426004820181905560018201556002810191909155611eab61115a565b60039091015550565b600060055482611ec360025490565b611ecd9190612dbd565b1192915050565b6040516001600160a01b038481166024830152838116604483015260648201839052611de79186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061240f565b6001600160a01b038216611f7a5760405163ec442f0560e01b815260006004820152602401610e6c565b61110e600083836123ec565b6001600160a01b0382166120025760405162461bcd60e51b815260206004820152603660248201527f4162737472616374204c53543a20746f6b656e20616464726573732063616e6e60448201527f6f7420626520746865207a65726f2061646472657373000000000000000000006064820152608401610e6c565b600081116120665760405162461bcd60e51b815260206004820152602b60248201527f4162737472616374204c53543a20616d6f756e74206d7573742062652067726560448201526a061746572207468616e20360ac1b6064820152608401610e6c565b60085461110e906001600160a01b038481169116836122b4565b816001600160a01b03167f0a37b72bb67eee30e09084cf386f8a17817c57f620c3ab95fb25d6a20356ec77826120b560025490565b60408051928352602083019190915201610bd2565b600680546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03166121a75760405162461bcd60e51b815260206004820152602960248201527f4162737472616374204c53543a206469737472696275746f722061646472657360448201527f73206e6f742073657400000000000000000000000000000000000000000000006064820152608401610e6c565b6000811161220b5760405162461bcd60e51b815260206004820152602b60248201527f4162737472616374204c53543a20616d6f756e74206d7573742062652067726560448201526a061746572207468616e20360ac1b6064820152608401610e6c565b600854610e7e906001600160a01b0316825b804710156122405760405163cd78605960e01b8152306004820152602401610e6c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461228d576040519150601f19603f3d011682016040523d82523d6000602084013e612292565b606091505b5050905080611b5857604051630a12f52160e11b815260040160405180910390fd5b6040516001600160a01b03838116602483015260448201839052611b5891859182169063a9059cbb90606401611f09565b6001600160a01b038416612328576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610e6c565b6001600160a01b03831661236b576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610e6c565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015611de757826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516123de91815260200190565b60405180910390a350505050565b6123f783838361248b565b612403838260006125ce565b611b58828260016125ce565b60006124246001600160a01b038416836126df565b905080516000141580156124495750808060200190518101906124479190612dd0565b155b15611b58576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e6c565b6001600160a01b0383166124b65780600260008282546124ab9190612dbd565b909155506125419050565b6001600160a01b03831660009081526020819052604090205481811015612522576040517fe450d38c0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810182905260448101839052606401610e6c565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661255d5760028054829003905561257c565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125c191815260200190565b60405180910390a3505050565b6125d98383836126ed565b6125e483838361277c565b6001600160a01b03831615806125fe57506125fe836129fb565b1561260857505050565b6001600160a01b03831660009081526012602052604081206001810154909190810361264857600060028301556010546003830155426004830155612680565b60018201546126579042612d58565b8254909150612667908290612d6b565b82600201600082825461267a9190612dbd565b90915550505b600083600181111561269457612694612ded565b036126b857838260000160008282546126ad9190612d58565b909155506126d29050565b838260000160008282546126cc9190612dbd565b90915550505b5042600190910155505050565b6060610d3b83836000612a2b565b6001600160a01b03831661273c5760006015544261270b9190612d58565b600d5490915061271c908290612d6b565b6014600082825461272d9190612dbd565b90915550504260155550505050565b6001600160a01b0383166000908152601360205260408120549003611b58576014546001600160a01b038416600090815260136020526040902055505050565b600e5460009061278c9042612d58565b600f5490915061279d908290612d6b565b601080546000906127af908490612dbd565b90915550506001600160a01b03841661282f5760008260018111156127d6576127d6612ded565b036127fb5782600d60000160008282546127f09190612dbd565b9091555061282f9050565b600182600181111561280f5761280f612ded565b0361282f5782600d60000160008282546128299190612d58565b90915550505b600061283a856129fb565b905080801561286057506001600160a01b03851660009081526012602052604090205415155b1561294d57600083600181111561287957612879612ded565b036128bf576001600160a01b0385166000908152601260205260409020546128a2908590612d58565b600f80546000906128b4908490612d58565b909155506129149050565b60018360018111156128d3576128d3612ded565b03612914576001600160a01b0385166000908152601260205260409020546128fc908590612dbd565b600f805460009061290e908490612d58565b90915550505b6001600160a01b0385166000908152601260205260408120818155600181018290556002810182905560038101829055600401556129f0565b600083600181111561296157612961612ded565b14801561297c57506001600160a01b038516158061297c5750805b156129a15783600d60020160008282546129969190612dbd565b909155506129f09050565b60018360018111156129b5576129b5612ded565b1480156129d057506001600160a01b03851615806129d05750805b156129f05783600d60020160008282546129ea9190612d58565b90915550505b505042600e55505050565b6001600160a01b03811660009081526011602052604081205460ff1615612a2457506000919050565b503b151590565b606081471015612a505760405163cd78605960e01b8152306004820152602401610e6c565b600080856001600160a01b03168486604051612a6c9190612e03565b60006040518083038185875af1925050503d8060008114612aa9576040519150601f19603f3d011682016040523d82523d6000602084013e612aae565b606091505b5091509150612abe868383612ac8565b9695505050505050565b606082612add57612ad882612b3d565b610d3b565b8151158015612af457506001600160a01b0384163b155b15612b36576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610e6c565b5080610d3b565b805115612b4d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b83811015612b81578181015183820152602001612b69565b50506000910152565b6020815260008251806020840152612ba9816040850160208701612b66565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612bd457600080fd5b919050565b60008060408385031215612bec57600080fd5b612bf583612bbd565b946020939093013593505050565b8015158114610e7e57600080fd5b60008060408385031215612c2457600080fd5b612c2d83612bbd565b91506020830135612c3d81612c03565b809150509250929050565b600060208284031215612c5a57600080fd5b610d3b82612bbd565b600080600060608486031215612c7857600080fd5b612c8184612bbd565b9250612c8f60208501612bbd565b9150604084013590509250925092565b600060208284031215612cb157600080fd5b5035919050565b600060208284031215612cca57600080fd5b8135610d3b81612c03565b60008060408385031215612ce857600080fd5b612cf183612bbd565b9150612cff60208401612bbd565b90509250929050565b600181811c90821680612d1c57607f821691505b602082108103612d3c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b7057610b70612d42565b8082028115828204841417610b7057610b70612d42565b600082612d9f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612db657600080fd5b5051919050565b80820180821115610b7057610b70612d42565b600060208284031215612de257600080fd5b8151610d3b81612c03565b634e487b7160e01b600052602160045260246000fd5b60008251612e15818460208701612b66565b919091019291505056fea26469706673582212204e9abf27ae42d9730e3aa62a51b7ee3f5330430a3f323ebefc12aa5ffb02465464736f6c63430008170033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48