34 txs
36 calls
constructor
constructor((address usdcAddress, address sponAddress, address virtualTokenAddress, address pyth, uint256 softCap, uint256 hardCap, uint256 minContribution, uint256 maxContribution) config)
functions
calculateTokenAllocation
viewfunction calculateTokenAllocation(address _contributor, uint256 _totalTokensAllocated) view returns (uint256)
contributedETH
viewfunction contributedETH(address) view returns (uint256)
contributedSPON
viewfunction contributedSPON(address) view returns (uint256)
contributedUSDC
viewfunction contributedUSDC(address) view returns (uint256)
contributedVirtual
viewfunction contributedVirtual(address) view returns (uint256)
contributionsUSDCValue
viewfunction contributionsUSDCValue(address) view returns (uint256)
ETH_USD_PRICE_ID
viewfunction ETH_USD_PRICE_ID() view returns (bytes32)
getContributionInfo
viewfunction getContributionInfo(address _contributor) view returns (uint256 _contributionUSDCValue, bool _hasContributed, uint256 _ethWei, uint256 _usdcAmount, uint256 _sponAmount, uint256 _virtualAmount)
getEthUsdPrice
viewfunction getEthUsdPrice() view returns (tuple)
getMaxAcceptableContribution
viewfunction getMaxAcceptableContribution(address _contributor) view returns (uint256)
getMaxETHContribution
viewfunction getMaxETHContribution(address _contributor) view returns (uint256)
getMaxSPONContribution
viewfunction getMaxSPONContribution(address _contributor) view returns (uint256)
getMaxUSDCContribution
viewfunction getMaxUSDCContribution(address _contributor) view returns (uint256)
getMaxVirtualContribution
viewfunction getMaxVirtualContribution(address _contributor) view returns (uint256)
getRemainingCap
viewfunction getRemainingCap() view returns (uint256)
getSaleInfo
viewfunction getSaleInfo() view returns (bool _saleFinalized, bool _saleSuccessful, uint256 _totalRaisedUSDC, uint256 _startTime, uint256 _endTime)
getTimeRemaining
viewfunction getTimeRemaining() view returns (uint256)
getVirtualUsdPrice
viewfunction getVirtualUsdPrice() view returns (tuple)
hardCap
viewfunction hardCap() view returns (uint256)
hasContributed
viewfunction hasContributed(address) view returns (bool)
MAX_PRICE_AGE
viewfunction MAX_PRICE_AGE() view returns (uint256)
maxContribution
viewfunction maxContribution() view returns (uint256)
minContribution
viewfunction minContribution() view returns (uint256)
owner
viewfunction owner() view returns (address)
SALE_DURATION
viewfunction SALE_DURATION() view returns (uint256)
saleEndTime
viewfunction saleEndTime() view returns (uint256)
saleFinalized
viewfunction saleFinalized() view returns (bool)
saleStartTime
viewfunction saleStartTime() view returns (uint256)
saleSuccessful
viewfunction saleSuccessful() view returns (bool)
softCap
viewfunction softCap() view returns (uint256)
sponAddress
viewfunction sponAddress() view returns (address)
sponToUsdcRate
viewfunction sponToUsdcRate() view returns (uint256)
testOnlySafe
viewfunction testOnlySafe() view returns (bool)
totalRaised
viewfunction totalRaised() view returns (uint256)
usdcAddress
viewfunction usdcAddress() view returns (address)
viewSafeAddress
viewfunction viewSafeAddress() view returns (address)
viewSaleEndTime
viewfunction viewSaleEndTime() view returns (uint256)
viewSaleStartTime
viewfunction viewSaleStartTime() view returns (uint256)
VIRTUAL_USD_PRICE_ID
viewfunction VIRTUAL_USD_PRICE_ID() view returns (bytes32)
virtualTokenAddress
viewfunction virtualTokenAddress() view returns (address)
claimRefund
nonpayablefunction claimRefund()
contributeETH
payablefunction contributeETH() payable
contributeSPON
nonpayablefunction contributeSPON(uint256 amountSPON)
contributeUSDC
nonpayablefunction contributeUSDC(uint256 amountUSDC)
contributeVirtual
nonpayablefunction contributeVirtual(uint256 amountVirtual)
finalizeSale
nonpayablefunction finalizeSale()
renounceOwnership
nonpayablefunction renounceOwnership()
setSafeAddress
nonpayablefunction setSafeAddress(address _safeAddress)
setSPONRate
nonpayablefunction setSPONRate(uint256 _sponToUsdc)
setTokenAddresses
nonpayablefunction setTokenAddresses(address _usdc, address _spon, address _virtual)
startSale
nonpayablefunction startSale()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawFunds
nonpayablefunction withdrawFunds()
events
ContributionETH
event ContributionETH(address indexed contributor, uint256 ethAmountWei, uint256 usdcValue)
ContributionMade
event ContributionMade(address indexed contributor, uint256 amount)
ContributionPartialFill
event ContributionPartialFill(address indexed contributor, uint256 requestedUSDC, uint256 acceptedUSDC, uint256 refundedUSDC)
ContributionSPON
event ContributionSPON(address indexed contributor, uint256 sponAmount, uint256 usdcValue)
ContributionUSDC
event ContributionUSDC(address indexed contributor, uint256 usdcAmount, uint256 usdcValue)
ContributionVIRTUAL
event ContributionVIRTUAL(address indexed contributor, uint256 virtualAmount, uint256 usdcValue)
FundsWithdrawn
event FundsWithdrawn(uint256 ethAmount, uint256 usdcAmount, uint256 sponAmount, uint256 virtualAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RefundClaimed
event RefundClaimed(address indexed contributor, uint256 totalRefundedETH, uint256 refundedUSDC, uint256 refundedSPON, uint256 refundedVirtual)
SafeAddressUpdated
event SafeAddressUpdated(address indexed previousSafe, address indexed newSafe)
SaleFinalized
event SaleFinalized(bool successful, uint256 totalRaisedUSDC)
SaleStarted
event SaleStarted(uint256 startTime, uint256 endTime)
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080346200039957601f62002a3038819003918201601f1916830192916001600160401b0390818511848610176200038557808493604096875284396101009384918101031262000399578351928301908111838210176200038557835262000068816200039d565b82526020620000798183016200039d565b928181019384526200008d8584016200039d565b91858201928352620000a2606085016200039d565b91606081019283526080850151926080820193845260a08601519460a0830195865260e060c08801519760c0850198895201519760e0840198895233156200036e575f80546001600160a01b03198082163390811784558d5191986001600160a01b03989490938916907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001805562014c08600b558851156200032e5750885188511015620002eb57895115620002a8578a518a511162000265578a5189511062000222578582511615158062000215575b8062000208575b15620001d6575084929183809251168760085416176008555116856009541617600955511683600a541617600a555116906002541617600255516003555160045551600555516006555161267d9081620003b38239f35b6064908c519062461bcd60e51b82526004820152600c60248201526b5a65726f206164647265737360a01b6044820152fd5b508585511615156200017f565b5085835116151562000178565b6064908c519062461bcd60e51b82526004820152601a60248201527f4d61782063616e6e6f74206578636565642068617264206361700000000000006044820152fd5b6064908c519062461bcd60e51b82526004820152601f60248201527f4d6178206d757374206265203e3d206d696e20636f6e747269627574696f6e006044820152fd5b6064908c519062461bcd60e51b82526004820152601c60248201527f4d696e20636f6e747269627574696f6e206d757374206265203e2030000000006044820152fd5b6064908c519062461bcd60e51b82526004820152601b60248201527f4861726420636170206d757374206265203e20736f66742063617000000000006044820152fd5b60649162461bcd60e51b82526004820152601460248201527f536f667420636170206d757374206265203e20300000000000000000000000006044820152fd5b8951631e4fbdf760e01b81525f6004820152602490fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b51906001600160a01b0382168203620003995756fe60806040818152600480361015610014575f80fd5b5f92833560e01c90816302d4545714611a5e575080630806fcab14611a265780631558b3e614611a00578063175323a81461182a5780631c0ff13c146116d55780631cbaee2d14610d945780631ec499091461162d5780631f0d3231146115f5578063205b1946146115b7578063219149391461148a57806324600fc3146111675780632e0cdf9b146111415780632f0e60f914610ebb5780632f32e63d14611124578063347faacf146110fb5780634d3f9d3e1461102f578063582073aa1461100657806358a687ec14610f615780635bbf749114610f265780635eabe01e14610eff5780636d79207c14610ee15780636f92c98914610ebb578063715018a614610e5e578063717cc1be14610e26578063839c401d14610dee5780638771fe2c14610db357806388a0ee4214610d945780638b32bad214610bad5780638bfba35214610b755780638d3d657614610b565780638da5cb5b14610b2e578063906a26e014610b0f5780639ccdf9e014610af05780639d7f7e8614610ad3578063a0a8045e14610a14578063a5f0dea2146109f0578063aaffadf3146109d1578063ad057b95146108d3578063b5545a3c1461066c578063b66a0e5d14610542578063c3c63ee7146104e8578063c5c4744c146104c9578063c87a6a85146104a0578063cd78d92c1461041e578063d64ed49e146103f8578063dac6270d146103db578063db83694c14610391578063eafe083e14610372578063ed338ff114610372578063f2fde38b146102ec578063f4ddd637146102bb578063f881ccfa146102875763fb86a40414610267575f80fd5b3461028357826003193601126102835760209250549051908152f35b8280fd5b5050346102b757806003193601126102b7576020906102b06102a7611a83565b60243590612008565b9051908152f35b5080fd5b5050346102b757816003193601126102b7576020906102e560018060a01b03600754163314611fa2565b5160018152f35b503461028357602036600319011261028357610306611a83565b9061030f6124f1565b6001600160a01b0391821692831561035c57505082546001600160a01b0319811683178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b51631e4fbdf760e01b8152908101849052602490fd5b5050346102b757816003193601126102b757602090600d549051908152f35b5050346102b757816003193601126102b75760a090600f5490600e54600c5490600d549260ff8151958181161515875260081c161515602086015284015260608301526080820152f35b5050346102b757816003193601126102b7576020906102b0611fd9565b5050346102b75760203660031901126102b7576020906102b0610419611a83565b6121b6565b5050346102b757602090816003193601126102835760c0926001600160a01b03610446611a83565b1681526010835281812054926015815260ff838320541692601182528083205490601283528084205492601381528180862054956014835220549582519788521515908701528501526060840152608083015260a0820152f35b5050346102b757816003193601126102b75760075490516001600160a01b039091168152602090f35b5050346102b757816003193601126102b757602090600e549051908152f35b5034610283576020366003190112610283578035916105056124f1565b8215610513575050600b5580f35b906020606492519162461bcd60e51b835282015260096024820152685a65726f207261746560b81b6044820152fd5b509190346102b757816003193601126102b75761055d6124f1565b600d5442118015610662575b156106205761057d60ff600f541615611a9d565b6008546105b4906001600160a01b039061059a9082161515611ae2565b6105a981600954161515611b1d565b600a54161515611b58565b6105bc612292565b506105c56123d1565b5042600c556208ade0420180421161060d5790817f87d03dcfa12666a6f670d52387c414c3147775a8cc623d78088c0e23b4a9034692600d558151904282526020820152a180f35b634e487b7160e01b835260118452602483fd5b5162461bcd60e51b8152602081840181905260248201527f53616c6520616c726561647920616374697665206f722066696e616c697a65646044820152606490fd5b50600c5415610569565b508290346102b757816003193601126102b75761068d60ff600f5416611f61565b610695612604565b60ff600f5460081c166108905733825260206015815260ff848420541615610856573383526011815283832054916012825284842054906013835285852054926014815286862054916106f5836106f0876106f0888b611b9c565b611b9c565b1561081f5750907f72a9f9f4cef3dda05f41f1ff9b51012d9a70b21c31aed56346f2d530856bd399949596601561079d93338a526011815289838120556012815289838120556013815289838120556014815289838120556010815289838120555280882060ff19815416905586610801575b836107e3575b846107c5575b816107a7575b519384933397859094939260609260808301968352602083015260408201520152565b0390a26001805580f35b600a546107c090839033906001600160a01b031661251c565b61077a565b6009546107de90869033906001600160a01b031661251c565b610774565b6008546107fc90859033906001600160a01b031661251c565b61076e565b61081a888080808b335af1610814611d62565b50611da1565b610768565b60649188519162461bcd60e51b835282015260136024820152724e6f20726566756e6420617661696c61626c6560681b6044820152fd5b835162461bcd60e51b8152918201526015602482015274139bc818dbdb9d1c9a589d5d1a5bdb88199bdd5b99605a1b604482015260649150fd5b606490602084519162461bcd60e51b8352820152601f60248201527f53616c6520776173207375636365737366756c2c206e6f20726566756e6473006044820152fd5b5090346102835782600319360112610283576108ed6124cd565b50600254815163052571af60e51b81527f8132e3eb1dac3e56939a16ff83848d194345f6688bff97eb1c8bd462d558802b93810193909352612ee06024840152608090839060449082906001600160a01b03165afa9182156109c7576109939392610997575b5051918291829190916060806080830194805160070b845267ffffffffffffffff6020820151166020850152604081015160030b60408501520151910152565b0390f35b6109b991925060803d81116109c0575b6109b18183611d40565b8101906121cd565b905f610953565b503d6109a7565b81513d85823e3d90fd5b5050346102b757816003193601126102b7576020906005549051908152f35b5050346102b757816003193601126102b75760209060ff600f541690519015158152f35b509034610283578260031936011261028357610a2e6124cd565b50600254815163052571af60e51b81527fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace93810193909352610bb86024840152608090839060449082906001600160a01b03165afa9182156109c7576109939392610997575051918291829190916060806080830194805160070b845267ffffffffffffffff6020820151166020850152604081015160030b60408501520151910152565b5050346102b757816003193601126102b75760209051610bb88152f35b5050346102b757816003193601126102b757602090600b549051908152f35b5050346102b757816003193601126102b7576020906003549051908152f35b5050346102b757816003193601126102b757905490516001600160a01b039091168152602090f35b5050346102b757816003193601126102b7576020906006549051908152f35b5050346102b75760203660031901126102b75760209181906001600160a01b03610b9d611a83565b1681526013845220549051908152f35b50903461028357602036600319011261028357813590610bdc600c54610bd4811515611bbd565b421015611bbd565b610bea600d54421115611bfc565b610bf8600e54845411611c35565b610c00612604565b600a546001600160a01b031690610c18821515611b58565b610c23831515611de1565b610c2b6123d1565b92670de0b6b3a76400009283610c418684611c74565b0494610c4d8633611e1e565b948515610c5a8115611ca5565b81870291878304141715610d8157610c8091610c7591611c87565b80923090339061259a565b610c8a8433611ed4565b3387526014602052828720610ca0828254611b9c565b90553387526015602052828720600160ff1982541617905582518481525f8051602061262883398151915260203392a282518181528460208201527f6b17898b02354bdb6737e3efa61f7660852ba490b428ff3c0dc20a16d7731f2a843392a210610d29575b505050600e5490541115610d1c575b6001805580f35b610d24611f06565b610d15565b81610d76610d587f1217920d9ea918944b38785b080fa79d615303d474c24f8ba37c1b18275a676a9486611d03565b92519283923396846040919493926060820195825260208201520152565b0390a25f8080610d06565b634e487b7160e01b895260118852602489fd5b5050346102b757816003193601126102b757602090600c549051908152f35b5050346102b757816003193601126102b757602090517f8132e3eb1dac3e56939a16ff83848d194345f6688bff97eb1c8bd462d558802b8152f35b5050346102b75760203660031901126102b75760209181906001600160a01b03610e16611a83565b1681526010845220549051908152f35b5050346102b75760203660031901126102b75760209181906001600160a01b03610e4e611a83565b1681526014845220549051908152f35b8334610eb85780600319360112610eb857610e776124f1565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b5050346102b75760203660031901126102b7576020906102b0610edc611a83565b612105565b5050346102b757816003193601126102b757602090516208ade08152f35b5050346102b757816003193601126102b75760209060ff600f5460081c1690519015158152f35b5050346102b757816003193601126102b757602090517fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace8152f35b509034610283578260031936011261028357610f8260ff600f541615611a9d565b600d5442118015610ff9575b15610f9f5782610f9c611f06565b80f35b906020608492519162461bcd60e51b8352820152602e60248201527f53616c6520706572696f64206e6f7420656e64656420616e642068617264206360448201526d185c081b9bdd081c995858da195960921b6064820152fd5b50600e5482541115610f8e565b5050346102b757816003193601126102b757600a5490516001600160a01b039091168152602090f35b5090346102835760603660031901126102835761104a611a83565b916024356001600160a01b0381811692918390036110f757604435948186168096036110f3576110786124f1565b1692831515806110ea575b156110b85750506bffffffffffffffffffffffff60a01b91826008541617600855816009541617600955600a541617600a5580f35b906020606492519162461bcd60e51b8352820152600c60248201526b5a65726f206164647265737360a01b6044820152fd5b50821515611083565b8680fd5b8580fd5b5050346102b757816003193601126102b75760095490516001600160a01b039091168152602090f35b5050346102b757816003193601126102b7576020906102b06120e7565b5050346102b75760203660031901126102b7576020906102b0611162611a83565b612187565b508290346102b757816003193601126102b7576007546001600160a01b0391906111949083163314611fa2565b6111a260ff600f5416611f61565b6111aa612604565b60ff600f5460081c16156114475747908260085416908551936370a0823160e01b9081865230838701526020918287602481885afa96871561143d578897611409575b509082916024949382600954168b519687809285825230898301525afa9485156113d05789956113da575b508282600a54169182155f146113795750505087945b8160075416801561134757889081611336575b5050508361131d575b84611304575b856112ac575b505050906112a2917f4ed4e992027b43d4b42d3f075879606ca54f5a52e775bc7e14eea6da44053054959651948594859094939260609260808301968352602083015260408201520152565b0390a16001805580f35b878080888194600754165af16112c0611d62565b50156112cc5780611256565b875162461bcd60e51b8152918201526013602482015272115512081dda5d1a191c985dc819985a5b1959606a1b604482015260649150fd5b6113188582600a541683600754169061251c565b611250565b61133184826009541683600754169061251c565b61124a565b61133f9261251c565b898781611241565b8a5162461bcd60e51b8152808601859052600c60248201526b14d85999481b9bdd081cd95d60a21b6044820152606490fd5b60248c5180948193825230898301525afa9081156113d057899161139f575b509461122e565b90508281813d83116113c9575b6113b68183611d40565b810103126113c557518a611398565b8880fd5b503d6113ac565b8a513d8b823e3d90fd5b9094508281813d8311611402575b6113f28183611d40565b810103126113c55751938a611218565b503d6113e8565b9096508281813d8311611436575b6114218183611d40565b8101031261143257519560246111ed565b8780fd5b503d611417565b89513d8a823e3d90fd5b606490602085519162461bcd60e51b8352820152601760248201527f53616c6520776173206e6f74207375636365737366756c0000000000000000006044820152fd5b509034610283576020366003190112610283578135906114b1600c54610bd4811515611bbd565b6114bf600d54421115611bfc565b6114cd600e54845411611c35565b6114d5612604565b6114e0821515611de1565b6008546001600160a01b0316906114f8821515611ae2565b61151b6115058433611e1e565b8093611512821515611ca5565b3090339061259a565b6115258233611ed4565b338552601260205280852061153b838254611b9c565b90553385526015602052808520600160ff1982541617905580518281525f8051602061262883398151915260203392a280518281528260208201527fa6a81fc91a85b132d3aecc7b4241ab40e76dda85233ce7846378e49ea2639931823392a2828210610d2957505050600e5490541115610d1c576001805580f35b5050346102b75760203660031901126102b75760209160ff9082906001600160a01b036115e2611a83565b1681526015855220541690519015158152f35b5050346102b75760203660031901126102b75760209181906001600160a01b0361161d611a83565b1681526011845220549051908152f35b503461028357602036600319011261028357611647611a83565b906116506124f1565b6001600160a01b039182169283156116a6575050600754826bffffffffffffffffffffffff60a01b821617600755167fa128590826c0b60efcbff1c96fae1451205b52d6478fbf9d88602a4e48e43d998380a380f35b906020606492519162461bcd60e51b835282015260096024820152687a65726f207361666560b81b6044820152fd5b509034610283576020366003190112610283578135906116fc600c54610bd4811515611bbd565b61170a600d54421115611bfc565b611718600e54845411611c35565b611720612604565b61172b821515611de1565b6009546001600160a01b031690611743821515611b1d565b600b5492670de0b6b3a7640000928361175c8684611c74565b04946117688633611e1e565b9485156117758115611ca5565b81870291878304141715610d815761179091610c7591611c87565b61179a8433611ed4565b33875260136020528287206117b0828254611b9c565b90553387526015602052828720600160ff1982541617905582518481525f8051602061262883398151915260203392a282518181528460208201527f01a66af7de0cace7db7b33e1440eafb27c0cfde9de2ca8f632f3ebcdbb345586843392a210610d2957505050600e5490541115610d1c576001805580f35b50908260031936011261028357611848600c54610bd4811515611bbd565b611856600d54421115611bfc565b611864600e54835411611c35565b61186c612604565b34156119cf5761187a612292565b670de0b6b3a76400008061188e8334611c74565b049161189a8333611e1e565b9182156118a78115611ca5565b818402918483041417156119bc57869392916118c291611c87565b936118cd8534611d03565b946118d88333611ed4565b33855260116020528185206118ee828254611b9c565b90553385526015602052818520600160ff1982541617905581518381525f8051602061262883398151915260203392a281519081528260208201527fd84484d3b2d0b60f15965c522793fce89c854a8ed7073663c623fe5a077d5e0e823392a28461196b575b5050505050600e5490541115610d1c576001805580f35b6119b294837f1217920d9ea918944b38785b080fa79d615303d474c24f8ba37c1b18275a676a869593856119a4610d5889988998611d03565b0390a2335af1610814611d62565b5f82818080611954565b634e487b7160e01b875260118652602487fd5b906020606492519162461bcd60e51b8352820152600b60248201526a139bc8115512081cd95b9d60aa1b6044820152fd5b5050346102b75760203660031901126102b7576020906102b0611a21611a83565b61214e565b5050346102b75760203660031901126102b75760209181906001600160a01b03611a4e611a83565b1681526012845220549051908152f35b8490346102b757816003193601126102b7576008546001600160a01b03168152602090f35b600435906001600160a01b0382168203611a9957565b5f80fd5b15611aa457565b60405162461bcd60e51b815260206004820152601660248201527514d85b1948185b1c9958591e48199a5b985b1a5e995960521b6044820152606490fd5b15611ae957565b60405162461bcd60e51b815260206004820152600c60248201526b1554d110c81b9bdd081cd95d60a21b6044820152606490fd5b15611b2457565b60405162461bcd60e51b815260206004820152600c60248201526b14d413d3881b9bdd081cd95d60a21b6044820152606490fd5b15611b5f57565b60405162461bcd60e51b8152602060048201526015602482015274159a5c9d1d585b081d1bdad95b881b9bdd081cd95d605a1b6044820152606490fd5b91908201809211611ba957565b634e487b7160e01b5f52601160045260245ffd5b15611bc457565b60405162461bcd60e51b815260206004820152601060248201526f14d85b19481b9bdd081cdd185c9d195960821b6044820152606490fd5b15611c0357565b60405162461bcd60e51b815260206004820152600a60248201526914d85b1948195b99195960b21b6044820152606490fd5b15611c3c57565b60405162461bcd60e51b815260206004820152601060248201526f12185c990818d85c081c995858da195960821b6044820152606490fd5b81810292918115918404141715611ba957565b8115611c91570490565b634e487b7160e01b5f52601260045260245ffd5b15611cac57565b60405162461bcd60e51b815260206004820152602960248201527f436f6e747269627574696f6e20746f6f20736d616c6c206f72206c696d69747360448201526808195e18d95959195960ba1b6064820152608490fd5b91908203918211611ba957565b6080810190811067ffffffffffffffff821117611d2c57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff821117611d2c57604052565b3d15611d9c573d9067ffffffffffffffff8211611d2c5760405191611d91601f8201601f191660200184611d40565b82523d5f602084013e565b606090565b15611da857565b60405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b6044820152606490fd5b15611de857565b60405162461bcd60e51b815260206004820152600e60248201526d416d6f756e74206973207a65726f60901b6044820152606490fd5b6001600160a01b03165f908152601060205260408120548015908180611ec9575b611ec2576006549080821115611eba57611e5891611d03565b600454600e5480821115611eb157611e6f91611d03565b905b808511611ea9575b50808411611ea1575b5080611e96575b611e91575090565b905090565b506005548210611e89565b92505f611e82565b93505f611e79565b50508290611e71565b505081611e58565b5050905090565b506005548410611e3f565b90611f019160018060a01b03165f52601060205260405f20611ef7828254611b9c565b9055600e54611b9c565b600e55565b7ff0d46ecf16ea6c4029ade01a6213d074c98f462769781b2a022fac1d81a58cbe6040600f546001600e549161ff0060035484101560081b169061ffff191617179081600f5560ff83519260081c16151582526020820152a1565b15611f6857565b60405162461bcd60e51b815260206004820152601260248201527114d85b19481b9bdd08199a5b985b1a5e995960721b6044820152606490fd5b15611fa957565b60405162461bcd60e51b81526020600482015260086024820152674e6f74207361666560c01b6044820152606490fd5b600c54158015611ffc575b611ff857611ff5600d544290611d03565b90565b5f90565b50600d54421015611fe4565b600f5460ff811690816120d9575b501561209457600e5490811561205c576001600160a01b03165f90815260106020526040902054801561205557611ff59261205091611c74565b611c87565b5050505f90565b60405162461bcd60e51b815260206004820152601060248201526f4e6f20636f6e747269627574696f6e7360801b6044820152606490fd5b60405162461bcd60e51b815260206004820152601f60248201527f53616c65206e6f74207375636365737366756c6c792066696e616c697a6564006044820152606490fd5b60ff915060081c165f612016565b600e5460045490818110156120ff57611ff591611d03565b50505f90565b61210d6120e7565b906006549060018060a01b03165f52601060205260405f20545f918181115f146121475761213b9250611d03565b80821015611e91575090565b505061213b565b61215790612105565b801561218257612165612292565b670de0b6b3a764000080830292830403611ba957611ff591611c87565b505f90565b61219090612105565b801561218257670de0b6b3a764000080820291820403611ba957600b54611ff591611c87565b6121bf90612105565b8015612182576121656123d1565b90816080910312611a9957604051906121e582611d10565b80518060070b8103611a99578252602081015167ffffffffffffffff81168103611a995760208301526040810151908160030b8203611a995760609160408401520151606082015290565b60030b60060190637fffffff8213637fffffff19831217611ba957565b60030b60060190637fffffff198212637fffffff831317611ba957565b60030b637fffffff198114611ba9575f0390565b63ffffffff16604d8111611ba957600a0a90565b60025460405163052571af60e51b81527fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace6004820152610bb8602482015290608090829060449082906001600160a01b03165afa9081156123c6575f916123a8575b505f815160070b131561236f5760408101805160030b6005198112612344575061233e61233367ffffffffffffffff611ff5945116925160030b61224d565b63ffffffff1661227e565b90611c74565b905061236961233361236467ffffffffffffffff611ff595511693612230565b61226a565b90611c87565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c69642045544820707269636560781b6044820152606490fd5b6123c0915060803d81116109c0576109b18183611d40565b5f6122f4565b6040513d5f823e3d90fd5b60025460405163052571af60e51b81527f8132e3eb1dac3e56939a16ff83848d194345f6688bff97eb1c8bd462d558802b6004820152612ee0602482015290608090829060449082906001600160a01b03165afa9081156123c6575f916124af575b505f815160070b13156124725760408101805160030b6005198112612344575061233e61233367ffffffffffffffff611ff5945116925160030b61224d565b60405162461bcd60e51b8152602060048201526015602482015274496e76616c6964205649525455414c20707269636560581b6044820152606490fd5b6124c7915060803d81116109c0576109b18183611d40565b5f612433565b604051906124da82611d10565b5f6060838281528260208201528260408201520152565b5f546001600160a01b0316330361250457565b60405163118cdaa760e01b8152336004820152602490fd5b60405163a9059cbb60e01b5f9081526001600160a01b039384166004526024949094529260209060448180855af160015f511481161561257b575b836040521561256557505050565b635274afe760e01b835216600482015260249150fd5b600181151661259157813b15153d151616612557565b833d5f823e3d90fd5b6040516323b872dd60e01b5f9081526001600160a01b03938416600452938316602452604494909452909160209060648180855af160015f51148116156125ee575b836040525f6060521561256557505050565b600181151661259157813b15153d1516166125dc565b600260015414612615576002600155565b604051633ee5aeb560e01b8152600490fdfe6770260ea820d2f539364e7617e021543aaf6d192f2fd2a47c20db6bd99a4eb9a2646970667358221220ba181d7c249f8b5aac819c217741326509e4f99de1bcf47466827bd2dc14539a64736f6c63430008140033000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000080d43c2164afdbc3712422ce78ab902ccab5ca10000000000000000000000000b3e328455c4059eeb9e3f84b5543f74e24e7e1b0000000000000000000000008250f4af4b972684f7b336503e2d6dfedeb1487a000000000000000000000000000000000000000000000000000000174876e8000000000000000000000000000000000000000000000000000000002e90edd000000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000004a817c800