ETH Price: $2,931.67 (+1.46%)
 

Overview

Max Total Supply

1,000,000,000 Furo

Holders

1,240

Transfers

-
0

Market

Onchain Market Cap

-

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
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Furo

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Furo.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.8;

import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        return msg.data;
    }
}

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);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
    unchecked {
        _approve(sender, _msgSender(), currentAllowance - amount);
    }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
            unchecked {
                _approve(_msgSender(), spender, currentAllowance - subtractedValue);
            }
        }
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
    unchecked {
        _balances[sender] = senderBalance - amount;
    }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IDexFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}

contract Furo is ERC20, Ownable {
    uint256 public maxSwapsPerBlock = 150;
    uint256 private swapsInCurrentBlock;
    uint256 private lastTradeBlock;

    event MaxSwapsPerBlockUpdated(uint256 newValue);

    uint256 public maxBuyAmount;

    IDexFactory public immutable uniswapV2Factory;
    IDexRouter public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public immutable WETH;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    uint256 public swapTokensLastBlock;

    address public treasuryAddress;

    uint256 public tradingActiveBlock = 0;
    uint256 public tradingActivatedAtTimestamp = 0;

    bool public limitsInEffect;
    bool public tradingActive;
    bool public swapFeesOncePerBlock;

    address public sniperBotsGuard;
    mapping(address => bool) public isSniperBot;

    uint256 public buyFee;
    uint256 public sellFee;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public automatedMarketMakerPairs;

    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _holders;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedTreasuryAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event SwapFeeCollected(uint256 amount);
    event SwapBackResult(uint256 amountIn, uint256 amountOut);
    event TransferForeignToken(address token, uint256 amount);
    event TreasuryTransferFailed(uint256 amount);

    event IsSniperBotSet(address account, bool isSniper);
    event SniperBotsGuardSet(address account);

    event SwapFeesOncePerBlockSet(bool newSetting);
    event SetSwapThreshold(uint256 newAmount);

    bool public maxSwapsPerBlockFreezeForever;

    function setSwapFeesOncePerBlock(bool newSetting) external {
        require(
            msg.sender == treasuryAddress || msg.sender == owner(),
            "only treasuryAddress or owner can change swapFeesOncePerBlock");
        swapFeesOncePerBlock = newSetting;
        emit SwapFeesOncePerBlockSet(newSetting);
    }

    bool public newSniperBotDisabledForever;
    event NewSniperBotDisabledForever();

    function disableNewSniperBotForever() external onlyOwner {
        newSniperBotDisabledForever = true;
        emit NewSniperBotDisabledForever();
    }

    function setSniperBot(address account, bool isSniper) external {
        require(
            msg.sender == sniperBotsGuard || msg.sender == owner(),
            "Only owner or sniperBotsGuard can set sniper bots");
        if (newSniperBotDisabledForever) {
            require(!isSniper, "New sniper bots are disabled forever");
        }
        isSniperBot[account] = isSniper;
        emit IsSniperBotSet(account, isSniper);
    }

    function setSniperBotsGuard(address account) external {
        require(
            msg.sender == owner() || msg.sender == sniperBotsGuard,
            "Only owner or sniperBotsGuard can set sniper bots guard");
        sniperBotsGuard = account;
        emit SniperBotsGuardSet(account);
    }

    constructor() ERC20('Furo', 'Furo') {
        address newOwner = msg.sender;
        sniperBotsGuard = newOwner;

        IDexRouter _uniswapV2Router = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Factory = IDexFactory(_uniswapV2Router.factory());
        WETH = _uniswapV2Router.WETH();
        uniswapV2Pair = uniswapV2Factory.createPair(address(this), WETH);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * (10**18);

        maxBuyAmount = totalSupply * 80 / 100 / 100;  // 0.8% of total supply
        swapTokensAtAmount = totalSupply * 1 / 1_000_000;  // very small amount
        limitsInEffect = true;

        buyFee = 22 * 10000 / 100;
        sellFee = 22 * 10000 / 100;

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        treasuryAddress = address(newOwner);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(treasuryAddress, true);

        _createInitialSupply(newOwner, totalSupply);
        // Add initial holder to holders list
        _updateHolderList(newOwner);
        transferOwnership(newOwner);
    }

    receive() external payable {}

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10**18);
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function getFees() external view returns (uint256, uint256) {
        return (buyFee, sellFee);
    }

    bool public feesLocked = false;
    event FeesLocked();

    function lockFees() external onlyOwner {
        feesLocked = true;
        emit FeesLocked();
    }

    bool public feesOnlyLower = false;
    event FeesOnlyLower();

    function setFeesOnlyLower(bool _feesOnlyLower) external onlyOwner {
        feesOnlyLower = _feesOnlyLower;
        emit FeesOnlyLower();
    }

    function setFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        require(!feesLocked, "Fees are locked");
        require(_buyFee <= 10000 * 40 / 100, "High fee");
        require(_sellFee <= 10000 * 40 / 100, "High fee");
        if (feesOnlyLower) {
            require(_buyFee <= buyFee, "Buy fee can only be lowered");
            require(_sellFee <= sellFee, "Sell fee can only be lowered");
        }
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setSwapThresholdUnits(uint256 newAmount) external {
        require(msg.sender == treasuryAddress || msg.sender == owner(),
            "only treasuryAddress or owner can change swapThreshold");
        swapTokensAtAmount = newAmount * 10**18;
        emit SetSwapThreshold(swapTokensAtAmount);
    }

    function transferForeignToken(address _token, address _to) public returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(msg.sender == treasuryAddress,
            "only treasuryAddress can withdraw");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function withdrawStuckETH() public {
        require(msg.sender == treasuryAddress, "only treasuryAddress can withdraw");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _getBuyFee() public view returns (uint256) {
        return buyFee;
    }

    function _getSellFee() public view returns (uint256) {
        return sellFee;
    }

    // ---------- Holders management ----------
    function _updateHolderList(address holder) internal {
        if (holder == address(0)) return;
        uint256 bal = balanceOf(holder);
        if (bal > 0) {
            _holders.add(holder);
        } else {
            _holders.remove(holder);
        }
    }

    function holdersLength() external view returns (uint256) {
        return _holders.length();
    }

    function holderByIndex(uint256 index) external view returns (address) {
        require(index < _holders.length(), "Index out of bounds");
        return _holders.at(index);
    }

    function holders() external view returns (address[] memory) {
        return _holders.values();
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "amount must be greater than 0");

        require(!isSniperBot[from] && !isSniperBot[to], "Sniper bots are not allowed");

        {
            uint256 currentBlock = block.number;
            if (currentBlock != lastTradeBlock) {
                swapsInCurrentBlock = 0;
                lastTradeBlock = currentBlock;
            }

            bool isBuy  = automatedMarketMakerPairs[from];
            bool isSell = automatedMarketMakerPairs[to];

            if (isBuy || isSell) {
                swapsInCurrentBlock += 1;
                require(maxSwapsPerBlock == 0 || swapsInCurrentBlock <= maxSwapsPerBlock,
                        "Max swaps per block exceeded");
            }
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
                if(!tradingActive){
                    require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
                    require(from == owner(), "Trading is not enabled");
                }
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                }
                else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(
            canSwap &&
            tradingActive &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            _swapBack();
            swapping = false;
        }

        bool takeFee = true;
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        // only take fees on Trades, not on wallet transfers

        if(takeFee && tradingActiveBlock>0 && (block.number>tradingActiveBlock)) {
            uint256 fees = 0;

            // on sell
            if (automatedMarketMakerPairs[to] && _getSellFee() > 0) {
                fees = amount * _getSellFee() / 10000;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && _getBuyFee() > 0) {
                fees = amount * _getBuyFee() / 10000;
            }

            if(fees > 0){
                super._transfer(from, address(this), fees);
            }

            amount -= fees;

            emit SwapFeeCollected(fees);
        }

        super._transfer(from, to, amount);

        // Update holders list
        _updateHolderList(from);
        _updateHolderList(to);
        _updateHolderList(address(this));
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        _approve(
            address(this), address(uniswapV2Router), tokenAmount);

        uint ethBalanceBeforeSwap = address(this).balance;

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        emit SwapBackResult(tokenAmount, address(this).balance - ethBalanceBeforeSwap);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        _excludeFromMaxTransaction(pair, value);

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setTreasuryAddress(address _TreasuryAddress) external {
        require(
            msg.sender == treasuryAddress || msg.sender == owner(),
            "only treasuryAddress or owner can change treasuryAddress"
        );
        require(_TreasuryAddress != address(0),
            "_TreasuryAddress address cannot be 0");
        treasuryAddress = payable(_TreasuryAddress);
        emit UpdatedTreasuryAddress(_TreasuryAddress);
    }

    event SwapTokensLastBlockSet(uint256 newBlock);
    event SkipSwapBecauseOfBlock();

    uint256 public maxMilliEthForFeeSwapInTx = 1000;
    event MaxMilliEthForFeeSwapInTxUpdated(uint256 newMaxMilliEthForFeeSwapInTx);
    function setMaxMilliEthForFeeSwapInTx(uint256 newMaxMilliEthForFeeSwapInTx) external onlyOwner {
        maxMilliEthForFeeSwapInTx = newMaxMilliEthForFeeSwapInTx;
        emit MaxMilliEthForFeeSwapInTxUpdated(newMaxMilliEthForFeeSwapInTx);
    }

    bool public feeSellEnabled = false;
    event FeeSellEnabled();

    function enableFeeSell() external onlyOwner {
        feeSellEnabled = true;
        emit FeeSellEnabled();
    }

    function _swapBack() private {
        if ((tradingActivatedAtTimestamp != 0) || (!feeSellEnabled)) {
            return;
        }

        uint256 tokensToSwap = balanceOf(address(this));
        if(tokensToSwap == 0) {return;}

        if (swapFeesOncePerBlock && swapTokensLastBlock == block.number) {
            emit SkipSwapBecauseOfBlock();
            return;
        }
        swapTokensLastBlock = block.number;
        emit SwapTokensLastBlockSet(block.number);

        address[] memory _path = new address[](2);
        _path[0] = WETH;
        _path[1] = address(this);

        /* ------------------------------------------------------------------
           1) Per-transaction swap limit (maxMilliEthForFeeSwapInTx)
        ------------------------------------------------------------------ */
        if (maxMilliEthForFeeSwapInTx != 0) {
            uint256 maxWeiPerTx = maxMilliEthForFeeSwapInTx * 1e18 / 1000; // milli-ETH → wei
            uint256 _maxTokenAmountTx = uniswapV2Router.getAmountsOut(maxWeiPerTx, _path)[1];
            if (tokensToSwap > _maxTokenAmountTx) {
                tokensToSwap = _maxTokenAmountTx;
            }
        }

        if (tokensToSwap == 0) {return;}

        _swapTokensForEth(tokensToSwap);
        if (address(this).balance > 0) {
            uint256 contractEthBalance = address(this).balance;
            (bool success,) = address(treasuryAddress).call{value: contractEthBalance}("");
            if (!success) {
                // leave ETH on contract; will attempt again on next swap
                emit TreasuryTransferFailed(contractEthBalance);
            }
        }
    }

    function makeManualSwap() external {
        require(_msgSender() == treasuryAddress,
            "Only treasuryAddress can manually swap");
        uint256 tokenBalance = balanceOf(address(this));
        if(tokenBalance > 0){
            swapping = true;
            _swapBack();
            swapping = false;
        }
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re enable trading");
        tradingActive = true;
        emit EnabledTrading();
        tradingActiveBlock = block.number;
        tradingActivatedAtTimestamp = block.timestamp;
    }

    function setMaxTotalSwapsPerBlock(uint256 newValue) external onlyOwner {
        require(!maxSwapsPerBlockFreezeForever, "forever freeze is enabled");
        maxSwapsPerBlock = newValue;
        emit MaxSwapsPerBlockUpdated(newValue);
    }

    function freezeMaxSwapsPerBlockForever() external onlyOwner {
        maxSwapsPerBlockFreezeForever = true;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.

pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```solidity
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 *
 * [WARNING]
 * ====
 * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
 * unusable.
 * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
 *
 * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
 * array of EnumerableSet.
 * ====
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastValue;
                // Update the index for the moved value
                set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        bytes32[] memory store = _values(set._inner);
        bytes32[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"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":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"FeeSellEnabled","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesLocked","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesOnlyLower","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isSniper","type":"bool"}],"name":"IsSniperBotSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxMilliEthForFeeSwapInTx","type":"uint256"}],"name":"MaxMilliEthForFeeSwapInTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxSwapsPerBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[],"name":"NewSniperBotDisabledForever","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetSwapThreshold","type":"event"},{"anonymous":false,"inputs":[],"name":"SkipSwapBecauseOfBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"SniperBotsGuardSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwapBackResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"newSetting","type":"bool"}],"name":"SwapFeesOncePerBlockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBlock","type":"uint256"}],"name":"SwapTokensLastBlockSet","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryTransferFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableNewSniperBotForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableFeeSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnlyLower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeMaxSwapsPerBlockForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"holderByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holdersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniperBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMilliEthForFeeSwapInTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapsPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwapsPerBlockFreezeForever","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newSniperBotDisabledForever","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feesOnlyLower","type":"bool"}],"name":"setFeesOnlyLower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMilliEthForFeeSwapInTx","type":"uint256"}],"name":"setMaxMilliEthForFeeSwapInTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTotalSwapsPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isSniper","type":"bool"}],"name":"setSniperBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setSniperBotsGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSetting","type":"bool"}],"name":"setSwapFeesOncePerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapThresholdUnits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperBotsGuard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFeesOncePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensLastBlock","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActivatedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IDexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61010060405260966006556000600e819055600f556019805463ffff0000191690556103e8601a55601b805460ff191690553480156200003e57600080fd5b506040805180820182526004808252634675726f60e01b6020808401828152855180870190965292855284015281519192916200007e916003916200098e565b508051620000949060049060208401906200098e565b5050506000620000a96200043160201b60201c565b600580546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620044da833981519152908290a350601080546301000000600160b81b031916336301000000810291909117909155737a250d5630b4cf539739df2c5dacb4c659f2488d6200012881600162000435565b806001600160a01b031660a0816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200017f57600080fd5b505afa15801562000194573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ba919062000a34565b6001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021057600080fd5b505afa15801562000225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024b919062000a34565b606081811b6001600160601b03191660e0526080516040516364e329cb60e11b81523060048201526001600160a01b039093166024840152901c9063c9c6539690604401602060405180830381600087803b158015620002aa57600080fd5b505af1158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000a34565b6001600160601b0319606082901b1660c0526200030d906001600160a01b0316600162000498565b6b033b2e3c9fd0803ce80000006064806200032a83605062000a7c565b62000336919062000a9e565b62000342919062000a9e565b600955620f42406200035682600162000a7c565b62000362919062000a9e565b600b556010805460ff1916600190811790915561089860128190556013556200038d90849062000435565b6200039a30600162000435565b620003a961dead600162000435565b600d80546001600160a01b0319166001600160a01b038516179055620003d183600162000504565b620003de30600162000504565b620003ed61dead600162000504565b600d5462000406906001600160a01b0316600162000504565b620004128382620005b2565b6200041d8362000697565b620004288362000704565b50505062000b5f565b3390565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055620004c8828262000435565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005535760405162461bcd60e51b81526020600482018190526024820152600080516020620044ba83398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200060a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200054a565b80600260008282546200061e919062000ac1565b90915550506001600160a01b038216600090815260208190526040812080548392906200064d90849062000ac1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038116620006a95750565b6001600160a01b0381166000908152602081905260409020548015620006e957620006e48260176200080160201b620021fd1790919060201c565b505050565b620006e48260176200082160201b620022191790919060201c565b6005546001600160a01b031633146200074f5760405162461bcd60e51b81526020600482018190526024820152600080516020620044ba83398151915260448201526064016200054a565b6001600160a01b038116620007b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200054a565b6005546040516001600160a01b03808416921690600080516020620044da83398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600062000818836001600160a01b03841662000838565b90505b92915050565b600062000818836001600160a01b0384166200088a565b600081815260018301602052604081205462000881575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200081b565b5060006200081b565b6000818152600183016020526040812054801562000983576000620008b160018362000adc565b8554909150600090620008c79060019062000adc565b905081811462000933576000866000018281548110620008eb57620008eb62000af6565b906000526020600020015490508087600001848154811062000911576200091162000af6565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000947576200094762000b0c565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200081b565b60009150506200081b565b8280546200099c9062000b22565b90600052602060002090601f016020900481019282620009c0576000855562000a0b565b82601f10620009db57805160ff191683800117855562000a0b565b8280016001018555821562000a0b579182015b8281111562000a0b578251825591602001919060010190620009ee565b5062000a1992915062000a1d565b5090565b5b8082111562000a19576000815560010162000a1e565b60006020828403121562000a4757600080fd5b81516001600160a01b038116811462000a5f57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000a995762000a9962000a66565b500290565b60008262000abc57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000ad75762000ad762000a66565b500190565b60008282101562000af15762000af162000a66565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600181811c9082168062000b3757607f821691505b6020821081141562000b5957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c60c05160601c60e05160601c6138e462000bd6600039600081816109ca01528181612b4101526131960152600081816106b5015281816116dc0152611b1b0152600081816104fd01528181612bf2015281816131ee015261322c0152600061071901526138e46000f3fe6080604052600436106103f35760003560e01c806379853f5a11610208578063b4e4e4a111610118578063db8d55f1116100ab578063e2f456051161007a578063e2f4560514610bfd578063ee40166e14610c13578063f2fde38b14610c29578063f5648a4f14610c49578063f5dbbb3714610c5e57600080fd5b8063db8d55f114610b45578063dd34fec014610b6d578063dd62ed3e14610b87578063e213511f14610bcd57600080fd5b8063c0246668116100e7578063c024666814610ac5578063c5f956af14610ae5578063cf66957e14610b05578063d09a6a1e14610b2557600080fd5b8063b4e4e4a114610a42578063b62496f514610a61578063bbc0c74214610a91578063bbf0cd4d14610ab057600080fd5b8063967926691161019b578063ab3662921161016a578063ab366292146109a3578063ad5c4648146109b8578063ae20f3e4146109ec578063ae29bdd914610a0c578063b0129fad14610a2257600080fd5b8063967926691461092d5780639a7a23d614610943578063a457c2d714610963578063a9059cbb1461098357600080fd5b80638a8c523c116101d75780638a8c523c146108d05780638da5cb5b146108e55780638e599acd1461090357806395d89b411461091857600080fd5b806379853f5a146108515780638188f71c146108785780638366e79a1461089a57806388e765ff146108ba57600080fd5b80633e34414d116103035780635a27a1f9116102965780636ece5e7e116102655780636ece5e7e146107b157806370a08231146107d1578063715018a614610807578063751039fc1461081c5780637571336a1461083157600080fd5b80635a27a1f91461073b5780635fdc1fd21461075b5780636605bfda1461077c5780636cc78b121461079c57600080fd5b806349bd5a5e116102d257806349bd5a5e146106a35780634a62bb65146106d757806352e1c838146106f157806359d0f7131461070757600080fd5b80633e34414d1461063d57806341d4cfa914610657578063444ae3251461066d578063470624021461068d57600080fd5b80631d7636fc116103865780632c04d82d116103555780632c04d82d146105b7578063313ce567146105cc578063320644cc146105e8578063395093511461060857806339cf336c1461062857600080fd5b80631d7636fc1461054c57806323b872dd146105615780632b14ca56146105815780632be32b611461059757600080fd5b80630f32b7ba116103c25780630f32b7ba1461049b57806310d5de53146104bb5780631694505e146104eb57806318160ddd1461053757600080fd5b806302bdfb5f146103ff57806306fdde0314610427578063095ea7b3146104495780630b78f9c01461047957600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610c7e565b6040519081526020015b60405180910390f35b34801561043357600080fd5b5061043c610c8f565b60405161041e9190613343565b34801561045557600080fd5b506104696104643660046133b4565b610d21565b604051901515815260200161041e565b34801561048557600080fd5b506104996104943660046133de565b610d38565b005b3480156104a757600080fd5b506104996104b6366004613400565b610ef1565b3480156104c757600080fd5b506104696104d6366004613419565b60156020526000908152604090205460ff1681565b3480156104f757600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161041e565b34801561054357600080fd5b50600254610414565b34801561055857600080fd5b50601354610414565b34801561056d57600080fd5b5061046961057c366004613434565b610f57565b34801561058d57600080fd5b5061041460135481565b3480156105a357600080fd5b506104996105b2366004613400565b611001565b3480156105c357600080fd5b50601254610414565b3480156105d857600080fd5b506040516012815260200161041e565b3480156105f457600080fd5b50610499610603366004613400565b611107565b34801561061457600080fd5b506104696106233660046133b4565b6111dc565b34801561063457600080fd5b50610499611218565b34801561064957600080fd5b506019546104699060ff1681565b34801561066357600080fd5b50610414600f5481565b34801561067957600080fd5b5061051f610688366004613400565b61127c565b34801561069957600080fd5b5061041460125481565b3480156106af57600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106e357600080fd5b506010546104699060ff1681565b3480156106fd57600080fd5b50610414601a5481565b34801561071357600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561074757600080fd5b506019546104699062010000900460ff1681565b34801561076757600080fd5b50601954610469906301000000900460ff1681565b34801561078857600080fd5b50610499610797366004613419565b6112d7565b3480156107a857600080fd5b50610499611418565b3480156107bd57600080fd5b506104996107cc36600461347e565b61147a565b3480156107dd57600080fd5b506104146107ec366004613419565b6001600160a01b031660009081526020819052604090205490565b34801561081357600080fd5b506104996115d8565b34801561082857600080fd5b5061049961164c565b34801561083d57600080fd5b5061049961084c36600461347e565b6116ab565b34801561085d57600080fd5b5060105461051f90630100000090046001600160a01b031681565b34801561088457600080fd5b5061088d611797565b60405161041e91906134f9565b3480156108a657600080fd5b506104696108b536600461350c565b6117a3565b3480156108c657600080fd5b5061041460095481565b3480156108dc57600080fd5b50610499611971565b3480156108f157600080fd5b506005546001600160a01b031661051f565b34801561090f57600080fd5b50610499611a35565b34801561092457600080fd5b5061043c611ae0565b34801561093957600080fd5b5061041460065481565b34801561094f57600080fd5b5061049961095e36600461347e565b611aef565b34801561096f57600080fd5b5061046961097e3660046133b4565b611bcf565b34801561098f57600080fd5b5061046961099e3660046133b4565b611c71565b3480156109af57600080fd5b50610499611c7e565b3480156109c457600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109f857600080fd5b50610499610a0736600461353f565b611ce4565b348015610a1857600080fd5b50610414600c5481565b348015610a2e57600080fd5b506010546104699062010000900460ff1681565b348015610a4e57600080fd5b5060195461046990610100900460ff1681565b348015610a6d57600080fd5b50610469610a7c366004613419565b60166020526000908152604090205460ff1681565b348015610a9d57600080fd5b5060105461046990610100900460ff1681565b348015610abc57600080fd5b50610499611dc4565b348015610ad157600080fd5b50610499610ae036600461347e565b611dfd565b348015610af157600080fd5b50600d5461051f906001600160a01b031681565b348015610b1157600080fd5b50610499610b20366004613400565b611e86565b348015610b3157600080fd5b50610499610b4036600461353f565b611f38565b348015610b5157600080fd5b506012546013546040805192835260208301919091520161041e565b348015610b7957600080fd5b50601b546104699060ff1681565b348015610b9357600080fd5b50610414610ba236600461350c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bd957600080fd5b50610469610be8366004613419565b60116020526000908152604090205460ff1681565b348015610c0957600080fd5b50610414600b5481565b348015610c1f57600080fd5b50610414600e5481565b348015610c3557600080fd5b50610499610c44366004613419565b611fa5565b348015610c5557600080fd5b50610499612090565b348015610c6a57600080fd5b50610499610c79366004613419565b612107565b6000610c8a601761222e565b905090565b606060038054610c9e9061355c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cca9061355c565b8015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b5050505050905090565b6000610d2e338484612238565b5060015b92915050565b6005546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610d6290613597565b60405180910390fd5b60195462010000900460ff1615610db65760405162461bcd60e51b815260206004820152600f60248201526e1199595cc8185c99481b1bd8dad959608a1b6044820152606401610d62565b610fa0821115610df35760405162461bcd60e51b8152602060048201526008602482015267486967682066656560c01b6044820152606401610d62565b610fa0811115610e305760405162461bcd60e51b8152602060048201526008602482015267486967682066656560c01b6044820152606401610d62565b6019546301000000900460ff1615610ee657601254821115610e945760405162461bcd60e51b815260206004820152601b60248201527f427579206665652063616e206f6e6c79206265206c6f776572656400000000006044820152606401610d62565b601354811115610ee65760405162461bcd60e51b815260206004820152601c60248201527f53656c6c206665652063616e206f6e6c79206265206c6f7765726564000000006044820152606401610d62565b601291909155601355565b6005546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610d6290613597565b601a8190556040518181527fed8538f95bf5eac620d8b4e5ae7523bc727f0859b90aa8e9b2ba56a072a343a7906020015b60405180910390a150565b6000610f6484848461235c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d62565b610ff68533858403612238565b506001949350505050565b6005546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610d6290613597565b670de0b6b3a76400006103e861104060025490565b61104b9060016135e2565b6110559190613601565b61105f9190613601565b8110156110c05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610d62565b6110d281670de0b6b3a76400006135e2565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f4c565b600d546001600160a01b031633148061112a57506005546001600160a01b031633145b6111955760405162461bcd60e51b815260206004820152603660248201527f6f6e6c7920747265617375727941646472657373206f72206f776e65722063616044820152751b8818da185b99d9481cddd85c151a1c995cda1bdb1960521b6064820152608401610d62565b6111a781670de0b6b3a76400006135e2565b600b8190556040519081527fdd535c8a292f211fa216a760a7e5e8a29a1f222e36267d33660451d7719907a690602001610f4c565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d2e918590611213908690613623565b612238565b6005546001600160a01b031633146112425760405162461bcd60e51b8152600401610d6290613597565b6019805461ff0019166101001790556040517fb065dde7eb4e066090ff22ddf4310714e74b5fce3c0429839c0e6289d4e661b690600090a1565b6000611288601761222e565b82106112cc5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610d62565b610d32601783612a50565b600d546001600160a01b03163314806112fa57506005546001600160a01b031633145b61136c5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652074726561737572794164647265737300000000000000006064820152608401610d62565b6001600160a01b0381166113ce5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610d62565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146114425760405162461bcd60e51b8152600401610d6290613597565b601b805460ff191660011790556040517fe063a6c02b41730549afeddfdd92de633c00e61d52441baa7accc9f04453fc8490600090a1565b601054630100000090046001600160a01b03163314806114a457506005546001600160a01b031633145b61150a5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f7220736e69706572426f747347756172642063616044820152706e2073657420736e6970657220626f747360781b6064820152608401610d62565b601954610100900460ff16156115745780156115745760405162461bcd60e51b8152602060048201526024808201527f4e657720736e6970657220626f7473206172652064697361626c656420666f7260448201526332bb32b960e11b6064820152608401610d62565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527fce527251374acbd40073242991617eaf99a06736f116cca8b62c3f56b343d77591015b60405180910390a15050565b6005546001600160a01b031633146116025760405162461bcd60e51b8152600401610d6290613597565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116765760405162461bcd60e51b8152600401610d6290613597565b6010805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116d55760405162461bcd60e51b8152600401610d6290613597565b8061176c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561176c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d62565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6060610c8a6017612a5c565b60006001600160a01b0383166117fb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d62565b600d546001600160a01b031633146118255760405162461bcd60e51b8152600401610d629061363b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561186757600080fd5b505afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f919061367c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190613695565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461199b5760405162461bcd60e51b8152600401610d6290613597565b601054610100900460ff16156119f35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610d62565b6010805461ff0019166101001790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a143600e5542600f55565b600d546001600160a01b0316336001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207472656173757279416464726573732063616e206d616e75616c6c60448201526507920737761760d41b6064820152608401610d62565b306000908152602081905260409020548015611add57600a805460ff19166001179055611ad2612a69565b600a805460ff191690555b50565b606060048054610c9e9061355c565b6005546001600160a01b03163314611b195760405162461bcd60e51b8152600401610d6290613597565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611bc15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d62565b611bcb8282612d6d565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120546000198114611c675782811015611c5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d62565b611c673385858403612238565b5060019392505050565b6000610d2e33848461235c565b6005546001600160a01b03163314611ca85760405162461bcd60e51b8152600401610d6290613597565b6019805462ff00001916620100001790556040517f8e2ddf3e3a4adecfbb403ceb7654310a3e2a1a12e0ff20b9f11b3f43dc9e53ec90600090a1565b600d546001600160a01b0316331480611d0757506005546001600160a01b031633145b611d795760405162461bcd60e51b815260206004820152603d60248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652073776170466565734f6e6365506572426c6f636b0000006064820152608401610d62565b60108054821515620100000262ff0000199091161790556040517f2fa5fbcffe30a751dee9af9329ea1957ba6d758d5c4a70839ceeb35419b527ff90610f4c90831515815260200190565b6005546001600160a01b03163314611dee5760405162461bcd60e51b8152600401610d6290613597565b6019805460ff19166001179055565b6005546001600160a01b03163314611e275760405162461bcd60e51b8152600401610d6290613597565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611eb05760405162461bcd60e51b8152600401610d6290613597565b60195460ff1615611f035760405162461bcd60e51b815260206004820152601960248201527f666f726576657220667265657a6520697320656e61626c6564000000000000006044820152606401610d62565b60068190556040518181527f5912810215448e6367d51429af7c6d935e2f22e406116d0b05231bc37192e89690602001610f4c565b6005546001600160a01b03163314611f625760405162461bcd60e51b8152600401610d6290613597565b6019805463ff00000019166301000000831515021790556040517f176352ccb4a25e1868a6d5942387e086fc33d7a3498ab4f7eaf1905d24510a7990600090a150565b6005546001600160a01b03163314611fcf5760405162461bcd60e51b8152600401610d6290613597565b6001600160a01b0381166120345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146120ba5760405162461bcd60e51b8152600401610d629061363b565b604051600090339047908381818185875af1925050503d80600081146120fc576040519150601f19603f3d011682016040523d82523d6000602084013e612101565b606091505b50505050565b6005546001600160a01b03163314806121315750601054630100000090046001600160a01b031633145b6121a35760405162461bcd60e51b815260206004820152603760248201527f4f6e6c79206f776e6572206f7220736e69706572426f7473477561726420636160448201527f6e2073657420736e6970657220626f74732067756172640000000000000000006064820152608401610d62565b601080546301000000600160b81b03191663010000006001600160a01b038416908102919091179091556040519081527f7d336579c7b78abefdb31775591f73094fe64f8cc10fa89faaf23b7957acd05290602001610f4c565b6000612212836001600160a01b038416612dd7565b9392505050565b6000612212836001600160a01b038416612e26565b6000610d32825490565b6001600160a01b03831661229a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d62565b6001600160a01b0382166122fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123825760405162461bcd60e51b8152600401610d62906136b2565b6001600160a01b0382166123a85760405162461bcd60e51b8152600401610d62906136f7565b600081116123f85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d62565b6001600160a01b03831660009081526011602052604090205460ff1615801561243a57506001600160a01b03821660009081526011602052604090205460ff16155b6124865760405162461bcd60e51b815260206004820152601b60248201527f536e6970657220626f747320617265206e6f7420616c6c6f77656400000000006044820152606401610d62565b6008544390811461249c57600060075560088190555b6001600160a01b0380851660009081526016602052604080822054928616825290205460ff918216911681806124cf5750805b1561254b576001600760008282546124e79190613623565b909155505060065415806124ff575060065460075411155b61254b5760405162461bcd60e51b815260206004820152601c60248201527f4d61782073776170732070657220626c6f636b206578636565646564000000006044820152606401610d62565b505060105460ff161590506127dc576005546001600160a01b0384811691161480159061258657506005546001600160a01b03838116911614155b801561259a57506001600160a01b03821615155b80156125b157506001600160a01b03821661dead14155b156127dc57601054610100900460ff1661269f576001600160a01b03831660009081526015602052604090205460ff168061260457506001600160a01b03821660009081526015602052604090205460ff165b6126495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d62565b6005546001600160a01b0384811691161461269f5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610d62565b6001600160a01b03831660009081526016602052604090205460ff1680156126e057506001600160a01b03821660009081526015602052604090205460ff16155b1561274d576009548111156127485760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d62565b6127dc565b6001600160a01b03821660009081526016602052604090205460ff16801561278e57506001600160a01b03831660009081526015602052604090205460ff16155b15612798576127dc565b6001600160a01b03821660009081526015602052604090205460ff161580156127da57506001600160a01b03831660009081526015602052604090205460ff16155b505b30600090815260208190526040902054600b54811080159081906128075750601054610100900460ff165b80156128165750600a5460ff16155b801561283b57506001600160a01b03851660009081526016602052604090205460ff16155b801561286057506001600160a01b03851660009081526014602052604090205460ff16155b801561288557506001600160a01b03841660009081526014602052604090205460ff16155b156128aa57600a805460ff1916600117905561289f612a69565b600a805460ff191690555b6001600160a01b03851660009081526014602052604090205460019060ff16806128ec57506001600160a01b03851660009081526014602052604090205460ff165b156128f5575060005b80801561290457506000600e54115b80156129115750600e5443115b15612a22576001600160a01b03851660009081526016602052604081205460ff1680156129465750600061294460135490565b115b156129725761271061295760135490565b61296190876135e2565b61296b9190613601565b90506129ca565b6001600160a01b03871660009081526016602052604090205460ff1680156129a2575060006129a060125490565b115b156129ca576127106129b360125490565b6129bd90876135e2565b6129c79190613601565b90505b80156129db576129db873083612f19565b6129e5818661373a565b94507fff9891726fac64d7faf6508ce9e13ff651decd82208eeef75b4070d78bdfbdf681604051612a1891815260200190565b60405180910390a1505b612a2d868686612f19565b612a368661306e565b612a3f8561306e565b612a483061306e565b505050505050565b600061221283836130b9565b60606000612212836130e3565b600f54151580612a7c5750601b5460ff16155b15612a8357565b3060009081526020819052604090205480612a9b5750565b60105462010000900460ff168015612ab4575043600c54145b15612ae5576040517fdf46401eb14e1af2c0c5feb3f3e452741543196d05bd8fbd21d02ea36c37c66e90600090a150565b43600c8190556040519081527f5f21bcd6e339b486d1b832e2afa5445d204e289a043a519ef679765a05b5e8659060200160405180910390a16040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110612b7357612b73613767565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612ba757612ba7613767565b6001600160a01b0390921660209283029190910190910152601a5415612cbd5760006103e8601a54670de0b6b3a7640000612be291906135e2565b612bec9190613601565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d06ca61f83856040518363ffffffff1660e01b8152600401612c3e92919061377d565b60006040518083038186803b158015612c5657600080fd5b505afa158015612c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c92919081019061379e565b600181518110612ca457612ca4613767565b6020026020010151905080841115612cba578093505b50505b81612cc6575050565b612ccf8261313f565b4715611bcb57600d5460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114612d26576040519150601f19603f3d011682016040523d82523d6000602084013e612d2b565b606091505b5050905080612101576040518281527fbadfc899aa55ad2409d9e979ba00adcb737921dcfce412d4f7f1deeb466039eb9060200160405180910390a150505050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055612d9b82826132e7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000818152600183016020526040812054612e1e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d32565b506000610d32565b60008181526001830160205260408120548015612f0f576000612e4a60018361373a565b8554909150600090612e5e9060019061373a565b9050818114612ec3576000866000018281548110612e7e57612e7e613767565b9060005260206000200154905080876000018481548110612ea157612ea1613767565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ed457612ed461385c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d32565b6000915050610d32565b6001600160a01b038316612f3f5760405162461bcd60e51b8152600401610d62906136b2565b6001600160a01b038216612f655760405162461bcd60e51b8152600401610d62906136f7565b6001600160a01b03831660009081526020819052604090205481811015612fdd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613014908490613623565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161306091815260200190565b60405180910390a350505050565b6001600160a01b03811661307f5750565b6001600160a01b03811660009081526020819052604090205480156130ae576130a96017836121fd565b505050565b6130a9601783612219565b60008260000182815481106130d0576130d0613767565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561313357602002820191906000526020600020905b81548152602001906001019080831161311f575b50505050509050919050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061317457613174613767565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816001815181106131c8576131c8613767565b60200260200101906001600160a01b031690816001600160a01b031681525050613213307f000000000000000000000000000000000000000000000000000000000000000084612238565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061326a908690600090879030904290600401613872565b600060405180830381600087803b15801561328457600080fd5b505af1158015613298573d6000803e3d6000fd5b505050507f877973055cc76aebb6c1702046758fb56e804bca4a8bf998824b99ed02bbbafd8382476132ca919061373a565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016115cc565b600060208083528351808285015260005b8181101561337057858101830151858201604001528201613354565b81811115613382576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146133af57600080fd5b919050565b600080604083850312156133c757600080fd5b6133d083613398565b946020939093013593505050565b600080604083850312156133f157600080fd5b50508035926020909101359150565b60006020828403121561341257600080fd5b5035919050565b60006020828403121561342b57600080fd5b61221282613398565b60008060006060848603121561344957600080fd5b61345284613398565b925061346060208501613398565b9150604084013590509250925092565b8015158114611add57600080fd5b6000806040838503121561349157600080fd5b61349a83613398565b915060208301356134aa81613470565b809150509250929050565b600081518084526020808501945080840160005b838110156134ee5781516001600160a01b0316875295820195908201906001016134c9565b509495945050505050565b60208152600061221260208301846134b5565b6000806040838503121561351f57600080fd5b61352883613398565b915061353660208401613398565b90509250929050565b60006020828403121561355157600080fd5b813561221281613470565b600181811c9082168061357057607f821691505b6020821081141561359157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156135fc576135fc6135cc565b500290565b60008261361e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613636576136366135cc565b500190565b60208082526021908201527f6f6e6c79207472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b60006020828403121561368e57600080fd5b5051919050565b6000602082840312156136a757600080fd5b815161221281613470565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561374c5761374c6135cc565b500390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061379660408301846134b5565b949350505050565b600060208083850312156137b157600080fd5b825167ffffffffffffffff808211156137c957600080fd5b818501915085601f8301126137dd57600080fd5b8151818111156137ef576137ef613751565b8060051b604051601f19603f8301168101818110858211171561381457613814613751565b60405291825284820192508381018501918883111561383257600080fd5b938501935b8285101561385057845184529385019392850192613837565b98975050505050505050565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a06040820152600061389160a08301866134b5565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212209761604db02027eedaefe5c2d0cc095b9a48d1e5ea5dda6037328be4a69fe09964736f6c634300080800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103f35760003560e01c806379853f5a11610208578063b4e4e4a111610118578063db8d55f1116100ab578063e2f456051161007a578063e2f4560514610bfd578063ee40166e14610c13578063f2fde38b14610c29578063f5648a4f14610c49578063f5dbbb3714610c5e57600080fd5b8063db8d55f114610b45578063dd34fec014610b6d578063dd62ed3e14610b87578063e213511f14610bcd57600080fd5b8063c0246668116100e7578063c024666814610ac5578063c5f956af14610ae5578063cf66957e14610b05578063d09a6a1e14610b2557600080fd5b8063b4e4e4a114610a42578063b62496f514610a61578063bbc0c74214610a91578063bbf0cd4d14610ab057600080fd5b8063967926691161019b578063ab3662921161016a578063ab366292146109a3578063ad5c4648146109b8578063ae20f3e4146109ec578063ae29bdd914610a0c578063b0129fad14610a2257600080fd5b8063967926691461092d5780639a7a23d614610943578063a457c2d714610963578063a9059cbb1461098357600080fd5b80638a8c523c116101d75780638a8c523c146108d05780638da5cb5b146108e55780638e599acd1461090357806395d89b411461091857600080fd5b806379853f5a146108515780638188f71c146108785780638366e79a1461089a57806388e765ff146108ba57600080fd5b80633e34414d116103035780635a27a1f9116102965780636ece5e7e116102655780636ece5e7e146107b157806370a08231146107d1578063715018a614610807578063751039fc1461081c5780637571336a1461083157600080fd5b80635a27a1f91461073b5780635fdc1fd21461075b5780636605bfda1461077c5780636cc78b121461079c57600080fd5b806349bd5a5e116102d257806349bd5a5e146106a35780634a62bb65146106d757806352e1c838146106f157806359d0f7131461070757600080fd5b80633e34414d1461063d57806341d4cfa914610657578063444ae3251461066d578063470624021461068d57600080fd5b80631d7636fc116103865780632c04d82d116103555780632c04d82d146105b7578063313ce567146105cc578063320644cc146105e8578063395093511461060857806339cf336c1461062857600080fd5b80631d7636fc1461054c57806323b872dd146105615780632b14ca56146105815780632be32b611461059757600080fd5b80630f32b7ba116103c25780630f32b7ba1461049b57806310d5de53146104bb5780631694505e146104eb57806318160ddd1461053757600080fd5b806302bdfb5f146103ff57806306fdde0314610427578063095ea7b3146104495780630b78f9c01461047957600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b50610414610c7e565b6040519081526020015b60405180910390f35b34801561043357600080fd5b5061043c610c8f565b60405161041e9190613343565b34801561045557600080fd5b506104696104643660046133b4565b610d21565b604051901515815260200161041e565b34801561048557600080fd5b506104996104943660046133de565b610d38565b005b3480156104a757600080fd5b506104996104b6366004613400565b610ef1565b3480156104c757600080fd5b506104696104d6366004613419565b60156020526000908152604090205460ff1681565b3480156104f757600080fd5b5061051f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161041e565b34801561054357600080fd5b50600254610414565b34801561055857600080fd5b50601354610414565b34801561056d57600080fd5b5061046961057c366004613434565b610f57565b34801561058d57600080fd5b5061041460135481565b3480156105a357600080fd5b506104996105b2366004613400565b611001565b3480156105c357600080fd5b50601254610414565b3480156105d857600080fd5b506040516012815260200161041e565b3480156105f457600080fd5b50610499610603366004613400565b611107565b34801561061457600080fd5b506104696106233660046133b4565b6111dc565b34801561063457600080fd5b50610499611218565b34801561064957600080fd5b506019546104699060ff1681565b34801561066357600080fd5b50610414600f5481565b34801561067957600080fd5b5061051f610688366004613400565b61127c565b34801561069957600080fd5b5061041460125481565b3480156106af57600080fd5b5061051f7f0000000000000000000000005d253b573d689d1e8b885f260d2c93f08dfea52781565b3480156106e357600080fd5b506010546104699060ff1681565b3480156106fd57600080fd5b50610414601a5481565b34801561071357600080fd5b5061051f7f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b34801561074757600080fd5b506019546104699062010000900460ff1681565b34801561076757600080fd5b50601954610469906301000000900460ff1681565b34801561078857600080fd5b50610499610797366004613419565b6112d7565b3480156107a857600080fd5b50610499611418565b3480156107bd57600080fd5b506104996107cc36600461347e565b61147a565b3480156107dd57600080fd5b506104146107ec366004613419565b6001600160a01b031660009081526020819052604090205490565b34801561081357600080fd5b506104996115d8565b34801561082857600080fd5b5061049961164c565b34801561083d57600080fd5b5061049961084c36600461347e565b6116ab565b34801561085d57600080fd5b5060105461051f90630100000090046001600160a01b031681565b34801561088457600080fd5b5061088d611797565b60405161041e91906134f9565b3480156108a657600080fd5b506104696108b536600461350c565b6117a3565b3480156108c657600080fd5b5061041460095481565b3480156108dc57600080fd5b50610499611971565b3480156108f157600080fd5b506005546001600160a01b031661051f565b34801561090f57600080fd5b50610499611a35565b34801561092457600080fd5b5061043c611ae0565b34801561093957600080fd5b5061041460065481565b34801561094f57600080fd5b5061049961095e36600461347e565b611aef565b34801561096f57600080fd5b5061046961097e3660046133b4565b611bcf565b34801561098f57600080fd5b5061046961099e3660046133b4565b611c71565b3480156109af57600080fd5b50610499611c7e565b3480156109c457600080fd5b5061051f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b3480156109f857600080fd5b50610499610a0736600461353f565b611ce4565b348015610a1857600080fd5b50610414600c5481565b348015610a2e57600080fd5b506010546104699062010000900460ff1681565b348015610a4e57600080fd5b5060195461046990610100900460ff1681565b348015610a6d57600080fd5b50610469610a7c366004613419565b60166020526000908152604090205460ff1681565b348015610a9d57600080fd5b5060105461046990610100900460ff1681565b348015610abc57600080fd5b50610499611dc4565b348015610ad157600080fd5b50610499610ae036600461347e565b611dfd565b348015610af157600080fd5b50600d5461051f906001600160a01b031681565b348015610b1157600080fd5b50610499610b20366004613400565b611e86565b348015610b3157600080fd5b50610499610b4036600461353f565b611f38565b348015610b5157600080fd5b506012546013546040805192835260208301919091520161041e565b348015610b7957600080fd5b50601b546104699060ff1681565b348015610b9357600080fd5b50610414610ba236600461350c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610bd957600080fd5b50610469610be8366004613419565b60116020526000908152604090205460ff1681565b348015610c0957600080fd5b50610414600b5481565b348015610c1f57600080fd5b50610414600e5481565b348015610c3557600080fd5b50610499610c44366004613419565b611fa5565b348015610c5557600080fd5b50610499612090565b348015610c6a57600080fd5b50610499610c79366004613419565b612107565b6000610c8a601761222e565b905090565b606060038054610c9e9061355c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cca9061355c565b8015610d175780601f10610cec57610100808354040283529160200191610d17565b820191906000526020600020905b815481529060010190602001808311610cfa57829003601f168201915b5050505050905090565b6000610d2e338484612238565b5060015b92915050565b6005546001600160a01b03163314610d6b5760405162461bcd60e51b8152600401610d6290613597565b60405180910390fd5b60195462010000900460ff1615610db65760405162461bcd60e51b815260206004820152600f60248201526e1199595cc8185c99481b1bd8dad959608a1b6044820152606401610d62565b610fa0821115610df35760405162461bcd60e51b8152602060048201526008602482015267486967682066656560c01b6044820152606401610d62565b610fa0811115610e305760405162461bcd60e51b8152602060048201526008602482015267486967682066656560c01b6044820152606401610d62565b6019546301000000900460ff1615610ee657601254821115610e945760405162461bcd60e51b815260206004820152601b60248201527f427579206665652063616e206f6e6c79206265206c6f776572656400000000006044820152606401610d62565b601354811115610ee65760405162461bcd60e51b815260206004820152601c60248201527f53656c6c206665652063616e206f6e6c79206265206c6f7765726564000000006044820152606401610d62565b601291909155601355565b6005546001600160a01b03163314610f1b5760405162461bcd60e51b8152600401610d6290613597565b601a8190556040518181527fed8538f95bf5eac620d8b4e5ae7523bc727f0859b90aa8e9b2ba56a072a343a7906020015b60405180910390a150565b6000610f6484848461235c565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610fe95760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d62565b610ff68533858403612238565b506001949350505050565b6005546001600160a01b0316331461102b5760405162461bcd60e51b8152600401610d6290613597565b670de0b6b3a76400006103e861104060025490565b61104b9060016135e2565b6110559190613601565b61105f9190613601565b8110156110c05760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610d62565b6110d281670de0b6b3a76400006135e2565b60098190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de4100990602001610f4c565b600d546001600160a01b031633148061112a57506005546001600160a01b031633145b6111955760405162461bcd60e51b815260206004820152603660248201527f6f6e6c7920747265617375727941646472657373206f72206f776e65722063616044820152751b8818da185b99d9481cddd85c151a1c995cda1bdb1960521b6064820152608401610d62565b6111a781670de0b6b3a76400006135e2565b600b8190556040519081527fdd535c8a292f211fa216a760a7e5e8a29a1f222e36267d33660451d7719907a690602001610f4c565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610d2e918590611213908690613623565b612238565b6005546001600160a01b031633146112425760405162461bcd60e51b8152600401610d6290613597565b6019805461ff0019166101001790556040517fb065dde7eb4e066090ff22ddf4310714e74b5fce3c0429839c0e6289d4e661b690600090a1565b6000611288601761222e565b82106112cc5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610d62565b610d32601783612a50565b600d546001600160a01b03163314806112fa57506005546001600160a01b031633145b61136c5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652074726561737572794164647265737300000000000000006064820152608401610d62565b6001600160a01b0381166113ce5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610d62565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b6005546001600160a01b031633146114425760405162461bcd60e51b8152600401610d6290613597565b601b805460ff191660011790556040517fe063a6c02b41730549afeddfdd92de633c00e61d52441baa7accc9f04453fc8490600090a1565b601054630100000090046001600160a01b03163314806114a457506005546001600160a01b031633145b61150a5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f7220736e69706572426f747347756172642063616044820152706e2073657420736e6970657220626f747360781b6064820152608401610d62565b601954610100900460ff16156115745780156115745760405162461bcd60e51b8152602060048201526024808201527f4e657720736e6970657220626f7473206172652064697361626c656420666f7260448201526332bb32b960e11b6064820152608401610d62565b6001600160a01b038216600081815260116020908152604091829020805460ff19168515159081179091558251938452908301527fce527251374acbd40073242991617eaf99a06736f116cca8b62c3f56b343d77591015b60405180910390a15050565b6005546001600160a01b031633146116025760405162461bcd60e51b8152600401610d6290613597565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b031633146116765760405162461bcd60e51b8152600401610d6290613597565b6010805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b031633146116d55760405162461bcd60e51b8152600401610d6290613597565b8061176c577f0000000000000000000000005d253b573d689d1e8b885f260d2c93f08dfea5276001600160a01b0316826001600160a01b0316141561176c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610d62565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b6060610c8a6017612a5c565b60006001600160a01b0383166117fb5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610d62565b600d546001600160a01b031633146118255760405162461bcd60e51b8152600401610d629061363b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561186757600080fd5b505afa15801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f919061367c565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190613695565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461199b5760405162461bcd60e51b8152600401610d6290613597565b601054610100900460ff16156119f35760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610d62565b6010805461ff0019166101001790556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a143600e5542600f55565b600d546001600160a01b0316336001600160a01b031614611aa75760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207472656173757279416464726573732063616e206d616e75616c6c60448201526507920737761760d41b6064820152608401610d62565b306000908152602081905260409020548015611add57600a805460ff19166001179055611ad2612a69565b600a805460ff191690555b50565b606060048054610c9e9061355c565b6005546001600160a01b03163314611b195760405162461bcd60e51b8152600401610d6290613597565b7f0000000000000000000000005d253b573d689d1e8b885f260d2c93f08dfea5276001600160a01b0316826001600160a01b03161415611bc15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610d62565b611bcb8282612d6d565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120546000198114611c675782811015611c5a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d62565b611c673385858403612238565b5060019392505050565b6000610d2e33848461235c565b6005546001600160a01b03163314611ca85760405162461bcd60e51b8152600401610d6290613597565b6019805462ff00001916620100001790556040517f8e2ddf3e3a4adecfbb403ceb7654310a3e2a1a12e0ff20b9f11b3f43dc9e53ec90600090a1565b600d546001600160a01b0316331480611d0757506005546001600160a01b031633145b611d795760405162461bcd60e51b815260206004820152603d60248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652073776170466565734f6e6365506572426c6f636b0000006064820152608401610d62565b60108054821515620100000262ff0000199091161790556040517f2fa5fbcffe30a751dee9af9329ea1957ba6d758d5c4a70839ceeb35419b527ff90610f4c90831515815260200190565b6005546001600160a01b03163314611dee5760405162461bcd60e51b8152600401610d6290613597565b6019805460ff19166001179055565b6005546001600160a01b03163314611e275760405162461bcd60e51b8152600401610d6290613597565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611eb05760405162461bcd60e51b8152600401610d6290613597565b60195460ff1615611f035760405162461bcd60e51b815260206004820152601960248201527f666f726576657220667265657a6520697320656e61626c6564000000000000006044820152606401610d62565b60068190556040518181527f5912810215448e6367d51429af7c6d935e2f22e406116d0b05231bc37192e89690602001610f4c565b6005546001600160a01b03163314611f625760405162461bcd60e51b8152600401610d6290613597565b6019805463ff00000019166301000000831515021790556040517f176352ccb4a25e1868a6d5942387e086fc33d7a3498ab4f7eaf1905d24510a7990600090a150565b6005546001600160a01b03163314611fcf5760405162461bcd60e51b8152600401610d6290613597565b6001600160a01b0381166120345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d62565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d546001600160a01b031633146120ba5760405162461bcd60e51b8152600401610d629061363b565b604051600090339047908381818185875af1925050503d80600081146120fc576040519150601f19603f3d011682016040523d82523d6000602084013e612101565b606091505b50505050565b6005546001600160a01b03163314806121315750601054630100000090046001600160a01b031633145b6121a35760405162461bcd60e51b815260206004820152603760248201527f4f6e6c79206f776e6572206f7220736e69706572426f7473477561726420636160448201527f6e2073657420736e6970657220626f74732067756172640000000000000000006064820152608401610d62565b601080546301000000600160b81b03191663010000006001600160a01b038416908102919091179091556040519081527f7d336579c7b78abefdb31775591f73094fe64f8cc10fa89faaf23b7957acd05290602001610f4c565b6000612212836001600160a01b038416612dd7565b9392505050565b6000612212836001600160a01b038416612e26565b6000610d32825490565b6001600160a01b03831661229a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d62565b6001600160a01b0382166122fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d62565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123825760405162461bcd60e51b8152600401610d62906136b2565b6001600160a01b0382166123a85760405162461bcd60e51b8152600401610d62906136f7565b600081116123f85760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610d62565b6001600160a01b03831660009081526011602052604090205460ff1615801561243a57506001600160a01b03821660009081526011602052604090205460ff16155b6124865760405162461bcd60e51b815260206004820152601b60248201527f536e6970657220626f747320617265206e6f7420616c6c6f77656400000000006044820152606401610d62565b6008544390811461249c57600060075560088190555b6001600160a01b0380851660009081526016602052604080822054928616825290205460ff918216911681806124cf5750805b1561254b576001600760008282546124e79190613623565b909155505060065415806124ff575060065460075411155b61254b5760405162461bcd60e51b815260206004820152601c60248201527f4d61782073776170732070657220626c6f636b206578636565646564000000006044820152606401610d62565b505060105460ff161590506127dc576005546001600160a01b0384811691161480159061258657506005546001600160a01b03838116911614155b801561259a57506001600160a01b03821615155b80156125b157506001600160a01b03821661dead14155b156127dc57601054610100900460ff1661269f576001600160a01b03831660009081526015602052604090205460ff168061260457506001600160a01b03821660009081526015602052604090205460ff165b6126495760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610d62565b6005546001600160a01b0384811691161461269f5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610d62565b6001600160a01b03831660009081526016602052604090205460ff1680156126e057506001600160a01b03821660009081526015602052604090205460ff16155b1561274d576009548111156127485760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610d62565b6127dc565b6001600160a01b03821660009081526016602052604090205460ff16801561278e57506001600160a01b03831660009081526015602052604090205460ff16155b15612798576127dc565b6001600160a01b03821660009081526015602052604090205460ff161580156127da57506001600160a01b03831660009081526015602052604090205460ff16155b505b30600090815260208190526040902054600b54811080159081906128075750601054610100900460ff165b80156128165750600a5460ff16155b801561283b57506001600160a01b03851660009081526016602052604090205460ff16155b801561286057506001600160a01b03851660009081526014602052604090205460ff16155b801561288557506001600160a01b03841660009081526014602052604090205460ff16155b156128aa57600a805460ff1916600117905561289f612a69565b600a805460ff191690555b6001600160a01b03851660009081526014602052604090205460019060ff16806128ec57506001600160a01b03851660009081526014602052604090205460ff165b156128f5575060005b80801561290457506000600e54115b80156129115750600e5443115b15612a22576001600160a01b03851660009081526016602052604081205460ff1680156129465750600061294460135490565b115b156129725761271061295760135490565b61296190876135e2565b61296b9190613601565b90506129ca565b6001600160a01b03871660009081526016602052604090205460ff1680156129a2575060006129a060125490565b115b156129ca576127106129b360125490565b6129bd90876135e2565b6129c79190613601565b90505b80156129db576129db873083612f19565b6129e5818661373a565b94507fff9891726fac64d7faf6508ce9e13ff651decd82208eeef75b4070d78bdfbdf681604051612a1891815260200190565b60405180910390a1505b612a2d868686612f19565b612a368661306e565b612a3f8561306e565b612a483061306e565b505050505050565b600061221283836130b9565b60606000612212836130e3565b600f54151580612a7c5750601b5460ff16155b15612a8357565b3060009081526020819052604090205480612a9b5750565b60105462010000900460ff168015612ab4575043600c54145b15612ae5576040517fdf46401eb14e1af2c0c5feb3f3e452741543196d05bd8fbd21d02ea36c37c66e90600090a150565b43600c8190556040519081527f5f21bcd6e339b486d1b832e2afa5445d204e289a043a519ef679765a05b5e8659060200160405180910390a16040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110612b7357612b73613767565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612ba757612ba7613767565b6001600160a01b0390921660209283029190910190910152601a5415612cbd5760006103e8601a54670de0b6b3a7640000612be291906135e2565b612bec9190613601565b905060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663d06ca61f83856040518363ffffffff1660e01b8152600401612c3e92919061377d565b60006040518083038186803b158015612c5657600080fd5b505afa158015612c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612c92919081019061379e565b600181518110612ca457612ca4613767565b6020026020010151905080841115612cba578093505b50505b81612cc6575050565b612ccf8261313f565b4715611bcb57600d5460405147916000916001600160a01b039091169083908381818185875af1925050503d8060008114612d26576040519150601f19603f3d011682016040523d82523d6000602084013e612d2b565b606091505b5050905080612101576040518281527fbadfc899aa55ad2409d9e979ba00adcb737921dcfce412d4f7f1deeb466039eb9060200160405180910390a150505050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055612d9b82826132e7565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000818152600183016020526040812054612e1e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d32565b506000610d32565b60008181526001830160205260408120548015612f0f576000612e4a60018361373a565b8554909150600090612e5e9060019061373a565b9050818114612ec3576000866000018281548110612e7e57612e7e613767565b9060005260206000200154905080876000018481548110612ea157612ea1613767565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ed457612ed461385c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d32565b6000915050610d32565b6001600160a01b038316612f3f5760405162461bcd60e51b8152600401610d62906136b2565b6001600160a01b038216612f655760405162461bcd60e51b8152600401610d62906136f7565b6001600160a01b03831660009081526020819052604090205481811015612fdd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d62565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613014908490613623565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161306091815260200190565b60405180910390a350505050565b6001600160a01b03811661307f5750565b6001600160a01b03811660009081526020819052604090205480156130ae576130a96017836121fd565b505050565b6130a9601783612219565b60008260000182815481106130d0576130d0613767565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561313357602002820191906000526020600020905b81548152602001906001019080831161311f575b50505050509050919050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061317457613174613767565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2816001815181106131c8576131c8613767565b60200260200101906001600160a01b031690816001600160a01b031681525050613213307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612238565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061326a908690600090879030904290600401613872565b600060405180830381600087803b15801561328457600080fd5b505af1158015613298573d6000803e3d6000fd5b505050507f877973055cc76aebb6c1702046758fb56e804bca4a8bf998824b99ed02bbbafd8382476132ca919061373a565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd674691016115cc565b600060208083528351808285015260005b8181101561337057858101830151858201604001528201613354565b81811115613382576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146133af57600080fd5b919050565b600080604083850312156133c757600080fd5b6133d083613398565b946020939093013593505050565b600080604083850312156133f157600080fd5b50508035926020909101359150565b60006020828403121561341257600080fd5b5035919050565b60006020828403121561342b57600080fd5b61221282613398565b60008060006060848603121561344957600080fd5b61345284613398565b925061346060208501613398565b9150604084013590509250925092565b8015158114611add57600080fd5b6000806040838503121561349157600080fd5b61349a83613398565b915060208301356134aa81613470565b809150509250929050565b600081518084526020808501945080840160005b838110156134ee5781516001600160a01b0316875295820195908201906001016134c9565b509495945050505050565b60208152600061221260208301846134b5565b6000806040838503121561351f57600080fd5b61352883613398565b915061353660208401613398565b90509250929050565b60006020828403121561355157600080fd5b813561221281613470565b600181811c9082168061357057607f821691505b6020821081141561359157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156135fc576135fc6135cc565b500290565b60008261361e57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115613636576136366135cc565b500190565b60208082526021908201527f6f6e6c79207472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b60006020828403121561368e57600080fd5b5051919050565b6000602082840312156136a757600080fd5b815161221281613470565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561374c5761374c6135cc565b500390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b82815260406020820152600061379660408301846134b5565b949350505050565b600060208083850312156137b157600080fd5b825167ffffffffffffffff808211156137c957600080fd5b818501915085601f8301126137dd57600080fd5b8151818111156137ef576137ef613751565b8060051b604051601f19603f8301168101818110858211171561381457613814613751565b60405291825284820192508381018501918883111561383257600080fd5b938501935b8285101561385057845184529385019392850192613837565b98975050505050505050565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a06040820152600061389160a08301866134b5565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212209761604db02027eedaefe5c2d0cc095b9a48d1e5ea5dda6037328be4a69fe09964736f6c63430008080033

Loading...
Loading
Loading...
Loading
[ 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.