Source Code
Overview
S Balance
More Info
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Tier | 21774065 | 2 days ago | IN | 0 S | 0.00008843 | ||||
Create Tier | 21774065 | 2 days ago | IN | 0 S | 0.00008843 | ||||
Create Tier | 21774063 | 2 days ago | IN | 0 S | 0.00010536 | ||||
Start Epoch | 21711634 | 3 days ago | IN | 0 S | 0.00010971 | ||||
Set Epoch Durati... | 21711620 | 3 days ago | IN | 0 S | 0.00003733 | ||||
Set All | 21710665 | 3 days ago | IN | 0 S | 0.00008921 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Staking
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 1000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "./interfaces/IToken.sol"; import "./interfaces/IReferral.sol"; import "./interfaces/IManager.sol"; contract Staking is ReentrancyGuard { IManager private Manager; IToken private Token; IReferral private Referral; uint256 private depositFee = 0; uint256 public epochDuration = 6 hours; uint256 private genesisEpochTime; bool private isStarted = false; uint256 public totalFueledToken = 0; uint256 public totalTiers; struct Tier { uint256 multiplier; uint256 fullDistributionEpochs; } mapping(uint256 => Tier) public tiers; struct Ticket { uint256 id; uint256 baseAmount; uint256 baseRedeemed; uint256 boostAmount; uint256 boostRedeemed; uint256 creationEpoch; uint256 fullDistributionEpochs; } mapping(address => Ticket[]) public tickets; struct Epoch { uint256 epoch; bool initialized; uint256 totalStaked; } mapping(uint256 => Epoch) public epochs; mapping(address => uint256) public pendingReferralRewards; //--------------------------------------------------// constructor(address _manager) { Manager = IManager(_manager); } //--------------------------------------------------// modifier onlyOwner() { require( msg.sender == Manager.owner(), "Only owner can call this function" ); _; } //--------------------------------------------------// function setFees(uint256 _depositFee) external onlyOwner { require(_depositFee < 100, "Fees too high"); depositFee = _depositFee; } function setEpochDuration(uint256 _epochDuration) external onlyOwner { epochDuration = _epochDuration; } function createTier( uint256 _multiplier, uint256 _epochs ) external onlyOwner { totalTiers++; tiers[totalTiers] = Tier(_multiplier, _epochs); } function setTier( uint256 _id, uint256 _multiplier, uint256 _epochs ) external onlyOwner { tiers[_id].multiplier = _multiplier; tiers[_id].fullDistributionEpochs = _epochs; } function startEpoch() external onlyOwner { require(!isStarted, "Epoch already started"); genesisEpochTime = block.timestamp; epochs[0] = Epoch(0, true, 0); isStarted = true; } function setAll() external onlyOwner { Token = IToken(_getContract("Token")); Referral = IReferral(_getContract("Referral")); } function setManager(address _manager) external onlyOwner { Manager = IManager(_manager); } //--------------------------------------------------// function deposit(uint256 amount, uint256 _tier) external nonReentrant { require(_tier <= totalTiers, "Tier does not exist"); _deposit(msg.sender, amount, _tier); } function claim(uint256 id) external nonReentrant { address sender = msg.sender; uint256 _rewards = _claim(sender, id); Token.mint(sender, _rewards); } function batchClaim(uint256[] memory ids) external nonReentrant { address sender = msg.sender; uint256 _rewards = 0; for (uint256 i = 0; i < ids.length; i++) { _rewards += _claim(sender, ids[i]); } Token.mint(sender, _rewards); } function claimAll() external nonReentrant { address sender = msg.sender; uint256 _rewards = 0; for (uint256 i = 0; i < tickets[sender].length; i++) { _rewards += _claim(sender, i); } Token.mint(sender, _rewards); } function claimReferralRewards() external nonReentrant { address sender = msg.sender; uint256 availableRewards = pendingReferralRewards[sender]; require(availableRewards > 0, "Nothing to claim"); pendingReferralRewards[sender] = 0; Token.mint(sender, availableRewards); } //--------------------------------------------------// function _redeemCalculator( address user, uint256 id ) private view returns (uint256, uint256) { uint256 currentEpoch = _getEpoch(); Ticket memory ticket = tickets[user][id]; uint256 _fullDistributionEpochs = ticket.fullDistributionEpochs; uint256 epochsPassed = currentEpoch - ticket.creationEpoch; epochsPassed = epochsPassed > _fullDistributionEpochs ? _fullDistributionEpochs : epochsPassed; uint256 amountToRedeemWithMultiplier = ((ticket.boostAmount * epochsPassed) / _fullDistributionEpochs) - ticket.boostRedeemed; uint256 amountToRedeem = ((ticket.baseAmount * epochsPassed) / _fullDistributionEpochs) - ticket.baseRedeemed; return (amountToRedeem, amountToRedeemWithMultiplier); } function nextEpochRedeemForUserCalculator( address user, uint256 id ) public view returns (uint256) { Ticket memory ticket = tickets[user][id]; uint256 amountToRedeem = ((ticket.boostAmount * 1) / ticket.fullDistributionEpochs) - ticket.boostRedeemed; return amountToRedeem; } function _getEpoch() internal view returns (uint256) { return (block.timestamp - genesisEpochTime) / epochDuration; } function getNextEpoch() public view returns (uint256) { return genesisEpochTime + (_getEpoch() + 1) * epochDuration; } //--------------------------------------------------// function _deposit(address user, uint256 amount, uint256 _tier) private { require(isStarted, "Epoch not started"); uint256 currentEpoch = _getEpoch(); uint256 amountAfterFee = amount; uint256 fee; unchecked { fee = (amount * depositFee) / 100; amountAfterFee = amount - fee; } totalFueledToken += amountAfterFee; Token.burnFrom(user, amount); if (fee > 0) { Token.transfer(address(Token), fee); } tickets[user].push( Ticket( tickets[user].length, amountAfterFee, 0, (amountAfterFee * tiers[_tier].multiplier) / 1e18, 0, currentEpoch, tiers[_tier].fullDistributionEpochs ) ); } function _claim(address user, uint256 id) private returns (uint256) { (uint256 base, uint256 boost) = _redeemCalculator(user, id); if (base == 0) { return 0; } if (Referral.getReferrer(user) != address(0)) { uint256 referralRewards = (boost * 5) / 100; pendingReferralRewards[ Referral.getReferrer(user) ] += referralRewards; } Ticket storage ticket = tickets[user][id]; ticket.boostRedeemed += boost; ticket.baseRedeemed += base; totalFueledToken -= base; return boost; } function _getContract( string memory contractName ) internal view returns (address) { return Manager.getContract(contractName); } //--------------------------------------------------// function getCurrentEpoch() external view returns (uint256) { return _getEpoch(); } function getUserTotalStaked(address user) external view returns (uint256) { uint256 sumToken = 0; Ticket[] memory ticket = tickets[user]; for (uint256 i = 0; i < tickets[user].length; i++) { sumToken += ticket[i].baseAmount; } return sumToken; } function getTotalRedeemableAmountForUser( address user ) external view returns (uint256) { uint256 sum = 0; for (uint256 i = 0; i < tickets[user].length; i++) { (, uint256 pendingRedeem) = _redeemCalculator(user, i); sum += pendingRedeem; } return sum; } function getNextStakingRewardsForAllTicketsForUser( address user ) external view returns (uint256) { uint256 sum = 0; for (uint256 i = 0; i < tickets[user].length; i++) { sum += nextEpochRedeemForUserCalculator(user, i); } return sum; } function getTotalTicketsForUser( address user ) external view returns (uint256) { return tickets[user].length; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.20; interface IManager { function getContract(string memory name) external view returns (address); function owner() external view returns (address); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.20; interface IReferral { function getUserFromCode(bytes32 code) external view returns (address); function getReferrals(address user) external view returns (address[] memory); function getTimeOfReferrals(address user) external view returns (uint256[] memory); function getReferrer(address user) external view returns (address); function rewardsPerReferral() external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IToken { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); function mint(address to, uint256 value) external; function burnFrom(address from, uint256 value) external; }
{ "optimizer": { "enabled": true, "runs": 1000 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"batchClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferralRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_multiplier","type":"uint256"},{"internalType":"uint256","name":"_epochs","type":"uint256"}],"name":"createTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_tier","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochs","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint256","name":"totalStaked","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNextStakingRewardsForAllTicketsForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalRedeemableAmountForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalTicketsForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"nextEpochRedeemForUserCalculator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingReferralRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_epochDuration","type":"uint256"}],"name":"setEpochDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_depositFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_multiplier","type":"uint256"},{"internalType":"uint256","name":"_epochs","type":"uint256"}],"name":"setTier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tickets","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"baseAmount","type":"uint256"},{"internalType":"uint256","name":"baseRedeemed","type":"uint256"},{"internalType":"uint256","name":"boostAmount","type":"uint256"},{"internalType":"uint256","name":"boostRedeemed","type":"uint256"},{"internalType":"uint256","name":"creationEpoch","type":"uint256"},{"internalType":"uint256","name":"fullDistributionEpochs","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tiers","outputs":[{"internalType":"uint256","name":"multiplier","type":"uint256"},{"internalType":"uint256","name":"fullDistributionEpochs","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFueledToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600060048190556154606005556007805460ff19169055600855348015602957600080fd5b50604051611d81380380611d81833981016040819052604691606f565b6001600081905580546001600160a01b0319166001600160a01b0392909216919091179055609d565b600060208284031215608057600080fd5b81516001600160a01b0381168114609657600080fd5b9392505050565b611cd5806100ac6000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c8063836a0187116100ee578063c6b61e4c11610097578063dae7a13c11610071578063dae7a13c1461039b578063e2bbb158146103e3578063e530d0f7146103f6578063efe97d051461040957600080fd5b8063c6b61e4c14610333578063d0ebdbe714610380578063d1058e591461039357600080fd5b8063a2c8b177116100c8578063a2c8b17714610310578063b97dd9e214610318578063bc2927821461032057600080fd5b8063836a0187146102c15780638ba1ebe2146102d457806394905cc0146102e757600080fd5b80633d18678e1161015b5780634ff0876a116101355780634ff0876a146102895780636e2f169614610292578063715783a1146102a557806379eaaf61146102b857600080fd5b80633d18678e1461025b5780633e7d15c01461026e5780633f2e20261461027657600080fd5b806330024dfe1161018c57806330024dfe146102155780633469336d14610228578063379607f51461024857600080fd5b8063039af9eb146101b357806305eaab4b146101f45780630f823594146101fe575b600080fd5b6101da6101c13660046119a9565b600a602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b6101fc610411565b005b61020760085481565b6040519081526020016101eb565b6101fc6102233660046119a9565b610505565b6102076102363660046119d7565b600d6020526000908152604090205481565b6101fc6102563660046119a9565b6105eb565b6101fc6102693660046119a9565b610678565b6101fc6107ae565b6101fc6102843660046119fb565b610966565b61020760055481565b6102076102a03660046119d7565b610a8b565b6102076102b3366004611a1d565b610ba0565b61020760095481565b6101fc6102cf366004611a49565b610c6a565b6102076102e23660046119d7565b610d63565b6102076102f53660046119d7565b6001600160a01b03166000908152600b602052604090205490565b6101fc610db4565b610207610f97565b6101fc61032e366004611a8b565b610fa6565b6103656103413660046119a9565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016101eb565b6101fc61038e3660046119d7565b61102d565b6101fc61113d565b6103ae6103a9366004611a1d565b6111c2565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101eb565b6101fc6103f13660046119fb565b61121c565b6102076104043660046119d7565b61128f565b6102076112d2565b610419611301565b336000818152600d60205260409020548061047b5760405162461bcd60e51b815260206004820152601060248201527f4e6f7468696e6720746f20636c61696d0000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038281166000818152600d60205260408082209190915560025490516340c10f1960e01b8152600481019290925260248201849052909116906340c10f19906044015b600060405180830381600087803b1580156104df57600080fd5b505af11580156104f3573d6000803e3d6000fd5b5050505050506105036001600055565b565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057c9190611b58565b6001600160a01b0316336001600160a01b0316146105e65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b600555565b6105f3611301565b3360006106008284611344565b6002546040516340c10f1960e01b81526001600160a01b038581166004830152602482018490529293509116906340c10f19906044015b600060405180830381600087803b15801561065157600080fd5b505af1158015610665573d6000803e3d6000fd5b5050505050506106756001600055565b50565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190611b58565b6001600160a01b0316336001600160a01b0316146107595760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b606481106107a95760405162461bcd60e51b815260206004820152600d60248201527f4665657320746f6f2068696768000000000000000000000000000000000000006044820152606401610472565b600455565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108259190611b58565b6001600160a01b0316336001600160a01b03161461088f5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6108cd6040518060400160405280600581526020017f546f6b656e00000000000000000000000000000000000000000000000000000081525061153f565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905560408051808201909152600881527f526566657272616c00000000000000000000000000000000000000000000000060208201526109379061153f565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611b58565b6001600160a01b0316336001600160a01b031614610a475760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b60098054906000610a5783611b8b565b909155505060408051808201825292835260208084019283526009546000908152600a909152209151825551600190910155565b6001600160a01b0381166000908152600b60209081526040808320805482518185028101850190935280835284938493929190849084015b82821015610b3b57838290600052602060002090600702016040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505081526020019060010190610ac3565b50505050905060005b6001600160a01b0385166000908152600b6020526040902054811015610b9757818181518110610b7657610b76611ba4565b60200260200101516020015183610b8d9190611bba565b9250600101610b44565b50909392505050565b6001600160a01b0382166000908152600b60205260408120805482919084908110610bcd57610bcd611ba4565b90600052602060002090600702016040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050600081608001518260c0015183606001516001610c4b9190611bcd565b610c559190611bfa565b610c5f9190611c1c565b925050505b92915050565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611b58565b6001600160a01b0316336001600160a01b031614610d4b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6000928352600a602052604090922090815560010155565b600080805b6001600160a01b0384166000908152600b6020526040902054811015610dad576000610d9485836115ca565b9150610da290508184611bba565b925050600101610d68565b5092915050565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190611b58565b6001600160a01b0316336001600160a01b031614610e955760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b60075460ff1615610ee85760405162461bcd60e51b815260206004820152601560248201527f45706f636820616c7265616479207374617274656400000000000000000000006044820152606401610472565b4260065560408051606081018252600080825260016020808401828152948401838152928052600c905291517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e85591517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e9805491151560ff1992831617905591517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116ea5560078054909216179055565b6000610fa16116f5565b905090565b610fae611301565b336000805b8351811015610ff357610fdf83858381518110610fd257610fd2611ba4565b6020026020010151611344565b610fe99083611bba565b9150600101610fb3565b506002546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610637565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190611b58565b6001600160a01b0316336001600160a01b03161461110e5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611145611301565b336000805b6001600160a01b0383166000908152600b6020526040902054811015611188576111748382611344565b61117e9083611bba565b915060010161114a565b506002546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044016104c5565b600b60205281600052604060002081815481106111de57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601549497509295509093909287565b611224611301565b6009548111156112765760405162461bcd60e51b815260206004820152601360248201527f5469657220646f6573206e6f74206578697374000000000000000000000000006044820152606401610472565b611281338383611712565b61128b6001600055565b5050565b600080805b6001600160a01b0384166000908152600b6020526040902054811015610dad576112be8482610ba0565b6112c89083611bba565b9150600101611294565b60006005546112df6116f5565b6112ea906001611bba565b6112f49190611bcd565b600654610fa19190611bba565b60026000540361133d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b600080600061135385856115ca565b915091508160000361136a57600092505050610c64565b600354604051634a9fefc760e01b81526001600160a01b0387811660048301526000921690634a9fefc790602401602060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d99190611b58565b6001600160a01b0316146114ae57600060646113f6836005611bcd565b6114009190611bfa565b600354604051634a9fefc760e01b81526001600160a01b0389811660048301529293508392600d92600092911690634a9fefc790602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190611b58565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546114a79190611bba565b9091555050505b6001600160a01b0385166000908152600b602052604081208054869081106114d8576114d8611ba4565b90600052602060002090600702019050818160040160008282546114fc9190611bba565b92505081905550828160020160008282546115179190611bba565b9250508190555082600860008282546115309190611c1c565b90915550919695505050505050565b6001546040517f358177730000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690633581777390611589908590600401611c2f565b602060405180830381865afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c649190611b58565b60008060006115d76116f5565b6001600160a01b0386166000908152600b60205260408120805492935090918690811061160657611606611ba4565b600091825260208083206040805160e0810182526007909402909101805484526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a0830181905260069091015460c083018190529193509091906116789085611c1c565b90508181116116875780611689565b815b905060008360800151838386606001516116a39190611bcd565b6116ad9190611bfa565b6116b79190611c1c565b905060008460400151848487602001516116d19190611bcd565b6116db9190611bfa565b6116e59190611c1c565b9a91995090975050505050505050565b6000600554600654426117089190611c1c565b610fa19190611bfa565b60075460ff166117645760405162461bcd60e51b815260206004820152601160248201527f45706f6368206e6f7420737461727465640000000000000000000000000000006044820152606401610472565b600061176e6116f5565b905060008390506000606460045486028161178b5761178b611be4565b049050808503915081600860008282546117a59190611bba565b90915550506002546040517f79cc67900000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015260248201889052909116906379cc679090604401600060405180830381600087803b15801561181157600080fd5b505af1158015611825573d6000803e3d6000fd5b5050505060008111156118c3576002546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201819052602482018390529063a9059cbb906044016020604051808303816000875af115801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7d565b505b6001600160a01b0386166000908152600b60209081526040808320815160e08101835281548152808401879052808301859052888552600a9093529220546060820190670de0b6b3a76400009061191a9087611bcd565b6119249190611bfa565b815260006020808301829052604080840198909852978152600a885286812060019081015460609384015284548082018655948252908890208351600790950201938455968201519683019690965593840151600282015593830151600385015550506080810151600483015560a0810151600583015560c001516006909101555050565b6000602082840312156119bb57600080fd5b5035919050565b6001600160a01b038116811461067557600080fd5b6000602082840312156119e957600080fd5b81356119f4816119c2565b9392505050565b60008060408385031215611a0e57600080fd5b50508035926020909101359150565b60008060408385031215611a3057600080fd5b8235611a3b816119c2565b946020939093013593505050565b600080600060608486031215611a5e57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a9d57600080fd5b813567ffffffffffffffff811115611ab457600080fd5b8201601f81018413611ac557600080fd5b803567ffffffffffffffff811115611adf57611adf611a75565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611b0c57611b0c611a75565b604052918252602081840181019290810187841115611b2a57600080fd5b6020850194505b83851015611b4d57843580825260209586019590935001611b31565b509695505050505050565b600060208284031215611b6a57600080fd5b81516119f4816119c2565b634e487b7160e01b600052601160045260246000fd5b600060018201611b9d57611b9d611b75565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c6457610c64611b75565b8082028115828204841417610c6457610c64611b75565b634e487b7160e01b600052601260045260246000fd5b600082611c1757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610c6457610c64611b75565b602081526000825180602084015260005b81811015611c5d5760208186018101516040868401015201611c40565b506000604082850101526040601f19601f83011684010191505092915050565b600060208284031215611c8f57600080fd5b815180151581146119f457600080fdfea26469706673582212207c6c00ebe0f2196b5d0108a778530f91a3c7e2bcf6111beaca201d82a7bd47fe64736f6c634300081a00330000000000000000000000002dbdf9a4da27a58a5467e1827336ba7a2d2f85e4
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c8063836a0187116100ee578063c6b61e4c11610097578063dae7a13c11610071578063dae7a13c1461039b578063e2bbb158146103e3578063e530d0f7146103f6578063efe97d051461040957600080fd5b8063c6b61e4c14610333578063d0ebdbe714610380578063d1058e591461039357600080fd5b8063a2c8b177116100c8578063a2c8b17714610310578063b97dd9e214610318578063bc2927821461032057600080fd5b8063836a0187146102c15780638ba1ebe2146102d457806394905cc0146102e757600080fd5b80633d18678e1161015b5780634ff0876a116101355780634ff0876a146102895780636e2f169614610292578063715783a1146102a557806379eaaf61146102b857600080fd5b80633d18678e1461025b5780633e7d15c01461026e5780633f2e20261461027657600080fd5b806330024dfe1161018c57806330024dfe146102155780633469336d14610228578063379607f51461024857600080fd5b8063039af9eb146101b357806305eaab4b146101f45780630f823594146101fe575b600080fd5b6101da6101c13660046119a9565b600a602052600090815260409020805460019091015482565b604080519283526020830191909152015b60405180910390f35b6101fc610411565b005b61020760085481565b6040519081526020016101eb565b6101fc6102233660046119a9565b610505565b6102076102363660046119d7565b600d6020526000908152604090205481565b6101fc6102563660046119a9565b6105eb565b6101fc6102693660046119a9565b610678565b6101fc6107ae565b6101fc6102843660046119fb565b610966565b61020760055481565b6102076102a03660046119d7565b610a8b565b6102076102b3366004611a1d565b610ba0565b61020760095481565b6101fc6102cf366004611a49565b610c6a565b6102076102e23660046119d7565b610d63565b6102076102f53660046119d7565b6001600160a01b03166000908152600b602052604090205490565b6101fc610db4565b610207610f97565b6101fc61032e366004611a8b565b610fa6565b6103656103413660046119a9565b600c60205260009081526040902080546001820154600290920154909160ff169083565b604080519384529115156020840152908201526060016101eb565b6101fc61038e3660046119d7565b61102d565b6101fc61113d565b6103ae6103a9366004611a1d565b6111c2565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101eb565b6101fc6103f13660046119fb565b61121c565b6102076104043660046119d7565b61128f565b6102076112d2565b610419611301565b336000818152600d60205260409020548061047b5760405162461bcd60e51b815260206004820152601060248201527f4e6f7468696e6720746f20636c61696d0000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038281166000818152600d60205260408082209190915560025490516340c10f1960e01b8152600481019290925260248201849052909116906340c10f19906044015b600060405180830381600087803b1580156104df57600080fd5b505af11580156104f3573d6000803e3d6000fd5b5050505050506105036001600055565b565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057c9190611b58565b6001600160a01b0316336001600160a01b0316146105e65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b600555565b6105f3611301565b3360006106008284611344565b6002546040516340c10f1960e01b81526001600160a01b038581166004830152602482018490529293509116906340c10f19906044015b600060405180830381600087803b15801561065157600080fd5b505af1158015610665573d6000803e3d6000fd5b5050505050506106756001600055565b50565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ef9190611b58565b6001600160a01b0316336001600160a01b0316146107595760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b606481106107a95760405162461bcd60e51b815260206004820152600d60248201527f4665657320746f6f2068696768000000000000000000000000000000000000006044820152606401610472565b600455565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108259190611b58565b6001600160a01b0316336001600160a01b03161461088f5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6108cd6040518060400160405280600581526020017f546f6b656e00000000000000000000000000000000000000000000000000000081525061153f565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905560408051808201909152600881527f526566657272616c00000000000000000000000000000000000000000000000060208201526109379061153f565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dd9190611b58565b6001600160a01b0316336001600160a01b031614610a475760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b60098054906000610a5783611b8b565b909155505060408051808201825292835260208084019283526009546000908152600a909152209151825551600190910155565b6001600160a01b0381166000908152600b60209081526040808320805482518185028101850190935280835284938493929190849084015b82821015610b3b57838290600052602060002090600702016040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505081526020019060010190610ac3565b50505050905060005b6001600160a01b0385166000908152600b6020526040902054811015610b9757818181518110610b7657610b76611ba4565b60200260200101516020015183610b8d9190611bba565b9250600101610b44565b50909392505050565b6001600160a01b0382166000908152600b60205260408120805482919084908110610bcd57610bcd611ba4565b90600052602060002090600702016040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250509050600081608001518260c0015183606001516001610c4b9190611bcd565b610c559190611bfa565b610c5f9190611c1c565b925050505b92915050565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611b58565b6001600160a01b0316336001600160a01b031614610d4b5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6000928352600a602052604090922090815560010155565b600080805b6001600160a01b0384166000908152600b6020526040902054811015610dad576000610d9485836115ca565b9150610da290508184611bba565b925050600101610d68565b5092915050565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b9190611b58565b6001600160a01b0316336001600160a01b031614610e955760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b60075460ff1615610ee85760405162461bcd60e51b815260206004820152601560248201527f45706f636820616c7265616479207374617274656400000000000000000000006044820152606401610472565b4260065560408051606081018252600080825260016020808401828152948401838152928052600c905291517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e85591517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e9805491151560ff1992831617905591517f13649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116ea5560078054909216179055565b6000610fa16116f5565b905090565b610fae611301565b336000805b8351811015610ff357610fdf83858381518110610fd257610fd2611ba4565b6020026020010151611344565b610fe99083611bba565b9150600101610fb3565b506002546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610637565b600160009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190611b58565b6001600160a01b0316336001600160a01b03161461110e5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6044820152603760f91b6064820152608401610472565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b611145611301565b336000805b6001600160a01b0383166000908152600b6020526040902054811015611188576111748382611344565b61117e9083611bba565b915060010161114a565b506002546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f19906044016104c5565b600b60205281600052604060002081815481106111de57600080fd5b600091825260209091206007909102018054600182015460028301546003840154600485015460058601546006909601549497509295509093909287565b611224611301565b6009548111156112765760405162461bcd60e51b815260206004820152601360248201527f5469657220646f6573206e6f74206578697374000000000000000000000000006044820152606401610472565b611281338383611712565b61128b6001600055565b5050565b600080805b6001600160a01b0384166000908152600b6020526040902054811015610dad576112be8482610ba0565b6112c89083611bba565b9150600101611294565b60006005546112df6116f5565b6112ea906001611bba565b6112f49190611bcd565b600654610fa19190611bba565b60026000540361133d576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b600080600061135385856115ca565b915091508160000361136a57600092505050610c64565b600354604051634a9fefc760e01b81526001600160a01b0387811660048301526000921690634a9fefc790602401602060405180830381865afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d99190611b58565b6001600160a01b0316146114ae57600060646113f6836005611bcd565b6114009190611bfa565b600354604051634a9fefc760e01b81526001600160a01b0389811660048301529293508392600d92600092911690634a9fefc790602401602060405180830381865afa158015611454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114789190611b58565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546114a79190611bba565b9091555050505b6001600160a01b0385166000908152600b602052604081208054869081106114d8576114d8611ba4565b90600052602060002090600702019050818160040160008282546114fc9190611bba565b92505081905550828160020160008282546115179190611bba565b9250508190555082600860008282546115309190611c1c565b90915550919695505050505050565b6001546040517f358177730000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690633581777390611589908590600401611c2f565b602060405180830381865afa1580156115a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c649190611b58565b60008060006115d76116f5565b6001600160a01b0386166000908152600b60205260408120805492935090918690811061160657611606611ba4565b600091825260208083206040805160e0810182526007909402909101805484526001810154928401929092526002820154908301526003810154606083015260048101546080830152600581015460a0830181905260069091015460c083018190529193509091906116789085611c1c565b90508181116116875780611689565b815b905060008360800151838386606001516116a39190611bcd565b6116ad9190611bfa565b6116b79190611c1c565b905060008460400151848487602001516116d19190611bcd565b6116db9190611bfa565b6116e59190611c1c565b9a91995090975050505050505050565b6000600554600654426117089190611c1c565b610fa19190611bfa565b60075460ff166117645760405162461bcd60e51b815260206004820152601160248201527f45706f6368206e6f7420737461727465640000000000000000000000000000006044820152606401610472565b600061176e6116f5565b905060008390506000606460045486028161178b5761178b611be4565b049050808503915081600860008282546117a59190611bba565b90915550506002546040517f79cc67900000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015260248201889052909116906379cc679090604401600060405180830381600087803b15801561181157600080fd5b505af1158015611825573d6000803e3d6000fd5b5050505060008111156118c3576002546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201819052602482018390529063a9059cbb906044016020604051808303816000875af115801561189d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c19190611c7d565b505b6001600160a01b0386166000908152600b60209081526040808320815160e08101835281548152808401879052808301859052888552600a9093529220546060820190670de0b6b3a76400009061191a9087611bcd565b6119249190611bfa565b815260006020808301829052604080840198909852978152600a885286812060019081015460609384015284548082018655948252908890208351600790950201938455968201519683019690965593840151600282015593830151600385015550506080810151600483015560a0810151600583015560c001516006909101555050565b6000602082840312156119bb57600080fd5b5035919050565b6001600160a01b038116811461067557600080fd5b6000602082840312156119e957600080fd5b81356119f4816119c2565b9392505050565b60008060408385031215611a0e57600080fd5b50508035926020909101359150565b60008060408385031215611a3057600080fd5b8235611a3b816119c2565b946020939093013593505050565b600080600060608486031215611a5e57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611a9d57600080fd5b813567ffffffffffffffff811115611ab457600080fd5b8201601f81018413611ac557600080fd5b803567ffffffffffffffff811115611adf57611adf611a75565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611b0c57611b0c611a75565b604052918252602081840181019290810187841115611b2a57600080fd5b6020850194505b83851015611b4d57843580825260209586019590935001611b31565b509695505050505050565b600060208284031215611b6a57600080fd5b81516119f4816119c2565b634e487b7160e01b600052601160045260246000fd5b600060018201611b9d57611b9d611b75565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820180821115610c6457610c64611b75565b8082028115828204841417610c6457610c64611b75565b634e487b7160e01b600052601260045260246000fd5b600082611c1757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610c6457610c64611b75565b602081526000825180602084015260005b81811015611c5d5760208186018101516040868401015201611c40565b506000604082850101526040601f19601f83011684010191505092915050565b600060208284031215611c8f57600080fd5b815180151581146119f457600080fdfea26469706673582212207c6c00ebe0f2196b5d0108a778530f91a3c7e2bcf6111beaca201d82a7bd47fe64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002dbdf9a4da27a58a5467e1827336ba7a2d2f85e4
-----Decoded View---------------
Arg [0] : _manager (address): 0x2DBdF9A4da27a58a5467E1827336ba7a2D2F85e4
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002dbdf9a4da27a58a5467e1827336ba7a2d2f85e4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.