Token New Frontier Presents

Gaming 
 

Overview [ERC-20]

Max Total Supply:
2,000,000,000 NFP

Holders:
361 (0.00%)

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Bridging the gap between the real world and the digital world, New Frontier Presents offers the ability to create entertainment experiences within the metaverse.

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ODC

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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);
    

}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    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() public 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;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract ODC is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    address payable private treasuryWallet = payable(0xBbD5358D15eEcd098e49Fed583ad5C368bc43E24); // team  Wallet

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isSniper;
    mapping (address => uint256) _balances;

    uint256 public deadBlocks = 2;
    uint256 public launchedAt;


    uint256 public thresholdPercent = 20;
    uint256 public thresholdDivisor = 1000;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isMaxWalletExempt;
    mapping (address => bool) private _isTrusted;
    mapping (address => uint256) public nonces;
    address[] private _excluded;
    
   
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint8 private _decimals = 9;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private _totalSupply = 2 * 10 ** 9 * 10 ** _decimals;


    string private _name = "New Frontier Presents";
    string private _symbol = "NFP";
    string private _version = "1";
    

    uint256 public _maxWalletToken = _totalSupply.div(1000).mul(6); //0.6% for first hour
    uint256 public maxTx = _totalSupply.div(1000).mul(3); //0.3 for first hour

    uint256 public _buyLiquidityFee = 40;
    uint256 public _buytreasuryFee = 40;      

    uint256 public _sellLiquidityFee = 100;
    uint256 public _selltreasuryFee = 100;  


    uint256 private sellTotalFee =
        _sellLiquidityFee.add(_selltreasuryFee);
    //uint256 private currenttotalFee = sellTotalFee;
   
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap;
    
    bool public tradingOpen = false;
    bool public zeroBuyTaxmode = false;
    bool private antiBotmode = true;
    bool public maxTXEnabled = true;


    //eip 712
    uint256 public immutable deploymentChainId;
    bytes32 private immutable _DOMAIN_SEPARATOR;
    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    event AddLiquidity(
        uint256 tokenAmount,
        uint256 amountEth
    );
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }  

    constructor () {

       _balances[msg.sender] = _totalSupply;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isMaxWalletExempt[owner()] = true;
        _isMaxWalletExempt[address(this)] = true;
        _isMaxWalletExempt[uniswapV2Pair] = true;
        _isMaxWalletExempt[DEAD] = true;
        _isTrusted[owner()] = true;
        _isTrusted[uniswapV2Pair] = true;
        uint256 chainId;
        assembly {chainId := chainid()}
        deploymentChainId = chainId;
        _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId);

        emit Transfer(address(0), _msgSender(), _totalSupply);
    }
    // 712
    function _calculateDomainSeparator(uint256 chainId) private view returns (bytes32) {
        return
        keccak256(
            abi.encode(
            keccak256(
                "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
            ),
            keccak256(bytes(_name)),
            keccak256(bytes(_version)),
            chainId,
            address(this)
            )
        );
    }

    function DOMAIN_SEPARATOR() external view returns (bytes32) {
        uint256 chainId;
        assembly {
        chainId := chainid()
        }
        return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId);
    }

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

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(block.timestamp <= deadline, "Permit-expired");

        uint256 chainId;
        assembly {chainId := chainid()}

        bytes32 digest =
        keccak256(abi.encodePacked(
            "\x19\x01",
            chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId),
            keccak256(abi.encode(
                PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                nonces[owner]++,
                deadline
            ))
        ));
        require(owner != address(0) && owner == ecrecover(digest, v, r, s), "Invalid-permit");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[to], "Sorry no Snippers");
        require(!_isSniper[from], "Sorry no Snippers");
        if (from!= owner() && to!= owner()){
          require(tradingOpen, "Trading not enabled."); //transfers disabled before openTrading
          if(maxTXEnabled){
              require(amount <= maxTx,"over max transaction");
          }
        } 

        uint256 currenttotalFee;
        //take fee on swaps

        if(launchedAt>0 && (!_isMaxWalletExempt[to] && from!= owner()) && ((launchedAt + 240) >= block.number) && antiBotmode){
                require(amount+ balanceOf(to) <= _maxWalletToken,
                    "Total Holding is currently limited");
        }

        if(tradingOpen && to == uniswapV2Pair){//sell
            currenttotalFee = sellTotalFee;
        }

        if(tradingOpen && from == uniswapV2Pair) { //buy
            currenttotalFee= _buyLiquidityFee.add(_buytreasuryFee);
        }
        
        //antibot - first X blocks
        if(launchedAt>0 && (launchedAt + deadBlocks) > block.number){
                _isSniper[to]=true;
        }
        
        //high slippage bot txns go through here
        if(launchedAt>0 && from!= owner() && block.number <= (launchedAt + deadBlocks)  && antiBotmode){
                currenttotalFee=900;    //90%
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || from == owner()){//privileged
            currenttotalFee = 0;
        }

        if(zeroBuyTaxmode){
             if(tradingOpen && from == uniswapV2Pair) { //buys
                    currenttotalFee=0;
             }
        }

        //sell
        if (!inSwap && tradingOpen && to == uniswapV2Pair) {
      
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance >= curentSwapThreshold()){
                    swapAndsendEth();
            }
          
        }
        
        _transferStandard(from, to, amount, currenttotalFee);
    }

    function swapAndsendEth() private lockTheSwap{
        uint256 amountToLiquify;
        if ( _sellLiquidityFee > 0 ){
            amountToLiquify = curentSwapThreshold()
                .mul(_sellLiquidityFee)
                .div(sellTotalFee)
                .div(2);
        }

        swapTokensForEth(amountToLiquify);

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = sellTotalFee.sub(_sellLiquidityFee.div(2));

        if (sellTotalFee > 0){
            uint256 amountETHLiquidity = amountETH
                .mul(_sellLiquidityFee)
                .div(sellTotalFee)
                .div(2);

            //Send to treasury wallet and liquidity
            if(amountETH > 0) {

                uint256 marketingDevETHAllocation = amountETH
                    .mul(_selltreasuryFee)
                    .div(totalETHFee);

                (bool mSuccess,) = address(treasuryWallet).call{value: marketingDevETHAllocation}("");
                require(mSuccess);
                emit Transfer(address(this),treasuryWallet, marketingDevETHAllocation);
                
                }
            if (amountToLiquify > 0) {
                addLiquidity(amountToLiquify,amountETHLiquidity);
            }
        }
        else{
            if(amountETH > 0){
                (bool mSuccess,) = address(treasuryWallet).call{value: amountETH}("");
                require(mSuccess);
                emit Transfer(address(this),treasuryWallet, amountETH);
            }
        }
    }
   
    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] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );

        emit AddLiquidity(tokenAmount, ethAmount);
    }

    function _sendTransfer(
        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 _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        uint256 curentTotalFee
        ) private {

        if (curentTotalFee == 0) {
            _sendTransfer(sender, recipient, tAmount);
        } 
        else {
            uint256 calcualatedFee = tAmount.mul(curentTotalFee).div(10**3);
            uint256 amountForRecipient = tAmount.sub(calcualatedFee);
            _sendTransfer(sender, recipient, amountForRecipient);
            _sendTransfer(sender, address(this), calcualatedFee);
        }
    }

    function curentSwapThreshold() public view returns(uint256){
        return (balanceOf(uniswapV2Pair).mul(thresholdPercent).div(thresholdDivisor));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function isSniper(address account) public view returns (bool) {
        return _isSniper[account];
    }

    function setMaxTx(uint256 amount) external onlyOwner{
      maxTx = amount;
    }
    
    function toggleMaxTx(bool _state) external onlyOwner{
      maxTXEnabled = _state;
    }

    function openTrading(bool _status,uint256 _deadBlocks) external onlyOwner() {
        tradingOpen = _status;
        if(tradingOpen && launchedAt == 0){
            launchedAt = block.number;
            deadBlocks = _deadBlocks;
        }
    }
    
    function setZeroBuyTaxmode(bool _status) external onlyOwner() {
       zeroBuyTaxmode=_status;
    }

    function setAntiBotmode(bool _status) external onlyOwner() {
       antiBotmode=_status;
    }
    
    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            uniswapV2Pair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            uniswapV2Pair = get_pair;
        }
        uniswapV2Router = _newRouter;
    }
    
    function manage_Snipers(address[] calldata addresses, bool status, bool _override) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            if(!_isTrusted[addresses[i]] || _override){
                _isSniper[addresses[i]] = status;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function excludeMultiple(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isExcludedFromFee[addresses[i]] = true;
        }
    } 
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTeamWallet(address _wallet) external onlyOwner() {
        treasuryWallet = payable(_wallet);
    }
    
    function manage_trusted(address[] calldata addresses) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            _isTrusted[addresses[i]]=true;
        }
    }
   
    function withDrawLeftoverETH(address payable receipient) public onlyOwner {
        receipient.transfer(address(this).balance);
    }

    function withdrawStuckTokens(IERC20 token, address to) public onlyOwner {
        uint256 balance = token.balanceOf(address(this));
        token.transfer(to, balance);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = _totalSupply.div(1000).mul(maxWallPercent_base1000);
    }

    function setMaxWalletExempt(address _addr) external onlyOwner {
        _isMaxWalletExempt[_addr] = true;
    }

    function setSwapSettings(uint256 _thresholdPercent, uint256 _thresholdDivisor) external onlyOwner {
        thresholdPercent = _thresholdPercent;
        thresholdDivisor = _thresholdDivisor;
    }

    function manualSwapAndSend() public onlyOwner {
        swapTokensForEth(balanceOf(address(this)));
        (bool mSuccess,) = address(treasuryWallet).call{value: address(this).balance}("");
        require(mSuccess);
    }

    function setTaxesBuy( uint256 _liquidityFee, uint256 _teamFee) external onlyOwner {
       
        _buyLiquidityFee = _liquidityFee;
        _buytreasuryFee = _teamFee;
    
    }

    function setTaxesSell(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {

        _sellLiquidityFee = _liquidityFee;
        _selltreasuryFee = _devFee;
        
        sellTotalFee = _sellLiquidityFee.add(_selltreasuryFee);

    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountEth","type":"uint256"}],"name":"AddLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buytreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_selltreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curentSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadBlocks","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":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"},{"internalType":"bool","name":"_override","type":"bool"}],"name":"manage_Snipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"manage_trusted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTXEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_deadBlocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBotmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"_thresholdDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setZeroBuyTaxmode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thresholdDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thresholdPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"toggleMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"receipient","type":"address"}],"name":"withDrawLeftoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroBuyTaxmode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600380546001600160a01b03191673bbd5358d15eecd098e49fed583ad5c368bc43e24179055600260075560146009556103e8600a908155601080547409000000000000000000000000000000000000dead6001600160a81b031990911617908190556200007e91600160a01b90910460ff169062000933565b6200008e90637735940062000944565b6011556040805180820190915260158082527f4e65772046726f6e746965722050726573656e747300000000000000000000006020909201918252620000d7916012916200077a565b506040805180820190915260038082526204e46560ec1b602090920191825262000104916013916200077a565b50604080518082019091526001808252603160f81b60209092019182526200012f916014916200077a565b50620001686006620001546103e86011546200056360201b62001c201790919060201c565b620005b660201b62001c691790919060201c565b6015556200018f6003620001546103e86011546200056360201b62001c201790919060201c565b6016556028601755602860185560646019556064601a55620001c4601a546019546200064160201b62001ce81790919060201c565b601b55601d805463ffffffff60a81b191661010160b81b179055348015620001eb57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506011543360009081526006602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a015592600480830193928290030181865afa15801562000294573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ba919062000966565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e919062000966565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200037c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a2919062000966565b601d80546001600160a01b03199081166001600160a01b0393841617909155601c80549091169183169190911790556001600b6000620003ea6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b909252812080549092166001908117909255600c90620004436000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c909352818320805485166001908117909155601d54821684528284208054861682179055601054909116835290822080549093168117909255600d90620004c56000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055601d549091168152600d9092529020805490911660011790554660808190526200051d81620006a4565b60a05260115460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000b08565b6000620005ad83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200073e60201b60201c565b90505b92915050565b600082620005c757506000620005b0565b6000620005d5838562000944565b905082620005e4858362000991565b14620005ad5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b600080620006508385620009b4565b905083811015620005ad5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000638565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6012604051620006d8919062000a0c565b60405180910390206014604051620006f1919062000a0c565b6040805191829003822060208301949094528101919091526060810191909152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b60008183620007625760405162461bcd60e51b815260040162000638919062000ab0565b50600062000771848662000991565b95945050505050565b8280546200078890620009cf565b90600052602060002090601f016020900481019282620007ac5760008555620007f7565b82601f10620007c757805160ff1916838001178555620007f7565b82800160010185558215620007f7579182015b82811115620007f7578251825591602001919060010190620007da565b506200080592915062000809565b5090565b5b808211156200080557600081556001016200080a565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008775781600019048211156200085b576200085b62000820565b808516156200086957918102915b93841c93908002906200083b565b509250929050565b6000826200089057506001620005b0565b816200089f57506000620005b0565b8160018114620008b85760028114620008c357620008e3565b6001915050620005b0565b60ff841115620008d757620008d762000820565b50506001821b620005b0565b5060208310610133831016604e8410600b841016171562000908575081810a620005b0565b62000914838362000836565b80600019048211156200092b576200092b62000820565b029392505050565b6000620005ad60ff8416836200087f565b600081600019048311821515161562000961576200096162000820565b500290565b6000602082840312156200097957600080fd5b81516001600160a01b0381168114620005ad57600080fd5b600082620009af57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009ca57620009ca62000820565b500190565b600181811c90821680620009e457607f821691505b6020821081141562000a0657634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c91508083168062000a2957607f831692505b602080841082141562000a4a57634e487b7160e01b86526022600452602486fd5b81801562000a61576001811462000a735762000aa2565b60ff1986168952848901965062000aa2565b60008a81526020902060005b8681101562000a9a5781548b82015290850190830162000a7f565b505084890196505b509498975050505050505050565b600060208083528351808285015260005b8181101562000adf5785810183015185820160400152820162000ac1565b8181111562000af2576000604083870101525b50601f01601f1916929092016040019392505050565b60805160a05161329262000b4360003960008181610e68015261159501526000818161094001528181610e33015261156001526132926000f3fe60806040526004361061036f5760003560e01c8063743942b6116101c6578063bc337182116100f7578063dc44b6a011610095578063eafb5a3c1161006f578063eafb5a3c14610a34578063f2fde38b14610a54578063fabb0b4f14610a74578063ffb54a9914610a8a57600080fd5b8063dc44b6a0146109b8578063dd62ed3e146109ce578063ea2f0b3714610a1457600080fd5b8063cd0d0096116100d1578063cd0d00961461092e578063cfc16cea14610962578063d222b31114610978578063d505accf1461099857600080fd5b8063bc337182146108d8578063bc7c0dd1146108f8578063bf56b3711461091857600080fd5b806394d79ce311610164578063a457c2d71161013e578063a457c2d714610863578063a525687b14610883578063a9059cbb14610898578063b8623f56146108b857600080fd5b806394d79ce31461081857806395d89b41146108385780639a76efb41461084d57600080fd5b806384530c46116101a057806384530c46146107a457806388790a68146107c45780638da5cb5b146107da5780638f4590d2146107f857600080fd5b8063743942b61461074157806378109e54146107615780637ecebe001461077757600080fd5b8063313ce567116102a057806349bd5a5e1161023e578063598769141161021857806359876914146106c057806370a08231146106e0578063715018a6146107165780637437681e1461072b57600080fd5b806349bd5a5e1461065f5780634b01547f1461067f5780634e45e92a1461069f57600080fd5b80633ddf65ab1161027a5780633ddf65ab146105f45780633ee0ce0214610614578063437823ec1461062957806344cbf0541461064957600080fd5b8063313ce567146105935780633644e515146105bf57806339509351146105d457600080fd5b806323b872dd1161030d5780632d4103d6116102e75780632d4103d6146105095780632dd5efe7146105295780632e2c01451461054957806330adf81f1461055f57600080fd5b806323b872dd146104a857806325b86edf146104c85780632691bc80146104e857600080fd5b80630f3a325f116103495780630f3a325f146103f85780631525ff7d146104315780631694505e1461045157806318160ddd1461048957600080fd5b806306fdde031461037b57806309302dc6146103a6578063095ea7b3146103c857600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610aab565b60405161039d9190612b84565b60405180910390f35b3480156103b257600080fd5b506103c66103c1366004612bd9565b610b3d565b005b3480156103d457600080fd5b506103e86103e3366004612c07565b610b97565b604051901515815260200161039d565b34801561040457600080fd5b506103e8610413366004612c33565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561043d57600080fd5b506103c661044c366004612c33565b610bae565b34801561045d57600080fd5b50601c54610471906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b34801561049557600080fd5b506011545b60405190815260200161039d565b3480156104b457600080fd5b506103e86104c3366004612c50565b610bfa565b3480156104d457600080fd5b506103c66104e3366004612c91565b610c63565b3480156104f457600080fd5b50601d546103e890600160b01b900460ff1681565b34801561051557600080fd5b506103c6610524366004612cd8565b610d75565b34801561053557600080fd5b506103c6610544366004612c33565b610de0565b34801561055557600080fd5b5061049a601a5481565b34801561056b57600080fd5b5061049a7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b34801561059f57600080fd5b50601054600160a01b900460ff1660405160ff909116815260200161039d565b3480156105cb57600080fd5b5061049a610e2e565b3480156105e057600080fd5b506103e86105ef366004612c07565b610e8e565b34801561060057600080fd5b506103c661060f366004612cf6565b610ec4565b34801561062057600080fd5b506103c6610f0c565b34801561063557600080fd5b506103c6610644366004612c33565b610fb2565b34801561065557600080fd5b5061049a600a5481565b34801561066b57600080fd5b50601d54610471906001600160a01b031681565b34801561068b57600080fd5b506103c661069a366004612cf6565b611000565b3480156106ab57600080fd5b50601d546103e890600160c01b900460ff1681565b3480156106cc57600080fd5b506103c66106db366004612d13565b611048565b3480156106ec57600080fd5b5061049a6106fb366004612c33565b6001600160a01b031660009081526006602052604090205490565b34801561072257600080fd5b506103c661107d565b34801561073757600080fd5b5061049a60165481565b34801561074d57600080fd5b506103c661075c366004612c33565b6110f1565b34801561076d57600080fd5b5061049a60155481565b34801561078357600080fd5b5061049a610792366004612c33565b600e6020526000908152604090205481565b3480156107b057600080fd5b506103c66107bf366004612d81565b611150565b3480156107d057600080fd5b5061049a60195481565b3480156107e657600080fd5b506000546001600160a01b0316610471565b34801561080457600080fd5b506103c6610813366004612d13565b6111ef565b34801561082457600080fd5b506103c6610833366004612d81565b611224565b34801561084457600080fd5b506103906112be565b34801561085957600080fd5b5061049a60185481565b34801561086f57600080fd5b506103e861087e366004612c07565b6112cd565b34801561088f57600080fd5b5061049a61131c565b3480156108a457600080fd5b506103e86108b3366004612c07565b61135a565b3480156108c457600080fd5b506103c66108d3366004612dc3565b611367565b3480156108e457600080fd5b506103c66108f3366004612bd9565b61145e565b34801561090457600080fd5b506103c6610913366004612d13565b61148d565b34801561092457600080fd5b5061049a60085481565b34801561093a57600080fd5b5061049a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561096e57600080fd5b5061049a60095481565b34801561098457600080fd5b506103c6610993366004612cf6565b6114d2565b3480156109a457600080fd5b506103c66109b3366004612e2b565b61151a565b3480156109c457600080fd5b5061049a60175481565b3480156109da57600080fd5b5061049a6109e9366004612c91565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a2057600080fd5b506103c6610a2f366004612c33565b6117bf565b348015610a4057600080fd5b506103c6610a4f366004612c33565b61180a565b348015610a6057600080fd5b506103c6610a6f366004612c33565b611b36565b348015610a8057600080fd5b5061049a60075481565b348015610a9657600080fd5b50601d546103e890600160a81b900460ff1681565b606060128054610aba90612ea2565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae690612ea2565b8015610b335780601f10610b0857610100808354040283529160200191610b33565b820191906000526020600020905b815481529060010190602001808311610b1657829003601f168201915b5050505050905090565b6000546001600160a01b03163314610b705760405162461bcd60e51b8152600401610b6790612edd565b60405180910390fd5b610b9181610b8b6103e8601154611c2090919063ffffffff16565b90611c69565b60155550565b6000610ba4338484611d47565b5060015b92915050565b6000546001600160a01b03163314610bd85760405162461bcd60e51b8152600401610b6790612edd565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610c07848484611e6b565b610c598433610c5485604051806060016040528060288152602001613210602891396001600160a01b038a16600090815260046020908152604080832033845290915290205491906123cd565b611d47565b5060019392505050565b6000546001600160a01b03163314610c8d5760405162461bcd60e51b8152600401610b6790612edd565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf89190612f12565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303816000875af1158015610d4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6f9190612f2b565b50505050565b6000546001600160a01b03163314610d9f5760405162461bcd60e51b8152600401610b6790612edd565b601d805460ff60a81b1916600160a81b8415158102919091179182905560ff9104168015610dcd5750600854155b15610ddc574360085560078190555b5050565b6000546001600160a01b03163314610e0a5760405162461bcd60e51b8152600401610b6790612edd565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610e6657610e6181612407565b610e88565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610ba4918590610c549086611ce8565b6000546001600160a01b03163314610eee5760405162461bcd60e51b8152600401610b6790612edd565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610f365760405162461bcd60e51b8152600401610b6790612edd565b30600090815260066020526040902054610f4f9061249d565b6003546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610f9c576040519150601f19603f3d011682016040523d82523d6000602084013e610fa1565b606091505b5050905080610faf57600080fd5b50565b6000546001600160a01b03163314610fdc5760405162461bcd60e51b8152600401610b6790612edd565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b0316331461102a5760405162461bcd60e51b8152600401610b6790612edd565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146110725760405162461bcd60e51b8152600401610b6790612edd565b601791909155601855565b6000546001600160a01b031633146110a75760405162461bcd60e51b8152600401610b6790612edd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461111b5760405162461bcd60e51b8152600401610b6790612edd565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ddc573d6000803e3d6000fd5b6000546001600160a01b0316331461117a5760405162461bcd60e51b8152600401610b6790612edd565b60005b818110156111ea576001600d600085858581811061119d5761119d612f48565b90506020020160208101906111b29190612c33565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556111e381612f74565b905061117d565b505050565b6000546001600160a01b031633146112195760405162461bcd60e51b8152600401610b6790612edd565b600991909155600a55565b6000546001600160a01b0316331461124e5760405162461bcd60e51b8152600401610b6790612edd565b60005b818110156111ea576001600b600085858581811061127157611271612f48565b90506020020160208101906112869190612c33565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556112b781612f74565b9050611251565b606060138054610aba90612ea2565b6000610ba43384610c5485604051806060016040528060258152602001613238602591393360009081526004602090815260408083206001600160a01b038d16845290915290205491906123cd565b600a54600954601d546001600160a01b0316600090815260066020526040812054909261135592909161134f9190610b8b565b90611c20565b905090565b6000610ba4338484611e6b565b6000546001600160a01b031633146113915760405162461bcd60e51b8152600401610b6790612edd565b60005b8381101561145757600d60008686848181106113b2576113b2612f48565b90506020020160208101906113c79190612c33565b6001600160a01b0316815260208101919091526040016000205460ff1615806113ed5750815b1561144757826005600087878581811061140957611409612f48565b905060200201602081019061141e9190612c33565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b61145081612f74565b9050611394565b5050505050565b6000546001600160a01b031633146114885760405162461bcd60e51b8152600401610b6790612edd565b601655565b6000546001600160a01b031633146114b75760405162461bcd60e51b8152600401610b6790612edd565b6019829055601a8190556114cb8282611ce8565b601b555050565b6000546001600160a01b031633146114fc5760405162461bcd60e51b8152600401610b6790612edd565b601d8054911515600160c01b0260ff60c01b19909216919091179055565b8342111561155b5760405162461bcd60e51b815260206004820152600e60248201526d14195c9b5a5d0b595e1c1a5c995960921b6044820152606401610b67565b4660007f000000000000000000000000000000000000000000000000000000000000000082146115935761158e82612407565b6115b5565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b038a166000908152600e6020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d9290919061160383612f74565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810188905260e0016040516020818303038152906040528051906020012060405160200161167c92919061190160f01b81526002810192909252602282015260420190565b60408051601f19818403018152919052805160209091012090506001600160a01b0389161580159061171b575060408051600081526020810180835283905260ff871691810191909152606081018590526080810184905260019060a0016020604051602081039080840390855afa1580156116fc573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316145b6117585760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a590b5c195c9b5a5d60921b6044820152606401610b67565b6001600160a01b038981166000818152600460209081526040808320948d16808452948252918290208b905590518a81527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050505050505050565b6000546001600160a01b031633146117e95760405162461bcd60e51b8152600401610b6790612edd565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6000546001600160a01b031633146118345760405162461bcd60e51b8152600401610b6790612edd565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189d9190612f8f565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e9190612f8f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d9190612f8f565b90506001600160a01b038116611af657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ef9190612f8f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a609190612f8f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611aad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad19190612f8f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055611b12565b601d80546001600160a01b0319166001600160a01b0383161790555b50601c80546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610b6790612edd565b6001600160a01b038116611bc55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b67565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000611c6283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612630565b9392505050565b600082611c7857506000610ba8565b6000611c848385612fac565b905082611c918583612fcb565b14611c625760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b67565b600080611cf58385612fed565b905083811015611c625760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b67565b6001600160a01b038316611da95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b67565b6001600160a01b038216611e0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b67565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611e915760405162461bcd60e51b8152600401610b6790613005565b6001600160a01b038216611eb75760405162461bcd60e51b8152600401610b679061304a565b60008111611f195760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b67565b6001600160a01b03821660009081526005602052604090205460ff1615611f765760405162461bcd60e51b8152602060048201526011602482015270536f727279206e6f20536e69707065727360781b6044820152606401610b67565b6001600160a01b03831660009081526005602052604090205460ff1615611fd35760405162461bcd60e51b8152602060048201526011602482015270536f727279206e6f20536e69707065727360781b6044820152606401610b67565b6000546001600160a01b03848116911614801590611fff57506000546001600160a01b03838116911614155b156120af57601d54600160a81b900460ff166120545760405162461bcd60e51b81526020600482015260146024820152732a3930b234b733903737ba1032b730b13632b21760611b6044820152606401610b67565b601d54600160c01b900460ff16156120af576016548111156120af5760405162461bcd60e51b815260206004820152601460248201527337bb32b91036b0bc103a3930b739b0b1ba34b7b760611b6044820152606401610b67565b6000806008541180156120f457506001600160a01b0383166000908152600c602052604090205460ff161580156120f457506000546001600160a01b03858116911614155b801561210e57504360085460f061210b9190612fed565b10155b80156121235750601d54600160b81b900460ff165b156121a7576015546001600160a01b03841660009081526006602052604090205461214e9084612fed565b11156121a75760405162461bcd60e51b815260206004820152602260248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d6974604482015261195960f21b6064820152608401610b67565b601d54600160a81b900460ff1680156121cd5750601d546001600160a01b038481169116145b156121d75750601b545b601d54600160a81b900460ff1680156121fd5750601d546001600160a01b038581169116145b156122145760185460175461221191611ce8565b90505b60006008541180156122345750436007546008546122329190612fed565b115b1561225d576001600160a01b0383166000908152600560205260409020805460ff191660011790555b600060085411801561227d57506000546001600160a01b03858116911614155b801561229857506007546008546122949190612fed565b4311155b80156122ad5750601d54600160b81b900460ff165b156122b757506103845b6001600160a01b0384166000908152600b602052604090205460ff16806122f657506001600160a01b0383166000908152600b602052604090205460ff165b8061230e57506000546001600160a01b038581169116145b15612317575060005b601d54600160b01b900460ff161561235857601d54600160a81b900460ff16801561234f5750601d546001600160a01b038581169116145b15612358575060005b601d54600160a01b900460ff1615801561237b5750601d54600160a81b900460ff165b80156123945750601d546001600160a01b038481169116145b156123c157306000908152600660205260409020546123b161131c565b81106123bf576123bf61265e565b505b610d6f84848484612891565b600081848411156123f15760405162461bcd60e51b8152600401610b679190612b84565b5060006123fe848661308d565b95945050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f601260405161243991906130a4565b6040518091039020601460405161245091906130a4565b6040805191829003822060208301949094528101919091526060810191909152608081018390523060a082015260c001604051602081830303815290604052805190602001209050919050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124d2576124d2612f48565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f9190612f8f565b8160018151811061256257612562612f48565b6001600160a01b039283166020918202929092010152601c546125889130911684611d47565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906125c1908590600090869030904290600401613184565b600060405180830381600087803b1580156125db57600080fd5b505af11580156125ef573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126249291906131c0565b60405180910390a15050565b600081836126515760405162461bcd60e51b8152600401610b679190612b84565b5060006123fe8486612fcb565b601d805460ff60a01b1916600160a01b1790556019546000901561269857612695600261134f601b5461134f601954610b8b61131c565b90505b6126a18161249d565b60195447906000906126c1906126b8906002611c20565b601b54906128e6565b601b54909150156127d35760006126ee600261134f601b5461134f60195488611c6990919063ffffffff16565b905082156127bd5760006127118361134f601a5487611c6990919063ffffffff16565b6003546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612763576040519150601f19603f3d011682016040523d82523d6000602084013e612768565b606091505b505090508061277657600080fd5b6003546040518381526001600160a01b039091169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505b83156127cd576127cd8482612928565b5061287f565b811561287f576003546040516000916001600160a01b03169084908381818185875af1925050503d8060008114612826576040519150601f19603f3d011682016040523d82523d6000602084013e61282b565b606091505b505090508061283957600080fd5b6003546040518481526001600160a01b039091169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b5050601d805460ff60a01b1916905550565b806128a6576128a1848484612a2f565b610d6f565b60006128b86103e861134f8585611c69565b905060006128c684836128e6565b90506128d3868683612a2f565b6128de863084612a2f565b505050505050565b6000611c6283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123cd565b601c546129409030906001600160a01b031684611d47565b601c546001600160a01b031663f305d7198230856000806129696000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156129d1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129f691906131e1565b505060408051848152602081018490527fcb1652de9aeec38545fc281847b3dbfc89aab56dfa907b1ab68466f602c36fb4925001612624565b6001600160a01b038316612a555760405162461bcd60e51b8152600401610b6790613005565b6001600160a01b038216612a7b5760405162461bcd60e51b8152600401610b679061304a565b6001600160a01b03831660009081526006602052604090205481811015612af35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b67565b6001600160a01b03808516600090815260066020526040808220858503905591851681529081208054849290612b2a908490612fed565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b7691815260200190565b60405180910390a350505050565b600060208083528351808285015260005b81811015612bb157858101830151858201604001528201612b95565b81811115612bc3576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215612beb57600080fd5b5035919050565b6001600160a01b0381168114610faf57600080fd5b60008060408385031215612c1a57600080fd5b8235612c2581612bf2565b946020939093013593505050565b600060208284031215612c4557600080fd5b8135611c6281612bf2565b600080600060608486031215612c6557600080fd5b8335612c7081612bf2565b92506020840135612c8081612bf2565b929592945050506040919091013590565b60008060408385031215612ca457600080fd5b8235612caf81612bf2565b91506020830135612cbf81612bf2565b809150509250929050565b8015158114610faf57600080fd5b60008060408385031215612ceb57600080fd5b8235612c2581612cca565b600060208284031215612d0857600080fd5b8135611c6281612cca565b60008060408385031215612d2657600080fd5b50508035926020909101359150565b60008083601f840112612d4757600080fd5b50813567ffffffffffffffff811115612d5f57600080fd5b6020830191508360208260051b8501011115612d7a57600080fd5b9250929050565b60008060208385031215612d9457600080fd5b823567ffffffffffffffff811115612dab57600080fd5b612db785828601612d35565b90969095509350505050565b60008060008060608587031215612dd957600080fd5b843567ffffffffffffffff811115612df057600080fd5b612dfc87828801612d35565b9095509350506020850135612e1081612cca565b91506040850135612e2081612cca565b939692955090935050565b600080600080600080600060e0888a031215612e4657600080fd5b8735612e5181612bf2565b96506020880135612e6181612bf2565b95506040880135945060608801359350608088013560ff81168114612e8557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c90821680612eb657607f821691505b60208210811415612ed757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215612f2457600080fd5b5051919050565b600060208284031215612f3d57600080fd5b8151611c6281612cca565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612f8857612f88612f5e565b5060010190565b600060208284031215612fa157600080fd5b8151611c6281612bf2565b6000816000190483118215151615612fc657612fc6612f5e565b500290565b600082612fe857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561300057613000612f5e565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561309f5761309f612f5e565b500390565b600080835481600182811c9150808316806130c057607f831692505b60208084108214156130e057634e487b7160e01b86526022600452602486fd5b8180156130f4576001811461310557613132565b60ff19861689528489019650613132565b60008a81526020902060005b8681101561312a5781548b820152908501908301613111565b505084890196505b509498975050505050505050565b600081518084526020808501945080840160005b838110156131795781516001600160a01b031687529582019590820190600101613154565b509495945050505050565b85815284602082015260a0604082015260006131a360a0830186613140565b6001600160a01b0394909416606083015250608001529392505050565b8281526040602082015260006131d96040830184613140565b949350505050565b6000806000606084860312156131f657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220648df48b9ea6511e30078b3b5f2b88300edce668d9e92831581cf576a35e99c564736f6c634300080b0033

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.