397 txs
398 calls
constructor
constructor(address _royaltyWallet, address _stonksToken, uint256 _whitelistPrice, uint256 _publicPrice, uint256 _minStonksBalance)
functions
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
calculateMaxMintable
viewfunction calculateMaxMintable(address user, uint256 userBudget) view returns (uint256 maxAffordable, uint256 maxAllowed, uint256 maxAvailable, uint256 maxBatchSize, uint256 actualMax, uint256 totalCost)
calculateRoyalty
purefunction calculateRoyalty(uint256 salePrice) pure returns (uint256 royaltyAmount, uint256 sellerAmount)
currentPhase
viewfunction currentPhase() view returns (uint8)
estimateMintingGas
purefunction estimateMintingGas(uint256 quantity) pure returns (uint256 estimatedGas, string note)
freeAllocation
viewfunction freeAllocation(address) view returns (uint256)
freeMinted
viewfunction freeMinted(address) view returns (uint256)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getContractStatus
viewfunction getContractStatus() view returns (bool isPaused, bool isActive, string statusMessage)
getCurrentPrice
viewfunction getCurrentPrice() view returns (uint256)
getFreeAllocation
viewfunction getFreeAllocation(address wallet) view returns (uint256)
getFreeMinted
viewfunction getFreeMinted(address wallet) view returns (uint256)
getFreeMintStatus
viewfunction getFreeMintStatus(address user) view returns (bool isEligible, uint256 totalAllocated, uint256 alreadyClaimed, uint256 remainingToClaim, bool canClaimNow, uint256 maxClaimableInBatch, string reason)
getMintingStatus
viewfunction getMintingStatus(address user) view returns (bool canMint, string reason, uint256 maxQuantity, uint256 estimatedCost, bool canFreeMint, uint256 maxFreeQuantity, string freeMintReason)
getPhaseInfo
viewfunction getPhaseInfo() view returns (uint8 currentPhaseValue, string phaseName, uint256 currentPrice, bool isWhitelistActive, bool isPublicActive)
getRemainingFreeMints
viewfunction getRemainingFreeMints(address wallet) view returns (uint256)
getRemainingPaidMintLimit
viewfunction getRemainingPaidMintLimit(address wallet) view returns (uint256)
getRemainingSupply
viewfunction getRemainingSupply() view returns (uint256)
getRoyaltyInfo
purefunction getRoyaltyInfo() pure returns (uint256 royaltyPercent, string description)
getRoyaltyWallet
viewfunction getRoyaltyWallet() view returns (address)
getStonksERCTokenBalance
viewfunction getStonksERCTokenBalance(address wallet) view returns (uint256)
getSupplyAnalytics
viewfunction getSupplyAnalytics() view returns (uint256 totalSupplyValue, uint256 remainingSupply, uint256 percentageSold, uint256 maxPerWallet, uint256 currentPhaseValue)
getTotalFreeAllocated
purefunction getTotalFreeAllocated() pure returns (uint256 totalAllocated, uint256 totalClaimed)
getUserDashboardData
viewfunction getUserDashboardData(address user) view returns (uint256 userTotalMintCount, uint256 userPaidMintCount, uint256 remainingPaidMintLimit, bool isWhitelistEligible, uint256 currentPrice, uint256 totalSupplyValue, uint256 remainingSupply, uint8 currentPhaseValue, bool isPaused, bool isFreeMintEligible, uint256 freeAllocationAmount, uint256 remainingFreeMints)
getUserMintingHistory
viewfunction getUserMintingHistory(address user) view returns (uint256 totalMinted, uint256 paidMinted, uint256 freeMintedCount, uint256 remainingPaidMintLimit)
getWalletFreeMintCount
viewfunction getWalletFreeMintCount(address wallet) view returns (uint256)
getWalletMintCount
viewfunction getWalletMintCount(address wallet) view returns (uint256)
getWalletPaidMintCount
viewfunction getWalletPaidMintCount(address wallet) view returns (uint256)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isEligibleForFreeMint
viewfunction isEligibleForFreeMint(address wallet) view returns (bool)
isEligibleForStonksWhitelist
viewfunction isEligibleForStonksWhitelist(address wallet) view returns (bool)
isEligibleForWhitelist
viewfunction isEligibleForWhitelist(address wallet) view returns (bool)
isWhitelisted
viewfunction isWhitelisted(address wallet) view returns (bool)
MAX_BATCH_SIZE
viewfunction MAX_BATCH_SIZE() view returns (uint256)
MAX_PER_WALLET
viewfunction MAX_PER_WALLET() view returns (uint256)
MAX_SUPPLY
viewfunction MAX_SUPPLY() view returns (uint256)
minStonksTokenBalance
viewfunction minStonksTokenBalance() view returns (uint256)
mintingPaused
viewfunction mintingPaused() view returns (bool)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
paused
viewfunction paused() view returns (bool)
publicPrice
viewfunction publicPrice() view returns (uint256)
ROYALTY_PERCENT
viewfunction ROYALTY_PERCENT() view returns (uint256)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
royaltyWallet
viewfunction royaltyWallet() view returns (address)
STONKS_ERC20_TOKEN
viewfunction STONKS_ERC20_TOKEN() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
transfersPaused
viewfunction transfersPaused() view returns (bool)
walletMintCount
viewfunction walletMintCount(address) view returns (uint256)
walletPaidMintCount
viewfunction walletPaidMintCount(address) view returns (uint256)
whitelist
viewfunction whitelist(address) view returns (bool)
whitelistPrice
viewfunction whitelistPrice() view returns (uint256)
addToFreeList
nonpayablefunction addToFreeList(address[] _addresses, uint256[] _amounts)
addToWhitelist
nonpayablefunction addToWhitelist(address[] _addresses)
approve
nonpayablefunction approve(address to, uint256 tokenId)
freeMint
nonpayablefunction freeMint(uint256 quantity)
ownerMint
nonpayablefunction ownerMint(address to, uint256 quantity)
publicMint
payablefunction publicMint(uint256 quantity) payable
removeFromFreeList
nonpayablefunction removeFromFreeList(address[] _addresses)
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address[] _addresses)
renounceOwnership
nonpayablefunction renounceOwnership()
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string baseURI)
setMintingPaused
nonpayablefunction setMintingPaused(bool _mintingPaused)
setPaused
nonpayablefunction setPaused(bool _paused)
setPhase
nonpayablefunction setPhase(uint8 _phase)
setRoyaltyWallet
nonpayablefunction setRoyaltyWallet(address _newWallet)
setTransfersPaused
nonpayablefunction setTransfersPaused(bool _transfersPaused)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateMinStonksTokenBalance
nonpayablefunction updateMinStonksTokenBalance(uint256 newMinBalance)
updateMintingPrices
nonpayablefunction updateMintingPrices(uint256 newWhitelistPrice, uint256 newPublicPrice)
updateStonksToken
nonpayablefunction updateStonksToken(address newToken)
whitelistMint
payablefunction whitelistMint(uint256 quantity) payable
withdraw
nonpayablefunction withdraw()
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BatchMinted
event BatchMinted(address indexed to, uint256 startId, uint256 quantity, uint256 price)
ContractPaused
event ContractPaused(bool paused)
FreeAllocationAdded
event FreeAllocationAdded(address indexed user, uint256 amount)
FreeAllocationBatchAdded
event FreeAllocationBatchAdded(address[] indexed addresses, uint256[] indexed amounts, uint256 count)
FreeAllocationBatchRemoved
event FreeAllocationBatchRemoved(address[] indexed addresses, uint256 count)
FreeAllocationRemoved
event FreeAllocationRemoved(address indexed user)
FreeMinted
event FreeMinted(address indexed to, uint256 startId, uint256 quantity)
MintingPaused
event MintingPaused(bool mintingPaused)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PhaseChanged
event PhaseChanged(uint8 newPhase)
RoyaltyWalletUpdated
event RoyaltyWalletUpdated(address indexed newWallet)
TokenMinted
event TokenMinted(address indexed to, uint256 indexed tokenId, uint256 price)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
TransfersPaused
event TransfersPaused(bool transfersPaused)
WhitelistBatchUpdated
event WhitelistBatchUpdated(address[] indexed addresses, uint256 count, bool added)
WhitelistUpdated
event WhitelistUpdated(address indexed user, bool status)
errors
AlreadyInPhase
error AlreadyInPhase()
ContractIsPaused
error ContractIsPaused()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ExceedsMaxSupply
error ExceedsMaxSupply()
ExceedsWalletLimit
error ExceedsWalletLimit()
InsufficientFreeAllocation
error InsufficientFreeAllocation()
InsufficientPayment
error InsufficientPayment()
InsufficientTokenBalance
error InsufficientTokenBalance()
InvalidAddress
error InvalidAddress()
InvalidBatchSize
error InvalidBatchSize()
InvalidPhase
error InvalidPhase()
MintingNotActive
error MintingNotActive()
NoFundsToWithdraw
error NoFundsToWithdraw()
NotAuthorized
error NotAuthorized()
NotEligibleForFreeMint
error NotEligibleForFreeMint()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
TokenDoesNotExist
error TokenDoesNotExist()
TransferFailed
error TransferFailed()
creation bytecode
0x608034620003ae5762003e9d80380391601f1991601f838186011683019460018060401b03928487108488111762000398578160a09286926040998a52833981010312620003ae576200005283620003b3565b9360209262000063848601620003b3565b90878601519460806060880151970151976200007e620003c8565b9262000089620003c8565b958451828111620003985780600096620000a48854620003fb565b8b811162000368575b5086908b831160011462000304578892620002f8575b50508160011b916000199060031b1c19161785555b8651918211620002e4578190600197620000f38954620003fb565b8a8111620002a9575b5085918a841160011462000248575086926200023c575b5050600019600383901b1c191690861b1785555b331562000224576006549360018060a01b03809260018060a01b03199733898916176006558d5197833391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08980a3600755600e805460ff60b81b1916905516948515620002155750169485156200020457620001a7600c54620003fb565b91818311620001e2575b505050506000600c5581600e541617600e55600a541617600a55600855600955600b5551613a4b9081620004528239f35b83600c620001fa955220910160051c81019062000438565b38808080620001b1565b895163e6c4247b60e01b8152600490fd5b63e6c4247b60e01b8152600490fd5b8951631e4fbdf760e01b815260048101849052602490fd5b01519050388062000113565b8988528688208a959093929116885b8882821062000292575050841162000278575b505050811b01855562000127565b015160001960f88460031b161c191690553880806200026a565b8385015186558c9790950194938401930162000257565b620002d3908a89528789208c80870160051c8201928a8810620002da575b0160051c019062000438565b38620000fc565b92508192620002c7565b634e487b7160e01b85526041600452602485fd5b015190503880620000c3565b888052878920928516895b898282106200035157505090846001959493921062000337575b505050811b018555620000d8565b015160001960f88460031b161c1916905538808062000329565b60018596829396860151815501950193016200030f565b6200039190898052888a208d80860160051c8201928b8710620002da570160051c019062000438565b38620000ad565b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620003ae57565b60408051919082016001600160401b038111838210176200039857604052600682526553544f4e4b5360d01b6020830152565b90600182811c921680156200042d575b60208310146200041757565b634e487b7160e01b600052602260045260246000fd5b91607f16916200040b565b81811062000444575050565b600081556001016200043856fe608060408181526004918236101561001657600080fd5b60009260e08435811c92836301ffc9a714612c0e57508263055ad42e14612be157826306fdde0314612b30578263081812fc14612af3578263095ea7b314612a165782630f2cdd6c146129f957826316c38b3c1461298d57826318160ddd1461296d578263195ed97c14611f2857826323b872dd146129555782632a55205a146128e05782632db115441461273457826332cb6b0c14612716578263389fcf06146126dd57826339fe1a33146126b35782633af32abf146116095782633ccfd60b146126415782633ce4751914611cbf5782633f0d2ec114611f2d57826342842e0e1461261157826344e46dff146125a55782634563f30a1461257d578263484b973c1461245f5782634a5240041461243f578263548db1741461234f578263557a96b41461232e57826355f804b31461219f578263565cdd0014611fd35782635c975abb14611fab57826361470d7f14611f895782636352211e14611f575782636470676b14611f2d57826366c2c8d614611f2857826369b01da314611ed757826370a0823114611e81578263715018a614611e2457826374b77cf714611d1f578263760e499414611cf85782637b3ebd1a14611cbf5782637c928fe914611b2a5782637eefe58c14611b015782637f64978314611a0e578263868ff4a21461181d5782638da5cb5b146117f35782639132ce051461174d57826393ecb0c61461172457826395d89b41146116485782639b19251a14611609578263a22cb4651461156b578263a2e6961314611525578263a6f8e722146113ee578263a86a28d11461135d578263a945bf801461133d578263ad13419d146112d1578263b20fcad814611277578263b4a58d8a14611199578263b7748122146110ad578263b88d4fde14611018578263c032846b14610ee2578263c03afb5914610e32578263c0e05d0b14610df7578263c5c8e30e14610d5a578263c87b56dd14610acd578263cdcd897e14610ab0578263cdeee63714610a34578263cf0cdd4214610a0d578263cfdbf254146109f0578263d3f66ca314610981578263d472eed9146108eb578263d9803fad146107b257508163e18cdd1c1461077a578163e1a283d614610753578163e360337014610592578163e4b7fb7314610552578163e985e9c514610504578163eb91d37e146104e0578163ec8abec4146104a8578163efe5b2c914610486578163f1d0a94114610457578163f2fde38b146103c3575063fc1a1c36146103a257600080fd5b346103bf57816003193601126103bf576020906008549051908152f35b5080fd5b905034610453576020366003190112610453576103de612cff565b906103e7613620565b6001600160a01b0391821692831561043d575050600654826bffffffffffffffffffffffff60a01b821617600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b51631e4fbdf760e01b8152908101849052602490fd5b8280fd5b5050346103bf5760203660031901126103bf5760209061047d610478612cff565b613874565b90519015158152f35b8284346104a557806003193601126104a5578151908082526020820152f35b80fd5b5050346103bf5760203660031901126103bf5760209181906001600160a01b036104d0612cff565b168152600f845220549051908152f35b5050346103bf57816003193601126103bf576020906104fd6135ae565b9051908152f35b5050346103bf57806003193601126103bf5760ff81602093610524612cff565b61052c612d1a565b6001600160a01b0391821683526005875283832091168252855220549151911615158152f35b8383346103bf57816003193601126103bf57600d5491610d0592830392831161057f576020838351908152f35b634e487b7160e01b815260118452602490fd5b8383346103bf57806003193601126103bf576001600160401b03833581811161074f576105c29036908601612dc4565b909160243590811161074b576105db9036908701612dc4565b9190956105e6613620565b82820361073d57506105f78161310a565b610600826130f3565b9361060d86519586612e40565b828552610619836130f3565b9760209485870199601f1901368b378894895b8181106106ac57505050505081610641578580f35b61064a90613199565b928451809151909790875b81811061069857505050807f61f2b85e97c7dfa20e7a6533bb569a18570fed921883a5d3cbcd3f1466e050e5949596970390209451908152a38082808080808580f35b82518a529885019891850191600101610655565b6106bf6106ba82848861313c565b613162565b6106ca82858761313c565b6001600160a01b0390911690358a82151580610734575b6106f1575b50505060010161062c565b89826107128261071894879e9761070c8f9960019b9a613176565b52613176565b5261318a565b988d5260128a528b8d2055601389528b8b812055908d8a6106e6565b508115156106e1565b8451637862e95960e01b8152fd5b8480fd5b8380fd5b5050346103bf57816003193601126103bf5760209060ff600e5460a81c1690519015158152f35b5050346103bf5760203660031901126103bf5760209181906001600160a01b036107a2612cff565b1681526012845220549051908152f35b848491346103bf5760209283600319360112610453576107d0612cff565b9160018060a01b0383168452600f85528184205495601086528285205493601287528386205495601388528481205495600d5492600e549660148310156000146108c25761081e8492613874565b926108276135ae565b94610d05978789039889116108af57508b1580159b906108a85761084c91508c6131dc565b9b5b82519d8e528d01528b0152151560608a0152608089015260a088015260c087015285018160b81c60ff169061088291612c94565b60a01c60ff16151561010085015261012084015261014083015261016082015261018090f35b509b61084e565b634e487b7160e01b825260119052602490fd5b82601403601481116108d85761081e9092613874565b634e487b7160e01b855260118752602485fd5b508383346103bf5760203660031901126103bf576001600160a01b0361090f612cff565b168252600f6020528082205491601060205281812054916013602052808220549160148410156000146109565760809550925b815194855260208501528301526060820152f35b83601403906014821161096e57506080955092610942565b634e487b7160e01b815260118752602490fd5b8385346104a55760203660031901126104a557506109ec6109ca916109ac6109a7612cff565b61330c565b9598909487949294519a8b9a15158b528060208c01528a0190612cda565b9588015260608701521515608086015260a085015283820360c0850152612cda565b0390f35b505050346103bf57816003193601126103bf5760209051600a8152f35b505050346103bf5760203660031901126103bf576020906104fd610a2f612cff565b6132d7565b5090503461045357602036600319011261045357610a50612cff565b610a58613620565b6001600160a01b0316918215610aa3575050600e80546001600160a01b031916821790557f903d4aa1c532111374ec0a8e5ef9fb1c6ebd3e3b96bd912d3c105b34b796ae138280a280f35b5163e6c4247b60e01b8152fd5b505050346103bf57816003193601126103bf576020905160058152f35b508383346103bf57602091826003193601126104a55783356001600160a01b03610af6826135e5565b1615610d4a578091819581927a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000009081811015610d3d575b50506d04ee2d6d415b85acef810000000080881015610d2f575b50662386f26fc1000080881015610d20575b506305f5e10080881015610d11575b5061271080881015610d02575b50506064861015610cf2575b600a80961015610ce8575b6001916001810196610bb0610b9b89612e61565b98610ba888519a8b612e40565b808a52612e61565b94846021898b0194601f198099013687378b0101905b610cb9575b505050845196879383600c5491610be183612e7c565b928a600182169182600014610c92575050600114610c32575b5050509180610c16610c2395936109ec98979551938491612cb7565b0103908101865285612e40565b51928284938452830190612cda565b8993949550600c82527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c75b838310610c7857505050840101919080610c166109ec610bfa565b80549783018501979097528a968a94909201918101610c5d565b60ff19168982015284151590940288019093019550839250610c1691506109ec9050610bfa565b600019019082906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304908582610bc65750610bcb565b9060010190610b87565b9094606460029104950190610b7c565b90919296049501908680610b70565b60089193970496019187610b63565b60109193970496019187610b54565b869193970496019187610b42565b0496508492508780610b28565b825163677510db60e11b81528590fd5b508383346103bf57602092836003193601126104535783610d79612cff565b600a5484516370a0823160e01b81526001600160a01b039283169481019490945283916024918391165afa928315610dec578093610dba575b505051908152f35b909192508382813d8311610de5575b610dd38183612e40565b810103126104a5575051908380610db2565b503d610dc9565b8251903d90823e3d90fd5b505050346103bf5760203660031901126103bf5760209181906001600160a01b03610e20612cff565b16815260128452205415159051908152f35b8482853461045357602036600319011261045357813591600383101561074f57610e5a613620565b600e549060ff8260b81c166003811015610ecf578414610ec1575060ff60b81b191660b883901b60ff60b81b1617600e55517fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c46429160209190610ebd908290612c94565ba180f35b825163668f812760e11b8152fd5b634e487b7160e01b865260218252602486fd5b508383346103bf57816003193601126103bf57600e549060ff808360a01c169260b81c16821593849384611004575b15610f745750506109ec9192935060608151610f2c81612e25565b601b81527f436f6e74726163742074656d706f726172696c792070617573656400000000006020820152915b8051958695158652151560208601528401526060830190612cda565b6003821015610ff157506109ec9293945015600014610fc35760608151610f9a81612e25565b60168152754d696e74696e67206e6f74207965742061637469766560501b602082015291610f58565b60608151610fd081612e25565b600e81526d4d696e74696e672061637469766560901b602082015291610f58565b634e487b7160e01b815260218652602490fd5b94506003821015610ff15781151594610f11565b8482853461045357608036600319011261045357611034612cff565b61103c612d1a565b6044359185606435956001600160401b0387116103bf57366023880112156103bf578601359561107761106e88612e61565b96519687612e40565b86865236602488830101116103bf57866110aa9760246020930183890137860101526110a4838383612eb6565b336138f8565b80f35b508284346104a557816003193601126104a5576110c8612cff565b6110d06135ae565b908115611189576001600160a01b03168252601060205282822054600d54602435839004949091601481106111785750835b610d0592830392831161096e5760c096508486101561117257855b8381101561116a57905b50600a81101561115e5761113d90935b8461308d565b9381519586526020860152840152600a6060840152608083015260a0820152f35b5061113d600a93611137565b508290611127565b8461111d565b601403601481116108d85793611102565b505050516373020e4b60e01b8152fd5b508284346104a55760203660031901126104a55761c35083358181029291811591840414171561057f5761520891820180921161057f5782519060808201908282106001600160401b038311176112645750906109ec918452604581527f5468697320697320616e20617070726f78696d6174696f6e2e2055736520657460208201527f685f657374696d61746547617320666f7220616363757261746520657374696d848201526430ba32b99760d91b606082015283519384938452806020850152830190612cda565b634e487b7160e01b815260418652602490fd5b505050346103bf5760203660031901126103bf5790602091611297612cff565b916112a183613874565b9283156112b3575b5050519015158152f35b6001600160a01b0316815260128452819020541515915038806112a9565b505050346103bf5760203660031901126103bf5760207f5708b32f825aa2f1192da18d8205d00f2cb633e72d1c5bb33a3111ccc61be8f491611311612d30565b611319613620565b151590600e5460ff60a81b8360a81b169060ff60a81b191617600e5551908152a180f35b505050346103bf57816003193601126103bf576020906009549051908152f35b5090503461045357826003193601126104535781519260608401918483106001600160401b038411176113db5750508152602182527f352520726f79616c7479206f6e20616c6c207365636f6e646172792073616c656020830152607360f81b818301526109ec815192839260058452806020850152830190612cda565b634e487b7160e01b825260419052602490fd5b508383346103bf57816003193601126103bf5760608280819060ff600e5460b81c16956008549460095460038910156115125761146599508861148c5750505050509050815161143d81612e25565b6008815267496e61637469766560c01b6020820152908061147682935b855197888098612c94565b60a0602088015260a0870190612cda565b9385015215156060840152151560808301520390f35b600189036114c757505050505082516114a481612e25565b600981526815da1a5d195b1a5cdd60ba1b6020820152916114766001929361145a565b919395509193600288146114e1575b50506114769061145a565b93509350505082516114f281612e25565b60068152655075626c696360d01b602082015260019290611476886114d6565b634e487b7160e01b865260218a52602486fd5b838583346103bf5760203660031901126103bf578035916005830291838304600514841517156108af575050606461155f910480926131dc565b82519182526020820152f35b84828534610453578060031936011261045357611586612cff565b906024359182151580930361074b576001600160a01b03169283156115f45750338452600560205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b836024925191630b61174360e31b8352820152fd5b505050346103bf5760203660031901126103bf5760209160ff9082906001600160a01b03611635612cff565b1681526011855220541690519015158152f35b8385346104a557806003193601126104a55781519182826001936001549461166f86612e7c565b91828552602096876001821691826000146116fd5750506001146116a1575b5050506109ec9291610c23910385612e40565b9190869350600183527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b8284106116e55750505082010181610c236109ec61168e565b8054848a0186015288955087949093019281016116cc565b60ff19168782015293151560051b86019093019350849250610c2391506109ec905061168e565b505050346103bf5760203660031901126103bf5760209181906001600160a01b036104d0612cff565b508284346104a557806003193601126104a557600d549160ff600e5460b81c1691610d05908482038281116117e0576064860291868304606414871517156117cd5760038610156117ba575060a09650835195865260208601520490830152601460608301526080820152f35b634e487b7160e01b815260218852602490fd5b634e487b7160e01b815260118852602490fd5b634e487b7160e01b825260118752602482fd5b505050346103bf57816003193601126103bf5760065490516001600160a01b039091168152602090f35b83858360203660031901126103bf57803592600e5460ff8160a01c168015611a01575b6119f35760b81c60ff169360038510156119e05760018095036119d257610d0561186c82600d546130b6565b116119c4573384526010602052601461188882848720546130b6565b116119b657600a81116119a85761189d61364c565b6118a633613874565b1561199a576118b78160085461308d565b340361198c57600d5492600184018094116119795750835b81811061195e575090816119067f26f4c0c9dd9536441681c861e4c72684bbec9e4e6d7e4492c2a90ff07cf35c6f93600d546130b6565b600d55338552600f60205281852061191f8282546130b6565b905533855260106020528185206119378282546130b6565b9055600854915193845260208401526040830152339180606081015b0390a2600160075580f35b8061197361196d8893876130b6565b3361366f565b016118cf565b634e487b7160e01b855260119052602484fd5b505163cd1c886760e01b8152fd5b5051637222ae5760e11b8152fd5b5051637862e95960e01b8152fd5b5051635107dbe760e01b8152fd5b505163c30436e960e01b8152fd5b505163268dbf6760e21b8152fd5b634e487b7160e01b845260218352602484fd5b50516306d39fcd60e41b8152fd5b5060ff8160a81c16611840565b5090503461045357602090602060031936011261074f578035906001600160401b03821161074b57611a4291369101612dc4565b611a4d939193613620565b611a568161310a565b928594865b838110611aae575050505082611a6f578380f35b611a997f75aa8da8ea76601ff85e403e6694c2096f1cff58de9e7e71e585b660b7c28eba92613199565b92815190815260016020820152a23880808380f35b6001600160a01b03611ac46106ba83878661313c565b1680611ad4575b50600101611a5b565b9690611ae782896107126001958b613176565b97895260118452858920805460ff19168317905590611acb565b505050346103bf5760203660031901126103bf5760209181906001600160a01b036107a2612cff565b508383346103bf5760209081600319360112610453578335600e5460ff8160a01c16908115611cb1575b50611ca157610d05611b6882600d546130b6565b11611c9157600a8111611c8157611b7d61364c565b33845260128352818420548015611c71573385526013845282852054611ba2916131dc565b8111611c6157600d549260019560018501809511611c4e5750845b828110611c395750907f5a0e51394f8477f330b117d919f4a3579ab0d9bf3c77d750b80d06bf6ee5ab459291611bf582600d546130b6565b600d55338652600f8152828620611c0d8382546130b6565b905533865260138152828620611c248382546130b6565b905582519485528401523392a2600160075580f35b80611c4861196d8993886130b6565b01611bbd565b634e487b7160e01b865260119052602485fd5b81516360267dc360e11b81528590fd5b82516363c45ab560e11b81528690fd5b8151637862e95960e01b81528590fd5b815163c30436e960e01b81528590fd5b81516306d39fcd60e41b81528590fd5b60ff915060a81c1686611b54565b505050346103bf5760203660031901126103bf5760209181906001600160a01b03611ce8612cff565b1681526010845220549051908152f35b505050346103bf5760203660031901126103bf576020906104fd611d1a612cff565b6132a2565b5090503461045357602090602060031936011261074f578035906001600160401b03821161074b57611d5391369101612dc4565b611d5e929192613620565b611d678161310a565b918593865b838110611dba575050505081611d80578380f35b7f6cd99b3847fa953b528437d808eb9782d32b58f306bdb1dd256dab8a70db23b591611dad602092613199565b9351908152a23880808380f35b6001600160a01b03611dd06106ba83878661313c565b1680611de0575b50600101611d6c565b8089526012808552888a2054611df7575b50611dd7565b611e0a8883610712600196959b8b613176565b978a52845288888120556013845288888120559038611df1565b84346104a557806003193601126104a557611e3d613620565b600680546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b508284346104a55760203660031901126104a5576001600160a01b03611ea5612cff565b16928315611ec25750806020938392526003845220549051908152f35b91516322718ad960e21b815291820152602490fd5b5090503461045357602036600319011261045357611ef3612cff565b611efb613620565b6001600160a01b0316918215610aa35750506bffffffffffffffffffffffff60a01b600a541617600a5580f35b612d3f565b505050346103bf57816003193601126103bf57600e5490516001600160a01b039091168152602090f35b508284346104a55760203660031901126104a55750611f78602092356135e5565b90516001600160a01b039091168152f35b8482346103bf5760203660031901126103bf57611fa4613620565b35600b5580f35b505050346103bf57816003193601126103bf5760209060ff600e5460a01c1690519015158152f35b8484346103bf5760203660031901126103bf57611fee612cff565b60018060a01b0316825260126020528082205492601360205281832054600e549360ff8560b81c1694600d5487159684891160001461219857612031858a6131dc565b925b881561207e575050506109ec95969750819261204d613269565b955b8051998a99158a5260208a015288015260608701521515608086015260a08501528060c0850152830190612cda565b836120ca575050506109ec959697508192855161209a81612e25565b601e81527f416c6c2066726565206d696e747320616c726561647920636c61696d6564000060208201529561204f565b60a01c60ff16156120ee5750506109ec9596975081926120e861323b565b9561204f565b60038110156121855761210d57506109ec9596975081926120e861320d565b610d059080820391808311612172576109ec98999a5014600014612136575081926120e86131e9565b91926001928083101561216d5750815b600a811015612165575b9386519061215d82612df4565b81529561204f565b50600a612150565b612146565b634e487b7160e01b855260118b52602485fd5b634e487b7160e01b845260218a52602484fd5b8392612033565b5083346104a55760209160206003193601126103bf5780356001600160401b039182821161074f573660238301121561074f5781013591821161045357602490366024848301011161074f576121f3613620565b6121fe600c54612e7c565b601f81116122cf575b508391601f84116001146122475750838394955092612239575b50508160011b916000199060031b1c191617600c5580f35b602492500101358380612221565b91947fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c792601f1985169186915b8383106122b35750505094836001959610612296575b505050811b01600c5580f35b0160240135600019600384901b60f8161c1916905583808061228a565b908060018a978483969c89010135815501960198019190612274565b7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f850160051c81019160208610612324575b601f0160051c01905b8181106123195750612207565b85815560010161230c565b9091508190612303565b84346104a55761233d36612dae565b90612346613620565b60085560095580f35b5090503461045357602090602060031936011261074f578035906001600160401b03821161074b5761238391369101612dc4565b61238e939193613620565b6123978161310a565b928594865b8381106123ee5750505050826123b0578380f35b6123da7f75aa8da8ea76601ff85e403e6694c2096f1cff58de9e7e71e585b660b7c28eba92613199565b928151908152846020820152a23880808380f35b6001600160a01b036124046106ba83878661313c565b1680612414575b5060010161239c565b969061242782896107126001958b613176565b97895260118452858920805460ff191690559061240b565b505050346103bf57816003193601126103bf57602090600b549051908152f35b5090503461045357816003193601126104535761247a612cff565b9160243592612487613620565b600d5492610d0561249886866130b6565b1161256f57600a8511612561576001906001850180951161254e575090859291835b86811061252b575050917f26f4c0c9dd9536441681c861e4c72684bbec9e4e6d7e4492c2a90ff07cf35c6f93916060936124f687600d546130b6565b600d5560018060a01b031695868352600f6020528183206125188282546130b6565b905581519384526020840152820152a280f35b819293945061254361253d82886130b6565b8561366f565b0190869392916124ba565b634e487b7160e01b875260119052602486fd5b8251637862e95960e01b8152fd5b825163c30436e960e01b8152fd5b505050346103bf57816003193601126103bf5760209060ff600e5460b01c1690519015158152f35b505050346103bf5760203660031901126103bf5760207f106877e810194754ee8a95268e27dbd9ad06a13e6cbf2d335b705cbaa88299b9916125e5612d30565b6125ed613620565b151590600e5460ff60b01b8360b01b169060ff60b01b191617600e5551908152a180f35b505050346103bf576110aa9061262636612d79565b9192519261263384612df4565b8584526110a4838383612eb6565b8482853461045357826003193601126104535761265c613620565b61266461364c565b4780156126a55760065484918291829182916001600160a01b03165af16126896130c3565b50156126985782600160075580f35b516312171d8360e31b8152fd5b50516367e3990d60e01b8152fd5b505050346103bf57816003193601126103bf57600a5490516001600160a01b039091168152602090f35b505050346103bf5760203660031901126103bf5760209181906001600160a01b03612706612cff565b1681526013845220549051908152f35b505050346103bf57816003193601126103bf5760209051610d058152f35b50838360203660031901126103bf57823590600e5460ff8160a01c1680156128d3575b611ca15760b81c60ff1660038110156128c0576002036128b157610d0561278083600d546130b6565b116128a2573383526010602052601461279c83838620546130b6565b1161289357600a8211612884576127b161364c565b6127bd8260095461308d565b340361287557600d5491600194600184018094116119795750835b8181106128605750908161280f7f26f4c0c9dd9536441681c861e4c72684bbec9e4e6d7e4492c2a90ff07cf35c6f93600d546130b6565b600d55338552600f6020528185206128288282546130b6565b905533855260106020528185206128408282546130b6565b905560095491519384526020840152604083015233918060608101611953565b8061286f61196d8893876130b6565b016127d8565b5163cd1c886760e01b81528390fd5b51637862e95960e01b81528390fd5b51635107dbe760e01b81528390fd5b5163c30436e960e01b81528390fd5b5163268dbf6760e21b81528390fd5b634e487b7160e01b845260218552602484fd5b5060ff8160a81c16612757565b508383346103bf576129086128f436612dae565b936001600160a01b039290918391906135e5565b1615610d4a5760058402938085046005149015171561294257600e5483519083166001600160a01b03168152606485046020820152604090f35b634e487b7160e01b815260118552602490fd5b84346104a5576110aa61296736612d79565b91612eb6565b505050346103bf57816003193601126103bf57602090600d549051908152f35b505050346103bf5760203660031901126103bf5760207f752d7e161ff5146f80e3820893176eb40532811e5e20400dfdde57455213706a916129cd612d30565b6129d5613620565b151590600e5460ff60a01b8360a01b169060ff60a01b191617600e5551908152a180f35b505050346103bf57816003193601126103bf576020905160148152f35b84828534610453578060031936011261045357612a31612cff565b91602435612a3e816135e5565b33151580612ae0575b80612ab7575b612aa1576001600160a01b039485169482918691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258880a48452602052822080546001600160a01b031916909117905580f35b835163a9fbf51f60e01b81523381850152602490fd5b506001600160a01b03811686526005602090815284872033885290528386205460ff1615612a4d565b506001600160a01b038116331415612a47565b5090503461045357602036600319011261045357918260209335612b16816135e5565b50825283528190205490516001600160a01b039091168152f35b8385346104a557806003193601126104a55781519182828354612b5281612e7c565b90818452602095600191876001821691826000146116fd575050600114612b86575050506109ec9291610c23910385612e40565b91908693508280527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410612bc95750505082010181610c236109ec61168e565b8054848a018601528895508794909301928101612bb0565b505050346103bf57816003193601126103bf57602090612c0c60ff600e5460b81c1691518092612c94565bf35b85908334610453576020366003190112610453573563ffffffff60e01b8116809103610453576020925063152a902d60e11b8114908115612c51575b5015158152f35b6380ac58cd60e01b811491508115612c83575b8115612c72575b5083612c4a565b6301ffc9a760e01b14905083612c6b565b635b5e139f60e01b81149150612c64565b906003821015612ca15752565b634e487b7160e01b600052602160045260246000fd5b60005b838110612cca5750506000910152565b8181015183820152602001612cba565b90602091612cf381518092818552858086019101612cb7565b601f01601f1916010190565b600435906001600160a01b0382168203612d1557565b600080fd5b602435906001600160a01b0382168203612d1557565b600435908115158203612d1557565b34612d15576020366003190112612d15576001600160a01b03612d60612cff565b1660005260136020526020604060002054604051908152f35b6060906003190112612d15576001600160a01b03906004358281168103612d1557916024359081168103612d15579060443590565b6040906003190112612d15576004359060243590565b9181601f84011215612d15578235916001600160401b038311612d15576020808501948460051b010111612d1557565b602081019081106001600160401b03821117612e0f57604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117612e0f57604052565b90601f801991011681019081106001600160401b03821117612e0f57604052565b6001600160401b038111612e0f57601f01601f191660200190565b90600182811c92168015612eac575b6020831014612e9657565b634e487b7160e01b600052602260045260246000fd5b91607f1691612e8b565b6001600160a01b0391821692909183156130745733151592838061306c575b61304c575b826000958187528560209760028952604098868a83205416988993612fb3575b509060027fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9284612f80575b858352600381528b8320805460010190558683525289812080546001600160a01b0319168517905580a41692838303612f5f5750505050565b6064945051926364283d7b60e01b8452600484015260248301526044820152fd5b600087815260046020526040902080546001600160a01b0319169055848352600381528b83208054600019019055612f26565b9193945091508061300b575b15612fcf57859291879138612efa565b878688612fec576024915190637e27328960e01b82526004820152fd5b905163177e802f60e01b81523360048201526024810191909152604490fd5b503387148015613030575b80612fbf5750858252600481523385898420541614612fbf565b5086825260058152878220338352815260ff8883205416613016565b60ff600e5460b01c1615612eda576040516306d39fcd60e41b8152600490fd5b506001612ed5565b604051633250574960e11b815260006004820152602490fd5b818102929181159184041417156130a057565b634e487b7160e01b600052601160045260246000fd5b919082018092116130a057565b3d156130ee573d906130d482612e61565b916130e26040519384612e40565b82523d6000602084013e565b606090565b6001600160401b038111612e0f5760051b60200190565b90613114826130f3565b6131216040519182612e40565b8281528092613132601f19916130f3565b0190602036910137565b919081101561314c5760051b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b0381168103612d155790565b805182101561314c5760209160051b010190565b60001981146130a05760010190565b60405190818183925160208092019160005b8281106131bc575050505003902090565b83516001600160a01b0316855286955093810193928101926001016131ab565b919082039182116130a057565b604051906131f682612e25565b600882526714dbdb19081bdd5d60c21b6020830152565b6040519061321a82612e25565b60128252714d696e74696e67206e6f742061637469766560701b6020830152565b6040519061324882612e25565b601282527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6020830152565b6040519061327682612e25565b601b82527f4e6f7420656c696769626c6520666f722066726565206d696e747300000000006020830152565b6001600160a01b031660009081526010602052604090205460148110156132d157601403601481116130a05790565b50600090565b6001600160a01b031660009081526012602052604090205480156132d1576013602052604060002054613309916131dc565b90565b600e5460ff808260b81c169160a01c1661358c576003811015612ca1571561356b576001600160a01b031660008181526010602090815260408083205490949390601481106135465750825b8094818295885161336881612df4565b84815290806134d4575050875161337e81612e25565b8581527f50616964206d696e74206c696d6974207265616368656420283230206d61782986820152975b8484526012865280842054908496859682516133c381612df4565b8781529380156134c1576133e19188526013835283882054906131dc565b918215613485575050600d54610d059080820391808311613471570361343a5750505061340c6131e9565b925b8715613431575b508381111561342957955b96959493929190565b508295613420565b96508496613415565b91949550919550600a8110600014613469575b808210156134615750935b6001949361340e565b905093613458565b50600a61344d565b634e487b7160e01b88526011600452602488fd5b5192507f4e6f2066726565206d696e74732072656d61696e696e6700000000000000000091506134b483612e25565b601783528201529261340e565b50505050506134ce613269565b9261340e565b600d54610d05908082039180831161347157036134fc575050506134f66131e9565b976133a8565b925092975097955080821060001461353f57505b600a81101561353657945b61352c6135266135ae565b8761308d565b60019690956133a8565b50600a9461351b565b9050613510565b601403601481116135575792613358565b634e487b7160e01b84526011600452602484fd5b5060009061357761320d565b9060009060009060009060009061330961320d565b505060009061359961323b565b9060009060009060009060009061330961323b565b60ff600e5460b81c1660085490600954906003811015612ca157600181036135d557505090565b6002919250146133095750600090565b6000818152600260205260409020546001600160a01b0316908115613608575090565b60249060405190637e27328960e01b82526004820152fd5b6006546001600160a01b0316330361363457565b60405163118cdaa760e01b8152336004820152602490fd5b60026007541461365d576002600755565b604051633ee5aeb560e01b8152600490fd5b604080519261367d84612df4565b60008085526001600160a01b039484861694851561385c5783835260209660028852858420541684878215159283613829575b81875260038b528887208054600101905582875260028b5288872080546001600160a01b031916831790557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8780a4613811573b613711575b505050505050565b8561374e9185969798955180938192630a85bd0160e11b978884523360048501528760248501526044840152608060648401526084830190612cda565b0381858a5af1908290826137cd575b50506137955750505061376e6130c3565b805193908461378f578251633250574960e11b815260048101859052602490fd5b84925001fd5b9194506001600160e01b0319909116036137b6575050388080808080613709565b602492505190633250574960e11b82526004820152fd5b909192508781813d831161380a575b6137e68183612e40565b810103126103bf5751906001600160e01b0319821682036104a5575090388061375d565b503d6137dc565b84516339e3563760e11b815260048101849052602490fd5b600083815260046020526040902080546001600160a01b031916905580875260038b5288872080546000190190556136b0565b8451633250574960e11b815260048101849052602490fd5b600a546040516370a0823160e01b81526001600160a01b0392831660048201529160209183916024918391165afa9081156138ec576000916138ba575b50600b54111590565b90506020813d6020116138e4575b816138d560209383612e40565b81010312612d155751386138b1565b3d91506138c8565b6040513d6000823e3d90fd5b9293823b613908575b5050505050565b61394c9060018060a01b038094169560405194859481630a85bd0160e11b988988521660048701521660248501526044840152608060648401526084830190612cda565b03906020816000938185885af1908290826139cc575b505061399a57826139716130c3565b805191908261399357604051633250574960e11b815260048101839052602490fd5b6020915001fd5b6001600160e01b031916036139b457503880808080613901565b60249060405190633250574960e11b82526004820152fd5b909192506020813d602011613a0d575b816139e960209383612e40565b810103126103bf5751906001600160e01b0319821682036104a55750903880613962565b3d91506139dc56fea264697066735822122091089fffe97871f576d6d4ca8df0547e9b507fa606d98707c19ef2834a01139364736f6c634300081800330000000000000000000000009f1ce23ece3ae68267420ef9126a2cf1fe81161c0000000000000000000000007d4a23832fad83258b32ce4fd3109ceef4332af4000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000000000000000000000000000000b1a2bc2ec50000000000000000000000000000000000000000000000069e10de76676d08000000