S Price: $0.736984 (+9.51%)

Token

SonicSuperRain (SSR)

Overview

Max Total Supply

100,000,000 SSR

Holders

3

Total Transfers

-

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SonicSuperRain

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
paris EvmVersion
File 1 of 1 : SonicSuperRain.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// Interface definitions
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

interface IUniswapRouter {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    
    // Add ETH swap function
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/**
 * @title RainToken
 * @dev A simplified ERC20 token with reflection rewards
 */
contract SonicSuperRain {
    // Token setup
    string private _name = "SonicSuperRain";
    string private _symbol = "SSR";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply;
    
    // Reward token and router addresses
    address public REWARD_TOKEN;
    address constant private ROUTER = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; // ROUTER
    address public LP_PAIR;
    
    // Ownership
    address private _owner;
    
    // Balances and allowances
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Fee configuration
    uint256 public taxPercentage = 5; // 5% default tax
    uint256 public swapThreshold;
    
    // Reward distribution
    uint256 public distributionInterval = 300; // 5 minutes (in seconds)
    uint256 public batchSize = 50;
    uint256 public lastProcessedTime;
    uint256 public currentIndex;
    
    // Holder management
    address[] private holders;
    mapping(address => uint256) public holderIndexes;
    
    struct HolderInfo {
        uint256 amount;
        uint256 pendingRewards;
        uint256 totalExcluded;
    }
    
    mapping(address => HolderInfo) public holderInfo;
    
    // Rewards accounting
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public dividendsPerShare;
    
    // Special addresses
    mapping(address => bool) public excluded;
    mapping(address => bool) public exempt;
    
    // Control flags
    bool private inSwap;
    bool public tradingEnabled;
    
    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event SwapAndDistribute(uint256 tokenAmount, uint256 rewardAmount);
    event Excluded(address indexed account, bool status);
    event TaxUpdated(uint256 newTaxPercentage);
    event IntervalUpdated(uint256 newDistributionInterval);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event RewardsProcessed(uint256 holderCount);
    event TotalSharesRecalculated(uint256 previousValue, uint256 newValue);
    
    // Modifiers
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Caller is not the owner");
        _;
    }
    
    // Constructor
    constructor() {
        _owner = msg.sender;
        
        // Initial supply
        _totalSupply = 100000000 * 10**_decimals;
        _balances[msg.sender] = _totalSupply;
        
        // Set default parameters
        swapThreshold = _totalSupply * 5 / 10000; // 0.05%
        
        // Set initial reward token address
        REWARD_TOKEN = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; // WRAPPED_SONIC
        
        // Add owner to holders array
        _addHolder(_owner, _balances[_owner]);
        
        // Setup initial shares - FIXED: Don't set totalShares here, it will be set in _addHolder
        // totalShares = _totalSupply;
        
        // Approve router for future swaps
        _approve(address(this), ROUTER, _totalSupply);
        
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    
    // External functions
    
    function setRewardToken(address newRewardToken) external onlyOwner {
        require(newRewardToken != address(0), "Reward token cannot be zero address");
        REWARD_TOKEN = newRewardToken;
    }
    
    function setLPPair(address newPair) external onlyOwner {
        require(newPair != address(0), "LP pair cannot be zero address");
        LP_PAIR = newPair;
    }
    
    function setTaxPercentage(uint256 newTaxPercentage) external onlyOwner {
        taxPercentage = newTaxPercentage;
        emit TaxUpdated(newTaxPercentage);
    }
    
    function setDistributionInterval(uint256 newInterval) external onlyOwner {
        require(newInterval >= 60, "Interval must be at least 60 seconds");
        distributionInterval = newInterval;
        emit IntervalUpdated(newInterval);
    }
    
    function setBatchSize(uint256 newBatchSize) external onlyOwner {
        require(newBatchSize >= 5 && newBatchSize <= 100, "Batch size must be between 5 and 100");
        batchSize = newBatchSize;
    }
    
    function setSwapThreshold(uint256 newThreshold) external onlyOwner {
        require(newThreshold > 0, "Threshold must be greater than 0");
        swapThreshold = newThreshold;
    }
    
    function setExcluded(address account, bool status) external onlyOwner {
        if (excluded[account] != status) {
            excluded[account] = status;
            if (status) {
                // If excluding an address, remove it from holders
                if (holderInfo[account].amount > 0) {
                    _removeHolder(account);
                }
            } else {
                // If including an address, add it to holders
                _setShare(account, balanceOf(account));
            }
        }
        emit Excluded(account, status);
    }
    
    function setExempt(address account, bool status) external onlyOwner {
        exempt[account] = status;
    }
    
    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
    }
    
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "New owner cannot be zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    /**
     * @dev Manually swap a specified amount of tokens for rewards
     * @param amount Amount of tokens to swap (0 for custom calculation based on contract balance)
     * @return swapped Amount of tokens that were actually swapped
     * @return received Amount of reward tokens received from the swap
     */
    function manualSwap(uint256 amount) external onlyOwner returns (uint256 swapped, uint256 received) {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance > 0, "No tokens to swap");
        
        // Determine swap amount based on parameters and contract balance
        uint256 swapAmount;
        if (amount > 0 && amount <= contractBalance) {
            // Use specified amount
            swapAmount = amount;
        } else if (swapThreshold > 0 && contractBalance >= swapThreshold) {
            // Use threshold amount
            swapAmount = swapThreshold;
        } else {
            // Use entire balance
            swapAmount = contractBalance;
        }
        
        // Execute the swap and track results
        uint256 receivedAmount = _swapTokensForRewards(swapAmount);
        
        return (swapAmount, receivedAmount);
    }
    
    /**
     * @dev Returns the contract's current balance of RAIN tokens available for swapping
     */
    function getSwappableBalance() external view returns (uint256) {
        return balanceOf(address(this));
    }
    
    /**
     * @dev Returns the contract's current balance of native SONIC available for distribution
     */
    function getRewardBalance() external view returns (uint256) {
        return address(this).balance;
    }
    
    function manualDistributeRewards(uint256 batchCount) external returns (uint256, uint256) {
        require(msg.sender == _owner, "Only owner can distribute rewards");
        
        uint256 batchToProcess = batchCount > 0 ? batchCount : batchSize;
        
        if (currentIndex + batchToProcess > holders.length) {
            batchToProcess = holders.length - currentIndex;
        }
        
        if (batchToProcess == 0) {
            currentIndex = 0;
            return (0, 0);
        }
        
        uint256 startIndex = currentIndex;
        
        for (uint256 i = 0; i < batchToProcess; i++) {
            if (currentIndex < holders.length) {
                _distributeRewards(holders[currentIndex]);
                currentIndex++;
            }
        }
        
        uint256 processedCount = currentIndex - startIndex;
        
        if (currentIndex >= holders.length) {
            currentIndex = 0;
            lastProcessedTime = block.timestamp;
            emit RewardsProcessed(holders.length);
        }
        
        return (processedCount, currentIndex);
    }
    
    /**
     * @dev Recalculates totalShares based on actual holder balances to fix accounting issues
     * @return previousTotalShares The total shares value before recalculation
     * @return newTotalShares The corrected total shares value after recalculation
     */
    function recalculateTotalShares() external onlyOwner returns (uint256 previousTotalShares, uint256 newTotalShares) {
        // Store previous value for reporting
        previousTotalShares = totalShares;
        
        // Reset total shares
        totalShares = 0;
        
        // Iterate through all holders and sum their actual balances
        for (uint256 i = 0; i < holders.length; i++) {
            address holder = holders[i];
            uint256 holderBalance = _balances[holder];
            
            // Only count meaningful balances (same threshold as in _setShare)
            if (holderBalance >= 1 * 10**_decimals) {
                // Update the holder info with their actual balance
                holderInfo[holder].amount = holderBalance;
                
                // Add to the total shares
                totalShares += holderBalance;
            } else if (holderBalance == 0) {
                // Handle zero balances - these shouldn't be in the holders array
                // We'll address this in the next loop to avoid index shifts during iteration
            }
        }
        
        // Second pass to clean up holders with zero balances
        // We iterate backwards to avoid index shifting problems
        for (int256 i = int256(holders.length) - 1; i >= 0; i--) {
            address holder = holders[uint256(i)];
            if (_balances[holder] < 1 * 10**_decimals) {
                // Remove this holder using the existing function
                _removeHolder(holder);
            }
        }
        
        // Return the new total shares value
        newTotalShares = totalShares;
        
        // Re-calculate dividendsPerShare based on the new totalShares
        if (totalShares > 0 && totalDividends > 0) {
            dividendsPerShare = totalDividends * 10000 / totalShares;
        }
        
        // Emit an event for transparency
        emit TotalSharesRecalculated(previousTotalShares, newTotalShares);
    }
    
    // ERC20 Standard Functions
    
    function name() public view returns (string memory) {
        return _name;
    }
    
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function allowance(address owner_, address spender) public view returns (uint256) {
        return _allowances[owner_][spender];
    }
    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        
        _transfer(sender, recipient, amount);
        return true;
    }
    
    // Information functions
    
    function owner() public view returns (address) {
        return _owner;
    }
    
    function getHolderCount() public view returns (uint256) {
        return holders.length;
    }
    
    function isRewardsReady() public view returns (bool) {
        return block.timestamp >= lastProcessedTime + distributionInterval;
    }
    
    function getTimeUntilRewards() public view returns (uint256) {
        if (isRewardsReady()) return 0;
        return lastProcessedTime + distributionInterval - block.timestamp;
    }
    
    function getUnpaidRewards(address account) public view returns (uint256) {
        if (holderInfo[account].amount == 0) return 0;
        
        uint256 earnedRewards = getSharesPercentage(account);
        uint256 alreadyPaid = holderInfo[account].totalExcluded;
        
        if (earnedRewards <= alreadyPaid) return 0;
        return earnedRewards - alreadyPaid;
    }
    
    function getDistributionStatus() public view returns (uint256, uint256, uint256) {
        if (holders.length == 0) return (0, 0, 100);
        
        uint256 percentage = currentIndex * 100 / holders.length;
        return (holders.length, currentIndex, percentage);
    }
    
    // Internal functions
    
    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        // Check if trading is enabled when interacting with LP
        if (!tradingEnabled && (from == LP_PAIR || to == LP_PAIR)) {
            require(from == _owner || to == _owner, "Trading not enabled yet");
        }
        
        // Auto-liquidity and swap
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if (canSwap && !inSwap && from != LP_PAIR && from != _owner && to != _owner) {
            uint256 swapAmount = amount > swapThreshold ? swapThreshold : amount;
            _swapTokensForRewards(swapAmount);
        }
        
        // Fee system
        bool takeFee = !exempt[from] && !exempt[to];
        
        uint256 fees = 0;
        if (takeFee) {
            if (from == LP_PAIR || to == LP_PAIR) {
                fees = amount * taxPercentage / 100;
            }
            if (fees > 0) {
                _takeFee(from, address(this), fees);
                amount -= fees;
            }
        }
        
        // Get sender's previous balance for share calculation
        uint256 fromPreviousBalance = _balances[from];
        
        // Get recipient's previous balance for share calculation
        uint256 toPreviousBalance = _balances[to];
        
        // Standard transfer
        _balances[from] -= amount;
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        
        // Update holder tracking - FIXED: Use actual balances after transfer
        if (!excluded[from] && from != LP_PAIR) {
            // Use current balance after the transfer
            _setShare(from, _balances[from]);
        }
        
        if (!excluded[to] && to != LP_PAIR) {
            // Use current balance after the transfer
            _setShare(to, _balances[to]);
        }
    }
    
    function _approve(address owner_, address spender, uint256 amount) internal {
        require(owner_ != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        
        _allowances[owner_][spender] = amount;
        emit Approval(owner_, spender, amount);
    }
    
    function _takeFee(address from, address to, uint256 amount) internal {
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }
    
    // UPDATED: Swap function that correctly uses swapExactTokensForETHSupportingFeeOnTransferTokens
    function _swapTokensForRewards(uint256 amount) internal lockTheSwap returns (uint256) {
        // Setup swap path
        address[] memory path = new address[](2);
        path[0] = address(this);      // SUPERRAIN token address
        path[1] = REWARD_TOKEN;       // WRAPPED_SONIC address
        
        // Approve router
        _approve(address(this), ROUTER, amount);
        
        // Get initial balance of native SONIC
        uint256 initialBalance = address(this).balance;
        
        // Swap tokens for native SONIC
        IUniswapRouter(ROUTER).swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp + 1200 // 20 minute deadline
        );
        
        // Calculate received native SONIC
        uint256 newBalance = address(this).balance;
        uint256 receivedSonic = newBalance - initialBalance;
        
        if (receivedSonic > 0 && totalShares > 0) {
            // Update dividends per share
            totalDividends += receivedSonic;
            dividendsPerShare = totalDividends * 10000 / totalShares;
            
            emit SwapAndDistribute(amount, receivedSonic);
        }
        
        return receivedSonic;
    }
    
    function processRewards() public {
        uint256 gas = 300000;
        
        uint256 iterations = 0;
        while (gas > 0 && iterations < batchSize && currentIndex < holders.length) {
            uint256 gasUsed = gasleft();
            _distributeRewards(holders[currentIndex]);
            
            gas -= (gasUsed - gasleft());
            currentIndex++;
            iterations++;
        }
        
        if (currentIndex >= holders.length) {
            currentIndex = 0;
        }
    }
    
    // UPDATED: Distribution function that now sends native SONIC instead of tokens
    function _distributeRewards(address holder) internal {
        if (holderInfo[holder].amount == 0) return;
        
        uint256 amount = getUnpaidEarnings(holder);
        if (amount > 0) {
            uint256 contractBalance = address(this).balance;
            
            if (amount <= contractBalance) {
                holderInfo[holder].totalExcluded = getSharesPercentage(holder);
                holderInfo[holder].pendingRewards = 0;
                
                // Send native SONIC instead of tokens
                (bool success, ) = holder.call{value: amount}("");
                require(success, "SONIC transfer failed");
            }
        }
    }
    
    function getSharesPercentage(address account) internal view returns (uint256) {
        if (totalShares == 0) return 0;
        
        return dividendsPerShare * holderInfo[account].amount / 10000;
    }
    
    function getUnpaidEarnings(address account) internal view returns (uint256) {
        if (holderInfo[account].amount == 0) return 0;
        
        uint256 earnedDividends = getSharesPercentage(account);
        uint256 alreadyPaid = holderInfo[account].totalExcluded;
        
        if (earnedDividends <= alreadyPaid) return 0;
        return earnedDividends - alreadyPaid;
    }
    
    // FIXED: Completely revised _setShare to correctly handle share accounting
    function _setShare(address holder, uint256 amount) internal {
        // First, determine if this is a meaningful amount (at least 1 token)
        bool isMeaningful = amount >= 1 * 10**_decimals;
        
        // Case 1: Holder already has shares
        if (holderInfo[holder].amount > 0) {
            uint256 oldAmount = holderInfo[holder].amount;
            
            // Case 1A: Reducing to zero or below minimum
            if (!isMeaningful) {
                // Remove holder from tracking and adjust totalShares
                totalShares -= oldAmount;
                _removeHolder(holder);
            } 
            // Case 1B: Balance changed but still meaningful
            else if (oldAmount != amount) {
                // Adjust totalShares by the difference
                totalShares = totalShares - oldAmount + amount;
                
                // Update holder's record
                holderInfo[holder].amount = amount;
                
                // Calculate new pending rewards without changing the total excluded 
                // (which is handled during distribution)
            }
            // If oldAmount == amount, nothing changes
        }
        // Case 2: New holder or holder with zero shares
        else if (isMeaningful) {
            // Add new holder to tracking
            _addHolder(holder, amount);
            
            // Update holder's record
            holderInfo[holder].amount = amount;
            
            // Add to totalShares
            totalShares += amount;
        }
        // If not meaningful and holder doesn't exist, do nothing
    }
    
    function _addHolder(address holder, uint256 amount) internal {
        // Verify holder isn't already in the array
        if (holderIndexes[holder] > 0 || (holders.length > 0 && holders[0] == holder)) {
            return;
        }
        
        // Add holder to tracking
        holders.push(holder);
        holderIndexes[holder] = holders.length - 1;
        
        // Initialize holder info
        holderInfo[holder].totalExcluded = getSharesPercentage(holder);
    }
    
    function _removeHolder(address holder) internal {
        // Make sure holder exists
        if (holders.length == 0 || 
            (holderIndexes[holder] == 0 && holders[0] != holder) || 
            holderIndexes[holder] >= holders.length) {
            return;
        }
        
        address lastHolder = holders[holders.length - 1];
        uint256 holderIndex = holderIndexes[holder];
        
        // Replace the removed holder with the last one
        holders[holderIndex] = lastHolder;
        holderIndexes[lastHolder] = holderIndex;
        
        // Remove the last element
        holders.pop();
        delete holderIndexes[holder];
        
        // Clear holder info (totalShares is already adjusted in _setShare)
        delete holderInfo[holder];
    }
    
    // Rescue functions
    
    function rescueToken(address token, uint256 amount) external onlyOwner {
        IERC20(token).transfer(_owner, amount);
    }
    
    function withdrawETH() external onlyOwner {
        (bool success,) = _owner.call{value: address(this).balance}("");
        require(success, "ETH withdrawal failed");
    }
    
    // Receive function to accept ETH (native SONIC)
    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"Excluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDistributionInterval","type":"uint256"}],"name":"IntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"holderCount","type":"uint256"}],"name":"RewardsProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"SwapAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previousValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"TotalSharesRecalculated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LP_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwappableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUnpaidRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndexes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchCount","type":"uint256"}],"name":"manualDistributeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[{"internalType":"uint256","name":"swapped","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recalculateTotalShares","outputs":[{"internalType":"uint256","name":"previousTotalShares","type":"uint256"},{"internalType":"uint256","name":"newTotalShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBatchSize","type":"uint256"}],"name":"setBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"setDistributionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052346102a2576100146000546102a7565b601f8111610259575b507f536f6e696353757065725261696e00000000000000000000000000000000001c60005560015461004e906102a7565b601f811161020f575b5060066229a9a960e91b016001556005600881905561012c600a556032600b5580546001600160a01b03199081163390811783556a52b7d2dcc80cd2e40000006002819055600091825260066020526040822055690a968163f0a57b4000006009556003805490921673039e2fb66102314ce7b64ce5ce3e5183bc94ad381790915590546001600160a01b0316908190526100f1906102e1565b60025430156101a85730600052600760205260406000207395a7e403d7cf20f675ff9273d66e94d35ba49fa3600052602052806040600020557395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518281527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a360405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a360405161259290816104528239f35b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b6001600052601f0160051c7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6908101905b81811061024d5750610057565b60008155600101610240565b60008052601f0160051c7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563908101905b818110610296575061001d565b60008155600101610289565b600080fd5b90600182811c921680156102d7575b60208310146102c157565b634e487b7160e01b600052602260045260246000fd5b91607f16916102b6565b6001600160a01b0381166000818152600f6020526040902054909190158015906103d5575b6103d157600e54680100000000000000008110156103bb5760018101600e556000600e548210156103a757600e908190526000805160206129e48339815191529190910180546001600160a01b03191684179055546000919060001981019081116103935791610386604092600294868452600f60205284842055610410565b9381526010602052200155565b634e487b7160e01b83526011600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b600052604160045260246000fd5b5050565b50600e541515801561030657506000600e54156103a757600e90526000805160206129e4833981519152546001600160a01b03168214610306565b6011541561044b576013549060018060a01b03166000526010602052604060002054908181029181830414901517156101f957612710900490565b5060009056fe608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b667146114ad5750806306fdde03146113f2578063095ea7b3146113cc57806318160ddd146113ae57806323b872dd146112ba57806326987b601461129c5780632836be24146111ae578063313ce5671461119257806333f3d628146110d4578063380b9dc014610f015780633a98ef3914610ee3578063429cead114610ea45780634ada218b14610e7e578063576f35e314610dcb5780635e42b45514610daf57806363c98ffa14610d91578063699abb3c14610d375780636d1d59a814610cdc57806370a0823114610ca457806371201a0e14610c865780637136982b14610c685780637a16a49e14610b9c5780638a8c523c14610b155780638aee812714610a6b5780638da5cb5b14610a445780638ef8ed3214610a265780638f1b0efc146109f557806393a013e0146109ce57806395d89b41146108ca57806399248ea7146108a3578063997664d7146108855780639d0014b11461080c5780639fde54f5146107c3578063a1b140b614610786578063a9059cbb14610755578063aada9c3814610732578063ae7b6d1614610714578063b70143c914610634578063c07fbb8c146105fa578063cbdd9b30146105d7578063dd62ed3e1461057f578063de1c24d0146104e1578063e086e5ec1461045c578063e2d2e2191461043e578063f1320af2146103ff578063f2fde38b1461033b578063f4daaba11461031d578063f74fe6be146102f85763f9fc0d0714610245573861000f565b346102f35760003660031901126102f3576000620493e05b801515806102e8575b806102db575b156102c6576102ac6102c0916102a65a61029f6001600160a01b03610292600d546115fc565b90549060031b1c16612102565b5a906115a4565b906115a4565b916102b8600d546116a0565b600d556116a0565b9061025d565b600d54600e5411156102d457005b6000600d55005b50600d54600e541161026c565b50600b548210610266565b600080fd5b346102f35760003660031901126102f3576020610313611923565b6040519015158152f35b346102f35760003660031901126102f3576020600b54604051908152f35b346102f35760203660031901126102f357610354611511565b600554906001600160a01b038083169161036f8333146115b1565b169182156103bb578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a31617600555005b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b346102f35760203660031901126102f3576001600160a01b03610420611511565b166000526015602052602060ff604060002054166040519015158152f35b346102f35760003660031901126102f3576020601354604051908152f35b346102f35760003660031901126102f35760008080806001600160a01b03600554166104898133146115b1565b47905af16104956118e3565b501561049d57005b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b346102f35760203660031901126102f3576001600160a01b03610502611511565b610511826005541633146115b1565b16801561053b5773ffffffffffffffffffffffffffffffffffffffff196004541617600455600080f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b346102f35760403660031901126102f357610598611511565b6001600160a01b036105a8611527565b911660005260076020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b346102f35760003660031901126102f35760206105f26118b9565b604051908152f35b346102f35760203660031901126102f3576001600160a01b0361061b611511565b16600052600f6020526020604060002054604051908152f35b346102f35760203660031901126102f35760043561065e6001600160a01b036005541633146115b1565b3060005260066020526040600020549081156106d057604091811515806106c6575b1561069c57505b61069081612204565b82519182526020820152f35b6009549150811515806106bc575b156106b55750610687565b9050610687565b50818110156106aa565b5080821115610680565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b346102f35760003660031901126102f3576020600854604051908152f35b346102f35760203660031901126102f35760206105f2610750611511565b611864565b346102f35760403660031901126102f35761077b610771611511565b6024359033611a72565b602060405160018152f35b346102f35760003660031901126102f3576107bf6107a2611829565b604080519384526020840192909252908201529081906060820190565b0390f35b346102f35761001b6001600160a01b036107dc3661153d565b91906107ed826005541633146115b1565b16600052601560205260406000209060ff801983541691151516179055565b346102f35760203660031901126102f3576004356108366001600160a01b036005541633146115b1565b801561084157600955005b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b346102f35760003660031901126102f3576020601254604051908152f35b346102f35760003660031901126102f35760206001600160a01b0360035416604051908152f35b346102f35760003660031901126102f35760405160006001548060011c906001811680156109c4575b6020831081146109b05782855290811561098c575060011461092c575b6107bf836109208185038261156c565b604051918291826114c8565b91905060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6916000905b80821061097257509091508101602001610920610910565b91926001816020925483858801015201910190929161095a565b60ff191660208086019190915291151560051b840190910191506109209050610910565b602484634e487b7160e01b81526022600452fd5b91607f16916108f3565b346102f35760003660031901126102f35760206001600160a01b0360045416604051908152f35b346102f35760003660031901126102f35760206105f2306001600160a01b0316600052600660205260406000205490565b346102f35760203660031901126102f35760406106906004356116af565b346102f35760003660031901126102f35760206001600160a01b0360055416604051908152f35b346102f35760203660031901126102f3576001600160a01b03610a8c611511565b610a9b826005541633146115b1565b168015610ac55773ffffffffffffffffffffffffffffffffffffffff196003541617600355600080f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b346102f35760003660031901126102f357610b3c6001600160a01b036005541633146115b1565b60165460ff8160081c16610b585761ff00191661010017601655005b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b346102f35760203660031901126102f357600435610bc66001600160a01b036005541633146115b1565b603c8110610bff576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a1005b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b346102f35760003660031901126102f3576020600e54604051908152f35b346102f35760003660031901126102f3576020600a54604051908152f35b346102f35760203660031901126102f35760206105f2610cc2611511565b6001600160a01b0316600052600660205260406000205490565b346102f35760203660031901126102f3576001600160a01b03610cfd611511565b166000526010602052604060002080546107bf60026001840154930154604051938493846040919493926060820195825260208201520152565b346102f35760203660031901126102f3577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c916020600435610d846001600160a01b036005541633146115b1565b80600855604051908152a1005b346102f35760003660031901126102f3576020600c54604051908152f35b346102f35760003660031901126102f357602047604051908152f35b346102f35760203660031901126102f357600435610df56001600160a01b036005541633146115b1565b600581101580610e73575b15610e0a57600b55005b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115610e00565b346102f35760003660031901126102f357602060ff60165460081c166040519015158152f35b346102f35760203660031901126102f3576001600160a01b03610ec5611511565b166000526014602052602060ff604060002054166040519015158152f35b346102f35760003660031901126102f3576020601154604051908152f35b346102f35760003660031901126102f357610f286001600160a01b036005541633146115b1565b60115460006011556000670de0b6b3a7640000905b600e54811015610fa957806001600160a01b03610f5b6001936115fc565b90549060031b1c1680600052600660205260406000205484811015600014610fa257610f9891600052601060205280604060002055601154611673565b6011555b01610f3d565b5050610f9c565b50600e546000198101908113600116611044575b600081121561106557601154838115158061105a575b611015575b6040917f7c14edc967dd480b4bc0469154bf683277ba675d7f756cc20b1eb11e9f50c683838051848152836020820152a182519182526020820152f35b6012549161271083029280840461271014901517156110445761103a81604094611680565b6013559150610fd8565b634e487b7160e01b600052601160045260246000fd5b506012541515610fd3565b6001600160a01b03611076826115fc565b90549060031b1c1680600052600660205282604060002054106110c5575b507f800000000000000000000000000000000000000000000000000000000000000081146110445760001901610fbd565b6110ce90611f9a565b83611094565b346102f35760403660031901126102f3576001600160a01b0360206110f7611511565b604483600554166111098133146115b1565b600060405195869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855260048501526024356024850152165af180156111865761115257005b6020813d60201161117e575b8161116b6020938361156c565b810103126102f35751801515036102f357005b3d915061115e565b6040513d6000823e3d90fd5b346102f35760003660031901126102f357602060405160128152f35b346102f35760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6111df3661153d565b6111f86001600160a01b036005959395541633146115b1565b6001600160a01b03841693846000526014835260ff6040600020541691801515809315150361122d575b5050604051908152a2005b856000526014845261124f8160406000209060ff801983541691151516179055565b1561127f578460005260108352604060002054611270575b505b8480611222565b61127990611f9a565b84611267565b61129790856000526006845260406000205490611ed0565b611269565b346102f35760003660031901126102f3576020600d54604051908152f35b346102f35760603660031901126102f3576112d3611511565b6112db611527565b604435906001600160a01b038316600052600760205260406000206001600160a01b033316600052602052604060002054926000198403611321575b61077b9350611a72565b8284106113445761133f6113388461077b966115a4565b3383611938565b611317565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b346102f35760003660031901126102f3576020600254604051908152f35b346102f35760403660031901126102f35761077b6113e8611511565b6024359033611938565b346102f35760003660031901126102f357604051600080548060011c906001811680156114a3575b6020831081146109b05782855290811561098c5750600114611446576107bf836109208185038261156c565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061148957509091508101602001610920610910565b919260018160209254838588010152019101909291611471565b91607f169161141a565b346102f35760003660031901126102f3576020906009548152f35b91909160208152825180602083015260005b8181106114fb575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016114da565b600435906001600160a01b03821682036102f357565b602435906001600160a01b03821682036102f357565b60409060031901126102f3576004356001600160a01b03811681036102f3579060243580151581036102f35790565b90601f8019910116810190811067ffffffffffffffff82111761158e57604052565b634e487b7160e01b600052604160045260246000fd5b9190820391821161104457565b156115b857565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b600e5481101561161757600e60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b600e541561161757600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b8181029291811591840414171561104457565b9190820180921161104457565b811561168a570490565b634e487b7160e01b600052601260045260246000fd5b60001981146110445760010190565b6001600160a01b036005541633036117bf5780156117b557905b600d546116d68382611673565b600e548091116117a2575b5050811561179357600d549160005b818110611754575050611706600d5492836115a4565b91600e548091101561171a575b50600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a138611713565b600190600d54600e54811061176b575b50016116f0565b6001600160a01b0361029261177f926115fc565b61178a600d546116a0565b600d5538611764565b90506000600d55600090600090565b6117ad9293506115a4565b9038806116e1565b50600b54906116c9565b608460405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e20646973747269627574652072657761726460448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b600e54801561185857600d54916064830283810460641484151715611044578261185291611680565b91929190565b50600090600090606490565b6001600160a01b03811690816000526010602052604060002054156118b25761188c906121ca565b906000526010602052600260406000200154808211156118b2576118af916115a4565b90565b5050600090565b6118c1611923565b6118de576118af6118d7600c54600a5490611673565b42906115a4565b600090565b3d1561191e573d9067ffffffffffffffff821161158e5760405191611912601f8201601f19166020018461156c565b82523d6000602084013e565b606090565b611932600c54600a5490611673565b42101590565b6001600160a01b0316908115611a09576001600160a01b031691821561199f5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115611e66576001600160a01b038316938415611e16578015611dac5782859160165460ff8160081c161580611d84575b611d0c575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611d00575b5080611ceb575b80611cd6575b80611cc1575b611c9f575b50836000526015825260ff604060002054161580611c87575b600090611c10575b50600084815260068352604090208054611b499083906115a4565b905584600052600682526040600020611b63828254611673565b9055604051908152a381600052601460205260ff604060002054161580611bfb575b611bdc575b505081600052601460205260ff604060002054161580611bc7575b611bad575050565b611bc591600052600660205260406000205490611ed0565b565b506001600160a01b0360045416821415611ba5565b611bf491600052600660205260406000205490611ed0565b3880611b8a565b506001600160a01b0360045416821415611b85565b6001600160a01b0360045416808614908115611c7d575b50611c68575b8015611b2e57611c629130600052600684526040600020611c4f838254611673565b90556040518281528686863093a36115a4565b38611b2e565b506064611c7760085483611660565b04611c2d565b9050861438611c27565b50846000526015825260ff6040600020541615611b26565b80821115611cb757611cb090612204565b5038611b0d565b50611cb081612204565b506001600160a01b0360055416861415611b08565b506001600160a01b0360055416851415611b02565b506001600160a01b0360045416851415611afc565b60ff9150161538611af5565b915091506001600160a01b0360055416808514908115611d7a575b5015611d365785918491611ab3565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611d27565b506001600160a01b0360045416808414908115611da2575b50611aae565b9050841438611d9c565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a76400008210916001600160a01b0382168060005260106020526040600020541515600014611f655780600052601060205260406000205493600014611f2e575050611f26611bc5926011546115a4565b601155611f9a565b915091828103611f3d57505050565b82611f4d611f52926011546115a4565b611673565b6011556000526010602052604060002055565b90919215611f7257505050565b611f7e611f95936124a5565b600052601060205280604060002055601154611673565b601155565b600e54801580156120b8575b8015612097575b612093576000198101908111611044576001600160a01b03611fcf81926115fc565b90549060031b1c1691169081600052600f6020526040600020549061201681611ff7846115fc565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e54801561207d576000190161203a816115fc565b6001600160a01b0382549160031b1b19169055600e5580600052600f60205260006040812055600052601060205260006002604082208281558260018201550155565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038216600052600f602052806040600020541015611fad565b506001600160a01b03821680600052600f6020526040600020541590816120e0575b50611fa6565b90506001600160a01b036120f261162d565b90549060031b1c161415386120da565b6001600160a01b03811690816000526010602052604060002054156120935761212a81611864565b908161213557505050565b4782111561214257505050565b600080939282829461215484956121ca565b81855260106020526002604086200155835260106020528260016040822001555af161217e6118e3565b501561218657565b606460405162461bcd60e51b815260206004820152601560248201527f534f4e4943207472616e73666572206661696c656400000000000000000000006044820152fd5b601154156121fe576121fa612710916001600160a01b036013549116600052601060205260406000205490611660565b0490565b50600090565b600090600160ff19601654161760165560405161222260608261156c565b6002815260208101906040368337805115612491573082526001600160a01b036003541681516001101561247d576040820152308015611a09577395a7e403d7cf20f675ff9273d66e94d35ba49fa3908086526007602052604086208287526020528460408720557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020604051878152a347916104b04201804211612469577395a7e403d7cf20f675ff9273d66e94d35ba49fa33b15612465579185916040519384927f791ac94700000000000000000000000000000000000000000000000000000000845260a484019088600486015285602486015260a060448601525180915260c484019290855b81811061244057505030606485015250608483015281900381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156124355761241f575b5061237490476115a4565b9182151580612414575b612392575b50509060ff1960165416601655565b61239e83601254611673565b9081601255612710820291808304612710149015171561240057507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f916123ea60409260115490611680565b6013558151908152836020820152a13880612383565b80634e487b7160e01b602492526011600452fd5b50601154151561237e565b9261242e81612374939561156c565b9290612369565b6040513d86823e3d90fd5b82516001600160a01b031685528a96508795506020948501949092019160010161232d565b8580fd5b602486634e487b7160e01b81526011600452fd5b602485634e487b7160e01b81526032600452fd5b602484634e487b7160e01b81526032600452fd5b6001600160a01b0381169081600052600f60205260406000205415801590612530575b61209357600e546801000000000000000081101561158e5781611ff78260016124f49401600e556115fc565b600e546000198101919082116110445761251c9183600052600f6020526040600020556121ca565b906000526010602052600260406000200155565b50600e54151580156124c85750816001600160a01b0361254e61162d565b90549060031b1c16146124c856fea264697066735822122084d127fcad8eb09aef4ccf59d3aa623477fe14712adbb067098310de7e425b3f64736f6c634300081c0033bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd

Deployed Bytecode

0x608080604052600436101561001d575b50361561001b57600080fd5b005b60003560e01c9081630445b667146114ad5750806306fdde03146113f2578063095ea7b3146113cc57806318160ddd146113ae57806323b872dd146112ba57806326987b601461129c5780632836be24146111ae578063313ce5671461119257806333f3d628146110d4578063380b9dc014610f015780633a98ef3914610ee3578063429cead114610ea45780634ada218b14610e7e578063576f35e314610dcb5780635e42b45514610daf57806363c98ffa14610d91578063699abb3c14610d375780636d1d59a814610cdc57806370a0823114610ca457806371201a0e14610c865780637136982b14610c685780637a16a49e14610b9c5780638a8c523c14610b155780638aee812714610a6b5780638da5cb5b14610a445780638ef8ed3214610a265780638f1b0efc146109f557806393a013e0146109ce57806395d89b41146108ca57806399248ea7146108a3578063997664d7146108855780639d0014b11461080c5780639fde54f5146107c3578063a1b140b614610786578063a9059cbb14610755578063aada9c3814610732578063ae7b6d1614610714578063b70143c914610634578063c07fbb8c146105fa578063cbdd9b30146105d7578063dd62ed3e1461057f578063de1c24d0146104e1578063e086e5ec1461045c578063e2d2e2191461043e578063f1320af2146103ff578063f2fde38b1461033b578063f4daaba11461031d578063f74fe6be146102f85763f9fc0d0714610245573861000f565b346102f35760003660031901126102f3576000620493e05b801515806102e8575b806102db575b156102c6576102ac6102c0916102a65a61029f6001600160a01b03610292600d546115fc565b90549060031b1c16612102565b5a906115a4565b906115a4565b916102b8600d546116a0565b600d556116a0565b9061025d565b600d54600e5411156102d457005b6000600d55005b50600d54600e541161026c565b50600b548210610266565b600080fd5b346102f35760003660031901126102f3576020610313611923565b6040519015158152f35b346102f35760003660031901126102f3576020600b54604051908152f35b346102f35760203660031901126102f357610354611511565b600554906001600160a01b038083169161036f8333146115b1565b169182156103bb578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a31617600555005b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b346102f35760203660031901126102f3576001600160a01b03610420611511565b166000526015602052602060ff604060002054166040519015158152f35b346102f35760003660031901126102f3576020601354604051908152f35b346102f35760003660031901126102f35760008080806001600160a01b03600554166104898133146115b1565b47905af16104956118e3565b501561049d57005b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b346102f35760203660031901126102f3576001600160a01b03610502611511565b610511826005541633146115b1565b16801561053b5773ffffffffffffffffffffffffffffffffffffffff196004541617600455600080f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b346102f35760403660031901126102f357610598611511565b6001600160a01b036105a8611527565b911660005260076020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b346102f35760003660031901126102f35760206105f26118b9565b604051908152f35b346102f35760203660031901126102f3576001600160a01b0361061b611511565b16600052600f6020526020604060002054604051908152f35b346102f35760203660031901126102f35760043561065e6001600160a01b036005541633146115b1565b3060005260066020526040600020549081156106d057604091811515806106c6575b1561069c57505b61069081612204565b82519182526020820152f35b6009549150811515806106bc575b156106b55750610687565b9050610687565b50818110156106aa565b5080821115610680565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b346102f35760003660031901126102f3576020600854604051908152f35b346102f35760203660031901126102f35760206105f2610750611511565b611864565b346102f35760403660031901126102f35761077b610771611511565b6024359033611a72565b602060405160018152f35b346102f35760003660031901126102f3576107bf6107a2611829565b604080519384526020840192909252908201529081906060820190565b0390f35b346102f35761001b6001600160a01b036107dc3661153d565b91906107ed826005541633146115b1565b16600052601560205260406000209060ff801983541691151516179055565b346102f35760203660031901126102f3576004356108366001600160a01b036005541633146115b1565b801561084157600955005b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b346102f35760003660031901126102f3576020601254604051908152f35b346102f35760003660031901126102f35760206001600160a01b0360035416604051908152f35b346102f35760003660031901126102f35760405160006001548060011c906001811680156109c4575b6020831081146109b05782855290811561098c575060011461092c575b6107bf836109208185038261156c565b604051918291826114c8565b91905060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6916000905b80821061097257509091508101602001610920610910565b91926001816020925483858801015201910190929161095a565b60ff191660208086019190915291151560051b840190910191506109209050610910565b602484634e487b7160e01b81526022600452fd5b91607f16916108f3565b346102f35760003660031901126102f35760206001600160a01b0360045416604051908152f35b346102f35760003660031901126102f35760206105f2306001600160a01b0316600052600660205260406000205490565b346102f35760203660031901126102f35760406106906004356116af565b346102f35760003660031901126102f35760206001600160a01b0360055416604051908152f35b346102f35760203660031901126102f3576001600160a01b03610a8c611511565b610a9b826005541633146115b1565b168015610ac55773ffffffffffffffffffffffffffffffffffffffff196003541617600355600080f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b346102f35760003660031901126102f357610b3c6001600160a01b036005541633146115b1565b60165460ff8160081c16610b585761ff00191661010017601655005b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b346102f35760203660031901126102f357600435610bc66001600160a01b036005541633146115b1565b603c8110610bff576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a1005b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b346102f35760003660031901126102f3576020600e54604051908152f35b346102f35760003660031901126102f3576020600a54604051908152f35b346102f35760203660031901126102f35760206105f2610cc2611511565b6001600160a01b0316600052600660205260406000205490565b346102f35760203660031901126102f3576001600160a01b03610cfd611511565b166000526010602052604060002080546107bf60026001840154930154604051938493846040919493926060820195825260208201520152565b346102f35760203660031901126102f3577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c916020600435610d846001600160a01b036005541633146115b1565b80600855604051908152a1005b346102f35760003660031901126102f3576020600c54604051908152f35b346102f35760003660031901126102f357602047604051908152f35b346102f35760203660031901126102f357600435610df56001600160a01b036005541633146115b1565b600581101580610e73575b15610e0a57600b55005b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115610e00565b346102f35760003660031901126102f357602060ff60165460081c166040519015158152f35b346102f35760203660031901126102f3576001600160a01b03610ec5611511565b166000526014602052602060ff604060002054166040519015158152f35b346102f35760003660031901126102f3576020601154604051908152f35b346102f35760003660031901126102f357610f286001600160a01b036005541633146115b1565b60115460006011556000670de0b6b3a7640000905b600e54811015610fa957806001600160a01b03610f5b6001936115fc565b90549060031b1c1680600052600660205260406000205484811015600014610fa257610f9891600052601060205280604060002055601154611673565b6011555b01610f3d565b5050610f9c565b50600e546000198101908113600116611044575b600081121561106557601154838115158061105a575b611015575b6040917f7c14edc967dd480b4bc0469154bf683277ba675d7f756cc20b1eb11e9f50c683838051848152836020820152a182519182526020820152f35b6012549161271083029280840461271014901517156110445761103a81604094611680565b6013559150610fd8565b634e487b7160e01b600052601160045260246000fd5b506012541515610fd3565b6001600160a01b03611076826115fc565b90549060031b1c1680600052600660205282604060002054106110c5575b507f800000000000000000000000000000000000000000000000000000000000000081146110445760001901610fbd565b6110ce90611f9a565b83611094565b346102f35760403660031901126102f3576001600160a01b0360206110f7611511565b604483600554166111098133146115b1565b600060405195869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855260048501526024356024850152165af180156111865761115257005b6020813d60201161117e575b8161116b6020938361156c565b810103126102f35751801515036102f357005b3d915061115e565b6040513d6000823e3d90fd5b346102f35760003660031901126102f357602060405160128152f35b346102f35760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6111df3661153d565b6111f86001600160a01b036005959395541633146115b1565b6001600160a01b03841693846000526014835260ff6040600020541691801515809315150361122d575b5050604051908152a2005b856000526014845261124f8160406000209060ff801983541691151516179055565b1561127f578460005260108352604060002054611270575b505b8480611222565b61127990611f9a565b84611267565b61129790856000526006845260406000205490611ed0565b611269565b346102f35760003660031901126102f3576020600d54604051908152f35b346102f35760603660031901126102f3576112d3611511565b6112db611527565b604435906001600160a01b038316600052600760205260406000206001600160a01b033316600052602052604060002054926000198403611321575b61077b9350611a72565b8284106113445761133f6113388461077b966115a4565b3383611938565b611317565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b346102f35760003660031901126102f3576020600254604051908152f35b346102f35760403660031901126102f35761077b6113e8611511565b6024359033611938565b346102f35760003660031901126102f357604051600080548060011c906001811680156114a3575b6020831081146109b05782855290811561098c5750600114611446576107bf836109208185038261156c565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061148957509091508101602001610920610910565b919260018160209254838588010152019101909291611471565b91607f169161141a565b346102f35760003660031901126102f3576020906009548152f35b91909160208152825180602083015260005b8181106114fb575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016114da565b600435906001600160a01b03821682036102f357565b602435906001600160a01b03821682036102f357565b60409060031901126102f3576004356001600160a01b03811681036102f3579060243580151581036102f35790565b90601f8019910116810190811067ffffffffffffffff82111761158e57604052565b634e487b7160e01b600052604160045260246000fd5b9190820391821161104457565b156115b857565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b600e5481101561161757600e60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b600e541561161757600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b8181029291811591840414171561104457565b9190820180921161104457565b811561168a570490565b634e487b7160e01b600052601260045260246000fd5b60001981146110445760010190565b6001600160a01b036005541633036117bf5780156117b557905b600d546116d68382611673565b600e548091116117a2575b5050811561179357600d549160005b818110611754575050611706600d5492836115a4565b91600e548091101561171a575b50600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a138611713565b600190600d54600e54811061176b575b50016116f0565b6001600160a01b0361029261177f926115fc565b61178a600d546116a0565b600d5538611764565b90506000600d55600090600090565b6117ad9293506115a4565b9038806116e1565b50600b54906116c9565b608460405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e20646973747269627574652072657761726460448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b600e54801561185857600d54916064830283810460641484151715611044578261185291611680565b91929190565b50600090600090606490565b6001600160a01b03811690816000526010602052604060002054156118b25761188c906121ca565b906000526010602052600260406000200154808211156118b2576118af916115a4565b90565b5050600090565b6118c1611923565b6118de576118af6118d7600c54600a5490611673565b42906115a4565b600090565b3d1561191e573d9067ffffffffffffffff821161158e5760405191611912601f8201601f19166020018461156c565b82523d6000602084013e565b606090565b611932600c54600a5490611673565b42101590565b6001600160a01b0316908115611a09576001600160a01b031691821561199f5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115611e66576001600160a01b038316938415611e16578015611dac5782859160165460ff8160081c161580611d84575b611d0c575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611d00575b5080611ceb575b80611cd6575b80611cc1575b611c9f575b50836000526015825260ff604060002054161580611c87575b600090611c10575b50600084815260068352604090208054611b499083906115a4565b905584600052600682526040600020611b63828254611673565b9055604051908152a381600052601460205260ff604060002054161580611bfb575b611bdc575b505081600052601460205260ff604060002054161580611bc7575b611bad575050565b611bc591600052600660205260406000205490611ed0565b565b506001600160a01b0360045416821415611ba5565b611bf491600052600660205260406000205490611ed0565b3880611b8a565b506001600160a01b0360045416821415611b85565b6001600160a01b0360045416808614908115611c7d575b50611c68575b8015611b2e57611c629130600052600684526040600020611c4f838254611673565b90556040518281528686863093a36115a4565b38611b2e565b506064611c7760085483611660565b04611c2d565b9050861438611c27565b50846000526015825260ff6040600020541615611b26565b80821115611cb757611cb090612204565b5038611b0d565b50611cb081612204565b506001600160a01b0360055416861415611b08565b506001600160a01b0360055416851415611b02565b506001600160a01b0360045416851415611afc565b60ff9150161538611af5565b915091506001600160a01b0360055416808514908115611d7a575b5015611d365785918491611ab3565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611d27565b506001600160a01b0360045416808414908115611da2575b50611aae565b9050841438611d9c565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a76400008210916001600160a01b0382168060005260106020526040600020541515600014611f655780600052601060205260406000205493600014611f2e575050611f26611bc5926011546115a4565b601155611f9a565b915091828103611f3d57505050565b82611f4d611f52926011546115a4565b611673565b6011556000526010602052604060002055565b90919215611f7257505050565b611f7e611f95936124a5565b600052601060205280604060002055601154611673565b601155565b600e54801580156120b8575b8015612097575b612093576000198101908111611044576001600160a01b03611fcf81926115fc565b90549060031b1c1691169081600052600f6020526040600020549061201681611ff7846115fc565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e54801561207d576000190161203a816115fc565b6001600160a01b0382549160031b1b19169055600e5580600052600f60205260006040812055600052601060205260006002604082208281558260018201550155565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038216600052600f602052806040600020541015611fad565b506001600160a01b03821680600052600f6020526040600020541590816120e0575b50611fa6565b90506001600160a01b036120f261162d565b90549060031b1c161415386120da565b6001600160a01b03811690816000526010602052604060002054156120935761212a81611864565b908161213557505050565b4782111561214257505050565b600080939282829461215484956121ca565b81855260106020526002604086200155835260106020528260016040822001555af161217e6118e3565b501561218657565b606460405162461bcd60e51b815260206004820152601560248201527f534f4e4943207472616e73666572206661696c656400000000000000000000006044820152fd5b601154156121fe576121fa612710916001600160a01b036013549116600052601060205260406000205490611660565b0490565b50600090565b600090600160ff19601654161760165560405161222260608261156c565b6002815260208101906040368337805115612491573082526001600160a01b036003541681516001101561247d576040820152308015611a09577395a7e403d7cf20f675ff9273d66e94d35ba49fa3908086526007602052604086208287526020528460408720557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256020604051878152a347916104b04201804211612469577395a7e403d7cf20f675ff9273d66e94d35ba49fa33b15612465579185916040519384927f791ac94700000000000000000000000000000000000000000000000000000000845260a484019088600486015285602486015260a060448601525180915260c484019290855b81811061244057505030606485015250608483015281900381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156124355761241f575b5061237490476115a4565b9182151580612414575b612392575b50509060ff1960165416601655565b61239e83601254611673565b9081601255612710820291808304612710149015171561240057507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f916123ea60409260115490611680565b6013558151908152836020820152a13880612383565b80634e487b7160e01b602492526011600452fd5b50601154151561237e565b9261242e81612374939561156c565b9290612369565b6040513d86823e3d90fd5b82516001600160a01b031685528a96508795506020948501949092019160010161232d565b8580fd5b602486634e487b7160e01b81526011600452fd5b602485634e487b7160e01b81526032600452fd5b602484634e487b7160e01b81526032600452fd5b6001600160a01b0381169081600052600f60205260406000205415801590612530575b61209357600e546801000000000000000081101561158e5781611ff78260016124f49401600e556115fc565b600e546000198101919082116110445761251c9183600052600f6020526040600020556121ca565b906000526010602052600260406000200155565b50600e54151580156124c85750816001600160a01b0361254e61162d565b90549060031b1c16146124c856fea264697066735822122084d127fcad8eb09aef4ccf59d3aa623477fe14712adbb067098310de7e425b3f64736f6c634300081c0033

[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.