ETH Price: $2,469.78 (-8.06%)
Gas: 0.84 Gwei

Token

Idea to Image Ai (Idea2Img)
 

Overview

Max Total Supply

1,000,000 Idea2Img

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
bythegraceofthegods.eth
Balance
7,999.520205563251789062 Idea2Img

Value
$0.00
0x6c7ffd767a2d179ee1a9e89e49ecb2f8f771e837
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:
IdeatoImageAi

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-23
*/

// SPDX-License-Identifier: MIT
  
pragma solidity 0.8.21;
pragma experimental ABIEncoderV2; 

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

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


abstract contract Ownable is Context {
    address private _owner;

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


    constructor() {
        _transferOwnership(_msgSender());
    }

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


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


    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


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


    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


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];
        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");

        _beforeTokenTransfer(sender, recipient, amount);

        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);

        _afterTokenTransfer(sender, recipient, amount);
    }


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

        _beforeTokenTransfer(address(0), account, amount);

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

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), 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);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


library SafeMath {
 
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }


    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }


    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
          
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
 
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract IdeatoImageAi is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public revShareWallet;
    address public teamWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool public blacklistRenounced = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyRevShareFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTeamFee;

    uint256 public sellTotalFees;
    uint256 public sellRevShareFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTeamFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTeam;


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

    mapping(address => bool) public automatedMarketMakerPairs;


    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event teamWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Idea to Image Ai", "Idea2Img") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
           0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyRevShareFee = 20;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyTeamFee = 0;

        uint256 _sellRevShareFee = 10;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellTeamFee = 10;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 10_000 * 1e18; // 1.0%
        maxWallet = 15_000 * 1e18; // 1.5% 
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% 

        buyRevShareFee = _buyRevShareFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTeamFee = _buyTeamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;

        sellRevShareFee = _sellRevShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTeamFee = _sellTeamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;

        revShareWallet = address(0xe55621Bcc1D76223e6a5bcd8556f7a0fd31256f3); //
        teamWallet = owner(); 

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

   

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;

    }

    function removeLimit() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }


    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 12) / 1000) / 1e18,
            "Cannot set maxWallet lower than 2.1%"
        );
        maxWallet = newNum * (10**18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 8) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateBuyfees (
        uint256 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        buyRevShareFee = _revShareFee;
        buyLiquidityFee = _liquidityFee;
        buyTeamFee = _teamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;
        require(buyTotalFees <= 25, "Buy fees must be <= 25.");
    }

    function updateSellfees (
        uint256 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        sellRevShareFee = _revShareFee;
        sellLiquidityFee = _liquidityFee;
        sellTeamFee = _teamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;
        require(sellTotalFees <= 99, "Sell fees must be <= 99.");
    }

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

    function withdrawStuckToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    function updateTeamWallet(address newWallet) external onlyOwner {
        emit teamWalletUpdated(newWallet, teamWallet);
        teamWallet = newWallet;
    }

    function ExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }


    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(!blacklisted[from],"Sender blacklisted");
        require(!blacklisted[to],"Receiver blacklisted");



        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTeam += (fees * sellTeamFee) / sellTotalFees;
                tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTeam += (fees * buyTeamFee) / buyTotalFees;
                tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    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),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        
        _approve(address(this), address(uniswapV2Router), tokenAmount);


        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForRevShare +
            tokensForTeam;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForRevShare = ethBalance.mul(tokensForRevShare).div(totalTokensToSwap - (tokensForLiquidity / 2));
        
        uint256 ethForTeam = ethBalance.mul(tokensForTeam).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForRevShare - ethForTeam;

        tokensForLiquidity = 0;
        tokensForRevShare = 0;
        tokensForTeam = 0;

        (success, ) = address(teamWallet).call{value: ethForTeam}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(revShareWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":[{"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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":[],"name":"swapEnabled","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateSellfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805463ffffffff1916600117905534801562000020575f80fd5b506040518060400160405280601081526020016f4964656120746f20496d61676520416960801b815250604051806040016040528060088152602001674964656132496d6760c01b81525081600390816200007c919062000713565b5060046200008b828262000713565b505050620000a8620000a2620003c560201b60201c565b620003c9565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000ca8160016200041a565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000113573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001399190620007db565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000185573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ab9190620007db565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620001f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021c9190620007db565b6001600160a01b031660a0819052620002379060016200041a565b60a0516200024790600162000492565b69021e19e0c9bab240000060085569032d26d12e980b600000600a9081556014905f908190818169d3c21bcecceda1000000612710620002898260056200081e565b6200029591906200083e565b600955600e879055600f869055601085905584620002b487896200085e565b620002c091906200085e565b600d5560128490556013839055601482905581620002df84866200085e565b620002eb91906200085e565b601155600680546001600160a01b03191673e55621bcc1d76223e6a5bcd8556f7a0fd31256f3179055620003276005546001600160a01b031690565b600780546001600160a01b0319166001600160a01b039283161790556005546200035491166001620004e5565b62000361306001620004e5565b6200037061dead6001620004e5565b6200038f620003876005546001600160a01b031690565b60016200041a565b6200039c3060016200041a565b620003ab61dead60016200041a565b620003b733826200058d565b505050505050505062000874565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620004685760405162461bcd60e51b815260206004820181905260248201525f80516020620031a083398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200052f5760405162461bcd60e51b815260206004820181905260248201525f80516020620031a083398151915260448201526064016200045f565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620005e55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200045f565b8060025f828254620005f891906200085e565b90915550506001600160a01b0382165f9081526020819052604081208054839290620006269084906200085e565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200069d57607f821691505b602082108103620006bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200066f575f81815260208120601f850160051c81016020861015620006ea5750805b601f850160051c820191505b818110156200070b57828155600101620006f6565b505050505050565b81516001600160401b038111156200072f576200072f62000674565b620007478162000740845462000688565b84620006c2565b602080601f8311600181146200077d575f8415620007655750858301515b5f19600386901b1c1916600185901b1785556200070b565b5f85815260208120601f198616915b82811015620007ad578886015182559484019460019091019084016200078c565b5085821015620007cb57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620007ec575f80fd5b81516001600160a01b038116811462000803575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176200083857620008386200080a565b92915050565b5f826200085957634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156200083857620008386200080a565b60805160a0516128e0620008c05f395f81816105470152610eca01525f81816103dd015281816122540152818161230b01528181612347015281816123bb01526123e201526128e05ff3fe6080604052600436106102f6575f3560e01c8063782c4e9911610189578063c18bc195116100d8578063e2f4560511610092578063f2fde38b1161006d578063f2fde38b146108f1578063f637434214610910578063f8b45b0514610925578063fde83a341461093a575f80fd5b8063e2f4560514610890578063f11a24d3146108a5578063f1d6512e146108ba575f80fd5b8063c18bc195146107cf578063c8c8ebe4146107ee578063d257b34f14610803578063d729715f14610822578063d85ba06314610837578063dd62ed3e1461084c575f80fd5b80639c2e4ac611610143578063b62496f51161011e578063b62496f514610745578063bbc0c74214610773578063bc205ad314610791578063c0246668146107b0575f80fd5b80639c2e4ac6146106f2578063a457c2d714610707578063a9059cbb14610726575f80fd5b8063782c4e99146106505780637cb332bb1461066f5780638a8c523c1461068e5780638da5cb5b146106a257806395d89b41146106bf5780639a7a23d6146106d3575f80fd5b80632fd0a8731161024557806359927044116101ff5780636ddd1713116101da5780636ddd1713146105ca57806370a08231146105e9578063715018a61461061d5780637571336a14610631575f80fd5b8063599270441461058257806362256589146105a15780636a486a8e146105b5575f80fd5b80632fd0a873146104bd578063313ce567146104dc57806339509351146104f75780633dc599ff1461051657806349bd5a5e146105365780634a62bb6514610569575f80fd5b806318160ddd116102b0578063203e727e1161028b578063203e727e1461045557806323b872dd1461047457806324b9f3c11461049357806327c8f835146104a8575f80fd5b806318160ddd1461041757806319eab0421461042b5780631a8145bb14610440575f80fd5b806306fdde0314610301578063095ea7b31461032b57806310d5de531461035a57806313fc84e214610388578063156c2f35146103a95780631694505e146103cc575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031561094f565b60405161032291906124b8565b60405180910390f35b348015610336575f80fd5b5061034a610345366004612517565b6109df565b6040519015158152602001610322565b348015610365575f80fd5b5061034a610374366004612541565b60196020525f908152604090205460ff1681565b348015610393575f80fd5b506103a76103a236600461255c565b6109f5565b005b3480156103b4575f80fd5b506103be600e5481565b604051908152602001610322565b3480156103d7575f80fd5b506103ff7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610322565b348015610422575f80fd5b506002546103be565b348015610436575f80fd5b506103be60125481565b34801561044b575f80fd5b506103be60165481565b348015610460575f80fd5b506103a761046f366004612585565b610aa6565b34801561047f575f80fd5b5061034a61048e36600461259c565b610b81565b34801561049e575f80fd5b506103be60155481565b3480156104b3575f80fd5b506103ff61dead81565b3480156104c8575f80fd5b506103a76104d736600461255c565b610c29565b3480156104e7575f80fd5b5060405160128152602001610322565b348015610502575f80fd5b5061034a610511366004612517565b610ccc565b348015610521575f80fd5b50600b5461034a906301000000900460ff1681565b348015610541575f80fd5b506103ff7f000000000000000000000000000000000000000000000000000000000000000081565b348015610574575f80fd5b50600b5461034a9060ff1681565b34801561058d575f80fd5b506007546103ff906001600160a01b031681565b3480156105ac575f80fd5b5061034a610d07565b3480156105c0575f80fd5b506103be60115481565b3480156105d5575f80fd5b50600b5461034a9062010000900460ff1681565b3480156105f4575f80fd5b506103be610603366004612541565b6001600160a01b03165f9081526020819052604090205490565b348015610628575f80fd5b506103a7610d43565b34801561063c575f80fd5b506103a761064b3660046125e7565b610d78565b34801561065b575f80fd5b506006546103ff906001600160a01b031681565b34801561067a575f80fd5b506103a7610689366004612541565b610dcc565b348015610699575f80fd5b506103a7610e52565b3480156106ad575f80fd5b506005546001600160a01b03166103ff565b3480156106ca575f80fd5b50610315610e8f565b3480156106de575f80fd5b506103a76106ed3660046125e7565b610e9e565b3480156106fd575f80fd5b506103be60105481565b348015610712575f80fd5b5061034a610721366004612517565b610f7d565b348015610731575f80fd5b5061034a610740366004612517565b611015565b348015610750575f80fd5b5061034a61075f366004612541565b601a6020525f908152604090205460ff1681565b34801561077e575f80fd5b50600b5461034a90610100900460ff1681565b34801561079c575f80fd5b506103a76107ab36600461261e565b611021565b3480156107bb575f80fd5b506103a76107ca3660046125e7565b611183565b3480156107da575f80fd5b506103a76107e9366004612585565b61120b565b3480156107f9575f80fd5b506103be60085481565b34801561080e575f80fd5b5061034a61081d366004612585565b6112dc565b34801561082d575f80fd5b506103be60145481565b348015610842575f80fd5b506103be600d5481565b348015610857575f80fd5b506103be61086636600461261e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561089b575f80fd5b506103be60095481565b3480156108b0575f80fd5b506103be600f5481565b3480156108c5575f80fd5b5061034a6108d4366004612541565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156108fc575f80fd5b506103a761090b366004612541565b61142d565b34801561091b575f80fd5b506103be60135481565b348015610930575f80fd5b506103be600a5481565b348015610945575f80fd5b506103be60175481565b60606003805461095e9061264a565b80601f016020809104026020016040519081016040528092919081815260200182805461098a9061264a565b80156109d55780601f106109ac576101008083540402835291602001916109d5565b820191905f5260205f20905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b5f6109eb3384846114c8565b5060015b92915050565b6005546001600160a01b03163314610a285760405162461bcd60e51b8152600401610a1f90612682565b60405180910390fd5b600e839055600f829055601081905580610a4283856126cb565b610a4c91906126cb565b600d81905560191015610aa15760405162461bcd60e51b815260206004820152601760248201527f4275792066656573206d757374206265203c3d2032352e0000000000000000006044820152606401610a1f565b505050565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a1f90612682565b670de0b6b3a76400006103e8610ae560025490565b610af09060086126de565b610afa91906126f5565b610b0491906126f5565b811015610b695760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610a1f565b610b7b81670de0b6b3a76400006126de565b60085550565b5f610b8d8484846115eb565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610c115760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a1f565b610c1e85338584036114c8565b506001949350505050565b6005546001600160a01b03163314610c535760405162461bcd60e51b8152600401610a1f90612682565b60128390556013829055601481905580610c6d83856126cb565b610c7791906126cb565b601181905560631015610aa15760405162461bcd60e51b815260206004820152601860248201527f53656c6c2066656573206d757374206265203c3d2039392e00000000000000006044820152606401610a1f565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109eb918590610d029086906126cb565b6114c8565b6005545f906001600160a01b03163314610d335760405162461bcd60e51b8152600401610a1f90612682565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d6d5760405162461bcd60e51b8152600401610a1f90612682565b610d765f611d95565b565b6005546001600160a01b03163314610da25760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610a1f90612682565b6007546040516001600160a01b03918216918316907f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f961668905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610a1f90612682565b600b805462ffff00191662010100179055565b60606004805461095e9061264a565b6005546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610a1f90612682565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f6f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a1f565b610f798282611de6565b5050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610ffe5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a1f565b61100b33858584036114c8565b5060019392505050565b5f6109eb3384846115eb565b6005546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0382166110a15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a1f565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111099190612714565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015611159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117d919061272b565b50505050565b6005546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112355760405162461bcd60e51b8152600401610a1f90612682565b670de0b6b3a76400006103e861124a60025490565b61125590600c6126de565b61125f91906126f5565b61126991906126f5565b8110156112c45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263322e312560e01b6064820152608401610a1f565b6112d681670de0b6b3a76400006126de565b600a5550565b6005545f906001600160a01b031633146113085760405162461bcd60e51b8152600401610a1f90612682565b620186a061131560025490565b6113209060016126de565b61132a91906126f5565b8210156113975760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a1f565b6103e86113a360025490565b6113ae9060056126de565b6113b891906126f5565b8211156114245760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a1f565b50600955600190565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0381166114bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a1f565b6114c581611d95565b50565b6001600160a01b03831661152a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a1f565b6001600160a01b03821661158b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a1f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116115760405162461bcd60e51b8152600401610a1f90612746565b6001600160a01b0382166116375760405162461bcd60e51b8152600401610a1f9061278b565b6001600160a01b0383165f908152600c602052604090205460ff16156116945760405162461bcd60e51b815260206004820152601260248201527114d95b99195c88189b1858dadb1a5cdd195960721b6044820152606401610a1f565b6001600160a01b0382165f908152600c602052604090205460ff16156116f35760405162461bcd60e51b8152602060048201526014602482015273149958d95a5d995c88189b1858dadb1a5cdd195960621b6044820152606401610a1f565b805f0361170557610aa183835f611e39565b600b5460ff1615611a72576005546001600160a01b0384811691161480159061173c57506005546001600160a01b03838116911614155b801561175057506001600160a01b03821615155b801561176757506001600160a01b03821661dead14155b801561177d5750600554600160a01b900460ff16155b15611a7257600b54610100900460ff16611813576001600160a01b0383165f9081526018602052604090205460ff16806117ce57506001600160a01b0382165f9081526018602052604090205460ff165b6118135760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a1f565b6001600160a01b0383165f908152601a602052604090205460ff16801561185257506001600160a01b0382165f9081526019602052604090205460ff16155b15611935576008548111156118c75760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a1f565b600a546001600160a01b0383165f908152602081905260409020546118ec90836126cb565b11156119305760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a1f565b611a72565b6001600160a01b0382165f908152601a602052604090205460ff16801561197457506001600160a01b0383165f9081526019602052604090205460ff16155b156119ea576008548111156119305760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a1f565b6001600160a01b0382165f9081526019602052604090205460ff16611a7257600a546001600160a01b0383165f90815260208190526040902054611a2e90836126cb565b1115611a725760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a1f565b305f9081526020819052604090205460095481108015908190611a9d5750600b5462010000900460ff165b8015611ab35750600554600160a01b900460ff16155b8015611ad757506001600160a01b0385165f908152601a602052604090205460ff16155b8015611afb57506001600160a01b0385165f9081526018602052604090205460ff16155b8015611b1f57506001600160a01b0384165f9081526018602052604090205460ff16155b15611b4d576005805460ff60a01b1916600160a01b179055611b3f611f8b565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611b9957506001600160a01b0385165f9081526018602052604090205460ff165b15611ba157505f5b5f8115611d81576001600160a01b0386165f908152601a602052604090205460ff168015611bd057505f601154115b15611c8b57611bf56064611bef601154886121d790919063ffffffff16565b906121e9565b905060115460135482611c0891906126de565b611c1291906126f5565b60165f828254611c2291906126cb565b9091555050601154601454611c3790836126de565b611c4191906126f5565b60175f828254611c5191906126cb565b9091555050601154601254611c6690836126de565b611c7091906126f5565b60155f828254611c8091906126cb565b90915550611d639050565b6001600160a01b0387165f908152601a602052604090205460ff168015611cb357505f600d54115b15611d6357611cd26064611bef600d54886121d790919063ffffffff16565b9050600d54600f5482611ce591906126de565b611cef91906126f5565b60165f828254611cff91906126cb565b9091555050600d54601054611d1490836126de565b611d1e91906126f5565b60175f828254611d2e91906126cb565b9091555050600d54600e54611d4390836126de565b611d4d91906126f5565b60155f828254611d5d91906126cb565b90915550505b8015611d7457611d74873083611e39565b611d7e81866127ce565b94505b611d8c878787611e39565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e5f5760405162461bcd60e51b8152600401610a1f90612746565b6001600160a01b038216611e855760405162461bcd60e51b8152600401610a1f9061278b565b6001600160a01b0383165f9081526020819052604090205481811015611efc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a1f565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f329084906126cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f7e91815260200190565b60405180910390a361117d565b305f9081526020819052604081205490505f601754601554601654611fb091906126cb565b611fba91906126cb565b90505f821580611fc8575081155b15611fd257505050565b600954611fe09060146126de565b831115611ff857600954611ff59060146126de565b92505b5f6002836016548661200a91906126de565b61201491906126f5565b61201e91906126f5565b90505f61202b85836121f4565b905047612037826121ff565b5f61204247836121f4565b90505f61206f600260165461205791906126f5565b61206190896127ce565b601554611bef9085906121d7565b90505f61209c600260165461208491906126f5565b61208e908a6127ce565b601754611bef9086906121d7565b90505f816120aa84866127ce565b6120b491906127ce565b5f6016819055601581905560178190556007546040519293506001600160a01b031691849181818185875af1925050503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b5090985050861580159061212657505f81115b156121795761213587826123b5565b601654604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f81146121c3576040519150601f19603f3d011682016040523d82523d5f602084013e6121c8565b606091505b50505050505050505050505050565b5f6121e282846126de565b9392505050565b5f6121e282846126f5565b5f6121e282846127ce565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612232576122326127e1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d291906127f5565b816001815181106122e5576122e56127e1565b60200260200101906001600160a01b031690816001600160a01b031681525050612330307f0000000000000000000000000000000000000000000000000000000000000000846114c8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123849085905f90869030904290600401612810565b5f604051808303815f87803b15801561239b575f80fd5b505af11580156123ad573d5f803e3d5ffd5b505050505050565b6123e0307f0000000000000000000000000000000000000000000000000000000000000000846114c8565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230855f806124266005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561248c573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124b1919061287f565b5050505050565b5f6020808352835180828501525f5b818110156124e3578581018301518582016040015282016124c7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114c5575f80fd5b5f8060408385031215612528575f80fd5b823561253381612503565b946020939093013593505050565b5f60208284031215612551575f80fd5b81356121e281612503565b5f805f6060848603121561256e575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612595575f80fd5b5035919050565b5f805f606084860312156125ae575f80fd5b83356125b981612503565b925060208401356125c981612503565b929592945050506040919091013590565b80151581146114c5575f80fd5b5f80604083850312156125f8575f80fd5b823561260381612503565b91506020830135612613816125da565b809150509250929050565b5f806040838503121561262f575f80fd5b823561263a81612503565b9150602083013561261381612503565b600181811c9082168061265e57607f821691505b60208210810361267c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109ef576109ef6126b7565b80820281158282048414176109ef576109ef6126b7565b5f8261270f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612724575f80fd5b5051919050565b5f6020828403121561273b575f80fd5b81516121e2816125da565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109ef576109ef6126b7565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612805575f80fd5b81516121e281612503565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561285e5784516001600160a01b031683529383019391830191600101612839565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612891575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212206e67ca21b4e9ea57af26c7bb1f6c22f139707ed3fa9d34057e16894c98fcd68564736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102f6575f3560e01c8063782c4e9911610189578063c18bc195116100d8578063e2f4560511610092578063f2fde38b1161006d578063f2fde38b146108f1578063f637434214610910578063f8b45b0514610925578063fde83a341461093a575f80fd5b8063e2f4560514610890578063f11a24d3146108a5578063f1d6512e146108ba575f80fd5b8063c18bc195146107cf578063c8c8ebe4146107ee578063d257b34f14610803578063d729715f14610822578063d85ba06314610837578063dd62ed3e1461084c575f80fd5b80639c2e4ac611610143578063b62496f51161011e578063b62496f514610745578063bbc0c74214610773578063bc205ad314610791578063c0246668146107b0575f80fd5b80639c2e4ac6146106f2578063a457c2d714610707578063a9059cbb14610726575f80fd5b8063782c4e99146106505780637cb332bb1461066f5780638a8c523c1461068e5780638da5cb5b146106a257806395d89b41146106bf5780639a7a23d6146106d3575f80fd5b80632fd0a8731161024557806359927044116101ff5780636ddd1713116101da5780636ddd1713146105ca57806370a08231146105e9578063715018a61461061d5780637571336a14610631575f80fd5b8063599270441461058257806362256589146105a15780636a486a8e146105b5575f80fd5b80632fd0a873146104bd578063313ce567146104dc57806339509351146104f75780633dc599ff1461051657806349bd5a5e146105365780634a62bb6514610569575f80fd5b806318160ddd116102b0578063203e727e1161028b578063203e727e1461045557806323b872dd1461047457806324b9f3c11461049357806327c8f835146104a8575f80fd5b806318160ddd1461041757806319eab0421461042b5780631a8145bb14610440575f80fd5b806306fdde0314610301578063095ea7b31461032b57806310d5de531461035a57806313fc84e214610388578063156c2f35146103a95780631694505e146103cc575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b5061031561094f565b60405161032291906124b8565b60405180910390f35b348015610336575f80fd5b5061034a610345366004612517565b6109df565b6040519015158152602001610322565b348015610365575f80fd5b5061034a610374366004612541565b60196020525f908152604090205460ff1681565b348015610393575f80fd5b506103a76103a236600461255c565b6109f5565b005b3480156103b4575f80fd5b506103be600e5481565b604051908152602001610322565b3480156103d7575f80fd5b506103ff7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610322565b348015610422575f80fd5b506002546103be565b348015610436575f80fd5b506103be60125481565b34801561044b575f80fd5b506103be60165481565b348015610460575f80fd5b506103a761046f366004612585565b610aa6565b34801561047f575f80fd5b5061034a61048e36600461259c565b610b81565b34801561049e575f80fd5b506103be60155481565b3480156104b3575f80fd5b506103ff61dead81565b3480156104c8575f80fd5b506103a76104d736600461255c565b610c29565b3480156104e7575f80fd5b5060405160128152602001610322565b348015610502575f80fd5b5061034a610511366004612517565b610ccc565b348015610521575f80fd5b50600b5461034a906301000000900460ff1681565b348015610541575f80fd5b506103ff7f000000000000000000000000cb0e4c6e1d30da3a1fe8843288de94893f9c61e081565b348015610574575f80fd5b50600b5461034a9060ff1681565b34801561058d575f80fd5b506007546103ff906001600160a01b031681565b3480156105ac575f80fd5b5061034a610d07565b3480156105c0575f80fd5b506103be60115481565b3480156105d5575f80fd5b50600b5461034a9062010000900460ff1681565b3480156105f4575f80fd5b506103be610603366004612541565b6001600160a01b03165f9081526020819052604090205490565b348015610628575f80fd5b506103a7610d43565b34801561063c575f80fd5b506103a761064b3660046125e7565b610d78565b34801561065b575f80fd5b506006546103ff906001600160a01b031681565b34801561067a575f80fd5b506103a7610689366004612541565b610dcc565b348015610699575f80fd5b506103a7610e52565b3480156106ad575f80fd5b506005546001600160a01b03166103ff565b3480156106ca575f80fd5b50610315610e8f565b3480156106de575f80fd5b506103a76106ed3660046125e7565b610e9e565b3480156106fd575f80fd5b506103be60105481565b348015610712575f80fd5b5061034a610721366004612517565b610f7d565b348015610731575f80fd5b5061034a610740366004612517565b611015565b348015610750575f80fd5b5061034a61075f366004612541565b601a6020525f908152604090205460ff1681565b34801561077e575f80fd5b50600b5461034a90610100900460ff1681565b34801561079c575f80fd5b506103a76107ab36600461261e565b611021565b3480156107bb575f80fd5b506103a76107ca3660046125e7565b611183565b3480156107da575f80fd5b506103a76107e9366004612585565b61120b565b3480156107f9575f80fd5b506103be60085481565b34801561080e575f80fd5b5061034a61081d366004612585565b6112dc565b34801561082d575f80fd5b506103be60145481565b348015610842575f80fd5b506103be600d5481565b348015610857575f80fd5b506103be61086636600461261e565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561089b575f80fd5b506103be60095481565b3480156108b0575f80fd5b506103be600f5481565b3480156108c5575f80fd5b5061034a6108d4366004612541565b6001600160a01b03165f9081526018602052604090205460ff1690565b3480156108fc575f80fd5b506103a761090b366004612541565b61142d565b34801561091b575f80fd5b506103be60135481565b348015610930575f80fd5b506103be600a5481565b348015610945575f80fd5b506103be60175481565b60606003805461095e9061264a565b80601f016020809104026020016040519081016040528092919081815260200182805461098a9061264a565b80156109d55780601f106109ac576101008083540402835291602001916109d5565b820191905f5260205f20905b8154815290600101906020018083116109b857829003601f168201915b5050505050905090565b5f6109eb3384846114c8565b5060015b92915050565b6005546001600160a01b03163314610a285760405162461bcd60e51b8152600401610a1f90612682565b60405180910390fd5b600e839055600f829055601081905580610a4283856126cb565b610a4c91906126cb565b600d81905560191015610aa15760405162461bcd60e51b815260206004820152601760248201527f4275792066656573206d757374206265203c3d2032352e0000000000000000006044820152606401610a1f565b505050565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a1f90612682565b670de0b6b3a76400006103e8610ae560025490565b610af09060086126de565b610afa91906126f5565b610b0491906126f5565b811015610b695760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526c6c6f776572207468616e20312560981b6064820152608401610a1f565b610b7b81670de0b6b3a76400006126de565b60085550565b5f610b8d8484846115eb565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610c115760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a1f565b610c1e85338584036114c8565b506001949350505050565b6005546001600160a01b03163314610c535760405162461bcd60e51b8152600401610a1f90612682565b60128390556013829055601481905580610c6d83856126cb565b610c7791906126cb565b601181905560631015610aa15760405162461bcd60e51b815260206004820152601860248201527f53656c6c2066656573206d757374206265203c3d2039392e00000000000000006044820152606401610a1f565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109eb918590610d029086906126cb565b6114c8565b6005545f906001600160a01b03163314610d335760405162461bcd60e51b8152600401610a1f90612682565b50600b805460ff19169055600190565b6005546001600160a01b03163314610d6d5760405162461bcd60e51b8152600401610a1f90612682565b610d765f611d95565b565b6005546001600160a01b03163314610da25760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b03919091165f908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610df65760405162461bcd60e51b8152600401610a1f90612682565b6007546040516001600160a01b03918216918316907f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f961668905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610e7c5760405162461bcd60e51b8152600401610a1f90612682565b600b805462ffff00191662010100179055565b60606004805461095e9061264a565b6005546001600160a01b03163314610ec85760405162461bcd60e51b8152600401610a1f90612682565b7f000000000000000000000000cb0e4c6e1d30da3a1fe8843288de94893f9c61e06001600160a01b0316826001600160a01b031603610f6f5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a1f565b610f798282611de6565b5050565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610ffe5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a1f565b61100b33858584036114c8565b5060019392505050565b5f6109eb3384846115eb565b6005546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0382166110a15760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610a1f565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111099190612714565b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390529192509084169063a9059cbb906044016020604051808303815f875af1158015611159573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117d919061272b565b50505050565b6005546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0382165f81815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146112355760405162461bcd60e51b8152600401610a1f90612682565b670de0b6b3a76400006103e861124a60025490565b61125590600c6126de565b61125f91906126f5565b61126991906126f5565b8110156112c45760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263322e312560e01b6064820152608401610a1f565b6112d681670de0b6b3a76400006126de565b600a5550565b6005545f906001600160a01b031633146113085760405162461bcd60e51b8152600401610a1f90612682565b620186a061131560025490565b6113209060016126de565b61132a91906126f5565b8210156113975760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a1f565b6103e86113a360025490565b6113ae9060056126de565b6113b891906126f5565b8211156114245760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a1f565b50600955600190565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610a1f90612682565b6001600160a01b0381166114bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a1f565b6114c581611d95565b50565b6001600160a01b03831661152a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a1f565b6001600160a01b03821661158b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a1f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116115760405162461bcd60e51b8152600401610a1f90612746565b6001600160a01b0382166116375760405162461bcd60e51b8152600401610a1f9061278b565b6001600160a01b0383165f908152600c602052604090205460ff16156116945760405162461bcd60e51b815260206004820152601260248201527114d95b99195c88189b1858dadb1a5cdd195960721b6044820152606401610a1f565b6001600160a01b0382165f908152600c602052604090205460ff16156116f35760405162461bcd60e51b8152602060048201526014602482015273149958d95a5d995c88189b1858dadb1a5cdd195960621b6044820152606401610a1f565b805f0361170557610aa183835f611e39565b600b5460ff1615611a72576005546001600160a01b0384811691161480159061173c57506005546001600160a01b03838116911614155b801561175057506001600160a01b03821615155b801561176757506001600160a01b03821661dead14155b801561177d5750600554600160a01b900460ff16155b15611a7257600b54610100900460ff16611813576001600160a01b0383165f9081526018602052604090205460ff16806117ce57506001600160a01b0382165f9081526018602052604090205460ff165b6118135760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a1f565b6001600160a01b0383165f908152601a602052604090205460ff16801561185257506001600160a01b0382165f9081526019602052604090205460ff16155b15611935576008548111156118c75760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a1f565b600a546001600160a01b0383165f908152602081905260409020546118ec90836126cb565b11156119305760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a1f565b611a72565b6001600160a01b0382165f908152601a602052604090205460ff16801561197457506001600160a01b0383165f9081526019602052604090205460ff16155b156119ea576008548111156119305760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a1f565b6001600160a01b0382165f9081526019602052604090205460ff16611a7257600a546001600160a01b0383165f90815260208190526040902054611a2e90836126cb565b1115611a725760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a1f565b305f9081526020819052604090205460095481108015908190611a9d5750600b5462010000900460ff165b8015611ab35750600554600160a01b900460ff16155b8015611ad757506001600160a01b0385165f908152601a602052604090205460ff16155b8015611afb57506001600160a01b0385165f9081526018602052604090205460ff16155b8015611b1f57506001600160a01b0384165f9081526018602052604090205460ff16155b15611b4d576005805460ff60a01b1916600160a01b179055611b3f611f8b565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526018602052604090205460ff600160a01b909204821615911680611b9957506001600160a01b0385165f9081526018602052604090205460ff165b15611ba157505f5b5f8115611d81576001600160a01b0386165f908152601a602052604090205460ff168015611bd057505f601154115b15611c8b57611bf56064611bef601154886121d790919063ffffffff16565b906121e9565b905060115460135482611c0891906126de565b611c1291906126f5565b60165f828254611c2291906126cb565b9091555050601154601454611c3790836126de565b611c4191906126f5565b60175f828254611c5191906126cb565b9091555050601154601254611c6690836126de565b611c7091906126f5565b60155f828254611c8091906126cb565b90915550611d639050565b6001600160a01b0387165f908152601a602052604090205460ff168015611cb357505f600d54115b15611d6357611cd26064611bef600d54886121d790919063ffffffff16565b9050600d54600f5482611ce591906126de565b611cef91906126f5565b60165f828254611cff91906126cb565b9091555050600d54601054611d1490836126de565b611d1e91906126f5565b60175f828254611d2e91906126cb565b9091555050600d54600e54611d4390836126de565b611d4d91906126f5565b60155f828254611d5d91906126cb565b90915550505b8015611d7457611d74873083611e39565b611d7e81866127ce565b94505b611d8c878787611e39565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e5f5760405162461bcd60e51b8152600401610a1f90612746565b6001600160a01b038216611e855760405162461bcd60e51b8152600401610a1f9061278b565b6001600160a01b0383165f9081526020819052604090205481811015611efc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a1f565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611f329084906126cb565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f7e91815260200190565b60405180910390a361117d565b305f9081526020819052604081205490505f601754601554601654611fb091906126cb565b611fba91906126cb565b90505f821580611fc8575081155b15611fd257505050565b600954611fe09060146126de565b831115611ff857600954611ff59060146126de565b92505b5f6002836016548661200a91906126de565b61201491906126f5565b61201e91906126f5565b90505f61202b85836121f4565b905047612037826121ff565b5f61204247836121f4565b90505f61206f600260165461205791906126f5565b61206190896127ce565b601554611bef9085906121d7565b90505f61209c600260165461208491906126f5565b61208e908a6127ce565b601754611bef9086906121d7565b90505f816120aa84866127ce565b6120b491906127ce565b5f6016819055601581905560178190556007546040519293506001600160a01b031691849181818185875af1925050503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b5090985050861580159061212657505f81115b156121795761213587826123b5565b601654604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b039091169047905f81818185875af1925050503d805f81146121c3576040519150601f19603f3d011682016040523d82523d5f602084013e6121c8565b606091505b50505050505050505050505050565b5f6121e282846126de565b9392505050565b5f6121e282846126f5565b5f6121e282846127ce565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612232576122326127e1565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d291906127f5565b816001815181106122e5576122e56127e1565b60200260200101906001600160a01b031690816001600160a01b031681525050612330307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114c8565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123849085905f90869030904290600401612810565b5f604051808303815f87803b15801561239b575f80fd5b505af11580156123ad573d5f803e3d5ffd5b505050505050565b6123e0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846114c8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230855f806124266005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561248c573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906124b1919061287f565b5050505050565b5f6020808352835180828501525f5b818110156124e3578581018301518582016040015282016124c7565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114c5575f80fd5b5f8060408385031215612528575f80fd5b823561253381612503565b946020939093013593505050565b5f60208284031215612551575f80fd5b81356121e281612503565b5f805f6060848603121561256e575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612595575f80fd5b5035919050565b5f805f606084860312156125ae575f80fd5b83356125b981612503565b925060208401356125c981612503565b929592945050506040919091013590565b80151581146114c5575f80fd5b5f80604083850312156125f8575f80fd5b823561260381612503565b91506020830135612613816125da565b809150509250929050565b5f806040838503121561262f575f80fd5b823561263a81612503565b9150602083013561261381612503565b600181811c9082168061265e57607f821691505b60208210810361267c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109ef576109ef6126b7565b80820281158282048414176109ef576109ef6126b7565b5f8261270f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612724575f80fd5b5051919050565b5f6020828403121561273b575f80fd5b81516121e2816125da565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109ef576109ef6126b7565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612805575f80fd5b81516121e281612503565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b8181101561285e5784516001600160a01b031683529383019391830191600101612839565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612891575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212206e67ca21b4e9ea57af26c7bb1f6c22f139707ed3fa9d34057e16894c98fcd68564736f6c63430008150033

Deployed Bytecode Sourcemap

15044:14274:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3626:169;;;;;;;;;;-1:-1:-1;3626:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;3626:169:0;1023:187:1;16237:63:0;;;;;;;;;;-1:-1:-1;16237:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20440:398;;;;;;;;;;-1:-1:-1;20440:398:0;;;;;:::i;:::-;;:::i;:::-;;15808:29;;;;;;;;;;;;;;;;;;;1934:25:1;;;1922:2;1907:18;15808:29:0;1788:177:1;15127:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2161:32:1;;;2143:51;;2131:2;2116:18;15127:51:0;1970:230:1;3029:108:0;;;;;;;;;;-1:-1:-1;3117:12:0;;3029:108;;15950:30;;;;;;;;;;;;;;;;16099:33;;;;;;;;;;;;;;;;19986:273;;;;;;;;;;-1:-1:-1;19986:273:0;;;;;:::i;:::-;;:::i;3803:492::-;;;;;;;;;;-1:-1:-1;3803:492:0;;;;;:::i;:::-;;:::i;16060:32::-;;;;;;;;;;;;;;;;15230:53;;;;;;;;;;;;15276:6;15230:53;;20846:408;;;;;;;;;;-1:-1:-1;20846:408:0;;;;;:::i;:::-;;:::i;2928:93::-;;;;;;;;;;-1:-1:-1;2928:93:0;;3011:2;3201:36:1;;3189:2;3174:18;2928:93:0;3059:184:1;4303:215:0;;;;;;;;;;-1:-1:-1;4303:215:0;;;;;:::i;:::-;;:::i;15627:38::-;;;;;;;;;;-1:-1:-1;15627:38:0;;;;;;;;;;;15185;;;;;;;;;;;;;;;15507:33;;;;;;;;;;-1:-1:-1;15507:33:0;;;;;;;;15358:25;;;;;;;;;;-1:-1:-1;15358:25:0;;;;-1:-1:-1;;;;;15358:25:0;;;19086:120;;;;;;;;;;;;;:::i;15915:28::-;;;;;;;;;;;;;;;;15587:31;;;;;;;;;;-1:-1:-1;15587:31:0;;;;;;;;;;;3147:127;;;;;;;;;;-1:-1:-1;3147:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3248:18:0;3221:7;3248:18;;;;;;;;;;;;3147:127;818:103;;;;;;;;;;;;;:::i;20265:167::-;;;;;;;;;;-1:-1:-1;20265:167:0;;;;;:::i;:::-;;:::i;15322:29::-;;;;;;;;;;-1:-1:-1;15322:29:0;;;;-1:-1:-1;;;;;15322:29:0;;;22252:161;;;;;;;;;;-1:-1:-1;22252:161:0;;;;;:::i;:::-;;:::i;18964:114::-;;;;;;;;;;;;;:::i;591:87::-;;;;;;;;;;-1:-1:-1;664:6:0;;-1:-1:-1;;;;;664:6:0;591:87;;2816:104;;;;;;;;;;;;;:::i;21746:304::-;;;;;;;;;;-1:-1:-1;21746:304:0;;;;;:::i;:::-;;:::i;15881:25::-;;;;;;;;;;;;;;;;4529:413;;;;;;;;;;-1:-1:-1;4529:413:0;;;;;:::i;:::-;;:::i;3282:175::-;;;;;;;;;;-1:-1:-1;3282:175:0;;;;;:::i;:::-;;:::i;16309:57::-;;;;;;;;;;-1:-1:-1;16309:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15547:33;;;;;;;;;;-1:-1:-1;15547:33:0;;;;;;;;;;;21452:288;;;;;;;;;;-1:-1:-1;21452:288:0;;;;;:::i;:::-;;:::i;21262:182::-;;;;;;;;;;-1:-1:-1;21262:182:0;;;;;:::i;:::-;;:::i;19721:257::-;;;;;;;;;;-1:-1:-1;19721:257:0;;;;;:::i;:::-;;:::i;15392:35::-;;;;;;;;;;;;;;;;19214:497;;;;;;;;;;-1:-1:-1;19214:497:0;;;;;:::i;:::-;;:::i;16025:26::-;;;;;;;;;;;;;;;;15774:27;;;;;;;;;;;;;;;;3467:151;;;;;;;;;;-1:-1:-1;3467:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3583:18:0;;;3556:7;3583:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3467:151;15434:33;;;;;;;;;;;;;;;;15844:30;;;;;;;;;;;;;;;;22421:123;;;;;;;;;;-1:-1:-1;22421:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;22508:28:0;22484:4;22508:28;;;:19;:28;;;;;;;;;22421:123;931:201;;;;;;;;;;-1:-1:-1;931:201:0;;;;;:::i;:::-;;:::i;15987:31::-;;;;;;;;;;;;;;;;15474:24;;;;;;;;;;;;;;;;16139:28;;;;;;;;;;;;;;;;2708:100;2762:13;2795:5;2788:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2708:100;:::o;3626:169::-;3709:4;3726:39;213:10;3749:7;3758:6;3726:8;:39::i;:::-;-1:-1:-1;3783:4:0;3626:169;;;;;:::o;20440:398::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;;;;;;;;;20591:14:::1;:29:::0;;;20631:15:::1;:31:::0;;;20673:10:::1;:21:::0;;;20686:8;20720:32:::1;20649:13:::0;20608:12;20720:32:::1;:::i;:::-;:45;;;;:::i;:::-;20705:12;:60:::0;;;20800:2:::1;-1:-1:-1::0;20784:18:0::1;20776:54;;;::::0;-1:-1:-1;;;20776:54:0;;5361:2:1;20776:54:0::1;::::0;::::1;5343:21:1::0;5400:2;5380:18;;;5373:30;5439:25;5419:18;;;5412:53;5482:18;;20776:54:0::1;5159:347:1::0;20776:54:0::1;20440:398:::0;;;:::o;19986:273::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;20123:4:::1;20115;20094:13;3117:12:::0;;;3029:108;20094:13:::1;:17;::::0;20110:1:::1;20094:17;:::i;:::-;20093:26;;;;:::i;:::-;20092:35;;;;:::i;:::-;20082:6;:45;;20060:140;;;::::0;-1:-1:-1;;;20060:140:0;;6108:2:1;20060:140:0::1;::::0;::::1;6090:21:1::0;6147:2;6127:18;;;6120:30;6186:34;6166:18;;;6159:62;-1:-1:-1;;;6237:18:1;;;6230:43;6290:19;;20060:140:0::1;5906:409:1::0;20060:140:0::1;20234:17;:6:::0;20244::::1;20234:17;:::i;:::-;20211:20;:40:::0;-1:-1:-1;19986:273:0:o;3803:492::-;3943:4;3960:36;3970:6;3978:9;3989:6;3960:9;:36::i;:::-;-1:-1:-1;;;;;4036:19:0;;4009:24;4036:19;;;:11;:19;;;;;;;;213:10;4036:33;;;;;;;;4088:26;;;;4080:79;;;;-1:-1:-1;;;4080:79:0;;6522:2:1;4080:79:0;;;6504:21:1;6561:2;6541:18;;;6534:30;6600:34;6580:18;;;6573:62;-1:-1:-1;;;6651:18:1;;;6644:38;6699:19;;4080:79:0;6320:404:1;4080:79:0;4195:57;4204:6;213:10;4245:6;4226:16;:25;4195:8;:57::i;:::-;-1:-1:-1;4283:4:0;;3803:492;-1:-1:-1;;;;3803:492:0:o;20846:408::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;20998:15:::1;:30:::0;;;21039:16:::1;:32:::0;;;21082:11:::1;:22:::0;;;21096:8;21131:34:::1;21058:13:::0;21016:12;21131:34:::1;:::i;:::-;:48;;;;:::i;:::-;21115:13;:64:::0;;;21215:2:::1;-1:-1:-1::0;21198:19:0::1;21190:56;;;::::0;-1:-1:-1;;;21190:56:0;;6931:2:1;21190:56:0::1;::::0;::::1;6913:21:1::0;6970:2;6950:18;;;6943:30;7009:26;6989:18;;;6982:54;7053:18;;21190:56:0::1;6729:348:1::0;4303:215:0;213:10;4391:4;4440:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4440:34:0;;;;;;;;;;4391:4;;4408:80;;4431:7;;4440:47;;4477:10;;4440:47;:::i;:::-;4408:8;:80::i;19086:120::-;664:6;;19137:4;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;-1:-1:-1;19154:14:0::1;:22:::0;;-1:-1:-1;;19154:22:0::1;::::0;;;19086:120;:::o;818:103::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;883:30:::1;910:1;883:18;:30::i;:::-;818:103::o:0;20265:167::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20378:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;20378:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20265:167::o;22252:161::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;22361:10:::1;::::0;22332:40:::1;::::0;-1:-1:-1;;;;;22361:10:0;;::::1;::::0;22332:40;::::1;::::0;::::1;::::0;22361:10:::1;::::0;22332:40:::1;22383:10;:22:::0;;-1:-1:-1;;;;;;22383:22:0::1;-1:-1:-1::0;;;;;22383:22:0;;;::::1;::::0;;;::::1;::::0;;22252:161::o;18964:114::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;19019:13:::1;:20:::0;;-1:-1:-1;;19050:18:0;;;;;18964:114::o;2816:104::-;2872:13;2905:7;2898:14;;;;;:::i;21746:304::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;21890:13:::1;-1:-1:-1::0;;;;;21882:21:0::1;:4;-1:-1:-1::0;;;;;21882:21:0::1;::::0;21860:128:::1;;;::::0;-1:-1:-1;;;21860:128:0;;7284:2:1;21860:128:0::1;::::0;::::1;7266:21:1::0;7323:2;7303:18;;;7296:30;7362:34;7342:18;;;7335:62;7433:27;7413:18;;;7406:55;7478:19;;21860:128:0::1;7082:421:1::0;21860:128:0::1;22001:41;22030:4;22036:5;22001:28;:41::i;:::-;21746:304:::0;;:::o;4529:413::-;213:10;4622:4;4666:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4666:34:0;;;;;;;;;;4719:35;;;;4711:85;;;;-1:-1:-1;;;4711:85:0;;7710:2:1;4711:85:0;;;7692:21:1;7749:2;7729:18;;;7722:30;7788:34;7768:18;;;7761:62;-1:-1:-1;;;7839:18:1;;;7832:35;7884:19;;4711:85:0;7508:401:1;4711:85:0;4832:67;213:10;4855:7;4883:15;4864:16;:34;4832:8;:67::i;:::-;-1:-1:-1;4930:4:0;;4529:413;-1:-1:-1;;;4529:413:0:o;3282:175::-;3368:4;3385:42;213:10;3409:9;3420:6;3385:9;:42::i;21452:288::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21547:20:0;::::1;21539:59;;;::::0;-1:-1:-1;;;21539:59:0;;8116:2:1;21539:59:0::1;::::0;::::1;8098:21:1::0;8155:2;8135:18;;;8128:30;8194:28;8174:18;;;8167:56;8240:18;;21539:59:0::1;7914:350:1::0;21539:59:0::1;21636:39;::::0;-1:-1:-1;;;21636:39:0;;21669:4:::1;21636:39;::::0;::::1;2143:51:1::0;21609:24:0::1;::::0;-1:-1:-1;;;;;21636:24:0;::::1;::::0;::::1;::::0;2116:18:1;;21636:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21686:46;::::0;-1:-1:-1;;;21686:46:0;;-1:-1:-1;;;;;8650:32:1;;;21686:46:0::1;::::0;::::1;8632:51:1::0;8699:18;;;8692:34;;;21609:66:0;;-1:-1:-1;21686:23:0;;::::1;::::0;::::1;::::0;8605:18:1;;21686:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21528:212;21452:288:::0;;:::o;21262:182::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21347:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;21347:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;21402:34;;1163:41:1;;;21402:34:0::1;::::0;1136:18:1;21402:34:0::1;;;;;;;21262:182:::0;;:::o;19721:257::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;19862:4:::1;19854;19832:13;3117:12:::0;;;3029:108;19832:13:::1;:18;::::0;19848:2:::1;19832:18;:::i;:::-;19831:27;;;;:::i;:::-;19830:36;;;;:::i;:::-;19820:6;:46;;19798:132;;;::::0;-1:-1:-1;;;19798:132:0;;9189:2:1;19798:132:0::1;::::0;::::1;9171:21:1::0;9228:2;9208:18;;;9201:30;9267:34;9247:18;;;9240:62;-1:-1:-1;;;9318:18:1;;;9311:34;9362:19;;19798:132:0::1;8987:400:1::0;19798:132:0::1;19953:17;:6:::0;19963::::1;19953:17;:::i;:::-;19941:9;:29:::0;-1:-1:-1;19721:257:0:o;19214:497::-;664:6;;19322:4;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;19401:6:::1;19380:13;3117:12:::0;;;3029:108;19380:13:::1;:17;::::0;19396:1:::1;19380:17;:::i;:::-;19379:28;;;;:::i;:::-;19366:9;:41;;19344:144;;;::::0;-1:-1:-1;;;19344:144:0;;9594:2:1;19344:144:0::1;::::0;::::1;9576:21:1::0;9633:2;9613:18;;;9606:30;9672:34;9652:18;;;9645:62;-1:-1:-1;;;9723:18:1;;;9716:51;9784:19;;19344:144:0::1;9392:417:1::0;19344:144:0::1;19556:4;19535:13;3117:12:::0;;;3029:108;19535:13:::1;:17;::::0;19551:1:::1;19535:17;:::i;:::-;19534:26;;;;:::i;:::-;19521:9;:39;;19499:141;;;::::0;-1:-1:-1;;;19499:141:0;;10016:2:1;19499:141:0::1;::::0;::::1;9998:21:1::0;10055:2;10035:18;;;10028:30;10094:34;10074:18;;;10067:62;-1:-1:-1;;;10145:18:1;;;10138:50;10205:19;;19499:141:0::1;9814:416:1::0;19499:141:0::1;-1:-1:-1::0;19651:18:0::1;:30:::0;19699:4:::1;::::0;19214:497::o;931:201::-;664:6;;-1:-1:-1;;;;;664:6:0;213:10;728:23;720:68;;;;-1:-1:-1;;;720:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1020:22:0;::::1;1012:73;;;::::0;-1:-1:-1;;;1012:73:0;;10437:2:1;1012:73:0::1;::::0;::::1;10419:21:1::0;10476:2;10456:18;;;10449:30;10515:34;10495:18;;;10488:62;-1:-1:-1;;;10566:18:1;;;10559:36;10612:19;;1012:73:0::1;10235:402:1::0;1012:73:0::1;1096:28;1115:8;1096:18;:28::i;:::-;931:201:::0;:::o;6701:380::-;-1:-1:-1;;;;;6837:19:0;;6829:68;;;;-1:-1:-1;;;6829:68:0;;10844:2:1;6829:68:0;;;10826:21:1;10883:2;10863:18;;;10856:30;10922:34;10902:18;;;10895:62;-1:-1:-1;;;10973:18:1;;;10966:34;11017:19;;6829:68:0;10642:400:1;6829:68:0;-1:-1:-1;;;;;6916:21:0;;6908:68;;;;-1:-1:-1;;;6908:68:0;;11249:2:1;6908:68:0;;;11231:21:1;11288:2;11268:18;;;11261:30;11327:34;11307:18;;;11300:62;-1:-1:-1;;;11378:18:1;;;11371:32;11420:19;;6908:68:0;11047:398:1;6908:68:0;-1:-1:-1;;;;;6989:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7041:32;;1934:25:1;;;7041:32:0;;1907:18:1;7041:32:0;;;;;;;6701:380;;;:::o;22554:4046::-;-1:-1:-1;;;;;22686:18:0;;22678:68;;;;-1:-1:-1;;;22678:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22765:16:0;;22757:64;;;;-1:-1:-1;;;22757:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22841:17:0;;;;;;:11;:17;;;;;;;;22840:18;22832:48;;;;-1:-1:-1;;;22832:48:0;;12462:2:1;22832:48:0;;;12444:21:1;12501:2;12481:18;;;12474:30;-1:-1:-1;;;12520:18:1;;;12513:48;12578:18;;22832:48:0;12260:342:1;22832:48:0;-1:-1:-1;;;;;22900:15:0;;;;;;:11;:15;;;;;;;;22899:16;22891:48;;;;-1:-1:-1;;;22891:48:0;;12809:2:1;22891:48:0;;;12791:21:1;12848:2;12828:18;;;12821:30;-1:-1:-1;;;12867:18:1;;;12860:50;12927:18;;22891:48:0;12607:344:1;22891:48:0;22960:6;22970:1;22960:11;22956:93;;22988:28;23004:4;23010:2;23014:1;22988:15;:28::i;22956:93::-;23065:14;;;;23061:1694;;;664:6;;-1:-1:-1;;;;;23118:15:0;;;664:6;;23118:15;;;;:49;;-1:-1:-1;664:6:0;;-1:-1:-1;;;;;23154:13:0;;;664:6;;23154:13;;23118:49;:86;;;;-1:-1:-1;;;;;;23188:16:0;;;;23118:86;:128;;;;-1:-1:-1;;;;;;23225:21:0;;23239:6;23225:21;;23118:128;:158;;;;-1:-1:-1;23268:8:0;;-1:-1:-1;;;23268:8:0;;;;23267:9;23118:158;23096:1648;;;23316:13;;;;;;;23311:223;;-1:-1:-1;;;;;23388:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23417:23:0;;;;;;:19;:23;;;;;;;;23388:52;23354:160;;;;-1:-1:-1;;;23354:160:0;;13158:2:1;23354:160:0;;;13140:21:1;13197:2;13177:18;;;13170:30;-1:-1:-1;;;13216:18:1;;;13209:52;13278:18;;23354:160:0;12956:346:1;23354:160:0;-1:-1:-1;;;;;23608:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;23665:35:0;;;;;;:31;:35;;;;;;;;23664:36;23608:92;23582:1147;;;23787:20;;23777:6;:30;;23743:169;;;;-1:-1:-1;;;23743:169:0;;13509:2:1;23743:169:0;;;13491:21:1;13548:2;13528:18;;;13521:30;13587:34;13567:18;;;13560:62;-1:-1:-1;;;13638:18:1;;;13631:51;13699:19;;23743:169:0;13307:417:1;23743:169:0;23995:9;;-1:-1:-1;;;;;3248:18:0;;3221:7;3248:18;;;;;;;;;;;23969:22;;:6;:22;:::i;:::-;:35;;23935:140;;;;-1:-1:-1;;;23935:140:0;;13931:2:1;23935:140:0;;;13913:21:1;13970:2;13950:18;;;13943:30;-1:-1:-1;;;13989:18:1;;;13982:49;14048:18;;23935:140:0;13729:343:1;23935:140:0;23582:1147;;;-1:-1:-1;;;;;24173:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;24228:37:0;;;;;;:31;:37;;;;;;;;24227:38;24173:92;24147:582;;;24352:20;;24342:6;:30;;24308:170;;;;-1:-1:-1;;;24308:170:0;;14279:2:1;24308:170:0;;;14261:21:1;14318:2;14298:18;;;14291:30;14357:34;14337:18;;;14330:62;-1:-1:-1;;;14408:18:1;;;14401:52;14470:19;;24308:170:0;14077:418:1;24147:582:0;-1:-1:-1;;;;;24509:35:0;;;;;;:31;:35;;;;;;;;24504:225;;24629:9;;-1:-1:-1;;;;;3248:18:0;;3221:7;3248:18;;;;;;;;;;;24603:22;;:6;:22;:::i;:::-;:35;;24569:140;;;;-1:-1:-1;;;24569:140:0;;13931:2:1;24569:140:0;;;13913:21:1;13970:2;13950:18;;;13943:30;-1:-1:-1;;;13989:18:1;;;13982:49;14048:18;;24569:140:0;13729:343:1;24569:140:0;24816:4;24767:28;3248:18;;;;;;;;;;;24874;;24850:42;;;;;;;24923:35;;-1:-1:-1;24947:11:0;;;;;;;24923:35;:61;;;;-1:-1:-1;24976:8:0;;-1:-1:-1;;;24976:8:0;;;;24975:9;24923:61;:110;;;;-1:-1:-1;;;;;;25002:31:0;;;;;;:25;:31;;;;;;;;25001:32;24923:110;:153;;;;-1:-1:-1;;;;;;25051:25:0;;;;;;:19;:25;;;;;;;;25050:26;24923:153;:194;;;;-1:-1:-1;;;;;;25094:23:0;;;;;;:19;:23;;;;;;;;25093:24;24923:194;24905:326;;;25144:8;:15;;-1:-1:-1;;;;25144:15:0;-1:-1:-1;;;25144:15:0;;;25176:10;:8;:10::i;:::-;25203:8;:16;;-1:-1:-1;;;;25203:16:0;;;24905:326;25259:8;;-1:-1:-1;;;;;25369:25:0;;25243:12;25369:25;;;:19;:25;;;;;;25259:8;-1:-1:-1;;;25259:8:0;;;;;25258:9;;25369:25;;:52;;-1:-1:-1;;;;;;25398:23:0;;;;;;:19;:23;;;;;;;;25369:52;25365:100;;;-1:-1:-1;25448:5:0;25365:100;25477:12;25582:7;25578:969;;;-1:-1:-1;;;;;25634:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;25683:1;25667:13;;:17;25634:50;25630:768;;;25712:34;25742:3;25712:25;25723:13;;25712:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;25705:41;;25815:13;;25795:16;;25788:4;:23;;;;:::i;:::-;25787:41;;;;:::i;:::-;25765:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;25887:13:0;;25872:11;;25865:18;;:4;:18;:::i;:::-;25864:36;;;;:::i;:::-;25847:13;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;25967:13:0;;25948:15;;25941:22;;:4;:22;:::i;:::-;25940:40;;;;:::i;:::-;25919:17;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;25630:768:0;;-1:-1:-1;25630:768:0;;-1:-1:-1;;;;;26042:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;26092:1;26077:12;;:16;26042:51;26038:360;;;26121:33;26150:3;26121:24;26132:12;;26121:6;:10;;:24;;;;:::i;:33::-;26114:40;;26222:12;;26203:15;;26196:4;:22;;;;:::i;:::-;26195:39;;;;:::i;:::-;26173:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;26292:12:0;;26278:10;;26271:17;;:4;:17;:::i;:::-;26270:34;;;;:::i;:::-;26253:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;26370:12:0;;26352:14;;26345:21;;:4;:21;:::i;:::-;26344:38;;;;:::i;:::-;26323:17;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;26038:360:0;26418:8;;26414:91;;26447:42;26463:4;26477;26484;26447:15;:42::i;:::-;26521:14;26531:4;26521:14;;:::i;:::-;;;25578:969;26559:33;26575:4;26581:2;26585:6;26559:15;:33::i;:::-;22667:3933;;;;22554:4046;;;:::o;1142:191::-;1235:6;;;-1:-1:-1;;;;;1252:17:0;;;-1:-1:-1;;;;;;1252:17:0;;;;;;;1285:40;;1235:6;;;1252:17;1235:6;;1285:40;;1216:16;;1285:40;1205:128;1142:191;:::o;22058:188::-;-1:-1:-1;;;;;22141:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;22141:39:0;;;;;;;;;;22198:40;;22141:39;;:31;22198:40;;;22058:188;;:::o;4952:733::-;-1:-1:-1;;;;;5092:20:0;;5084:70;;;;-1:-1:-1;;;5084:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5173:23:0;;5165:71;;;;-1:-1:-1;;;5165:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5333:17:0;;5309:21;5333:17;;;;;;;;;;;5369:23;;;;5361:74;;;;-1:-1:-1;;;5361:74:0;;14835:2:1;5361:74:0;;;14817:21:1;14874:2;14854:18;;;14847:30;14913:34;14893:18;;;14886:62;-1:-1:-1;;;14964:18:1;;;14957:36;15010:19;;5361:74:0;14633:402:1;5361:74:0;-1:-1:-1;;;;;5471:17:0;;;:9;:17;;;;;;;;;;;5491:22;;;5471:42;;5535:20;;;;;;;;:30;;5507:6;;5471:9;5535:30;;5507:6;;5535:30;:::i;:::-;;;;;;;;5600:9;-1:-1:-1;;;;;5583:35:0;5592:6;-1:-1:-1;;;;;5583:35:0;;5611:6;5583:35;;;;1934:25:1;;1922:2;1907:18;;1788:177;5583:35:0;;;;;;;;5631:46;20440:398;27589:1724;27672:4;27628:23;3248:18;;;;;;;;;;;27628:50;;27689:25;27784:13;;27751:17;;27717:18;;:51;;;;:::i;:::-;:80;;;;:::i;:::-;27689:108;-1:-1:-1;27808:12:0;27837:20;;;:46;;-1:-1:-1;27861:22:0;;27837:46;27833:85;;;27900:7;;;27589:1724::o;27833:85::-;27952:18;;:23;;27973:2;27952:23;:::i;:::-;27934:15;:41;27930:115;;;28010:18;;:23;;28031:2;28010:23;:::i;:::-;27992:41;;27930:115;28057:23;28170:1;28137:17;28102:18;;28084:15;:36;;;;:::i;:::-;28083:71;;;;:::i;:::-;:88;;;;:::i;:::-;28057:114;-1:-1:-1;28182:26:0;28211:36;:15;28057:114;28211:19;:36::i;:::-;28182:65;-1:-1:-1;28288:21:0;28322:36;28182:65;28322:16;:36::i;:::-;28371:18;28392:44;:21;28418:17;28392:25;:44::i;:::-;28371:65;;28449:22;28474:83;28554:1;28533:18;;:22;;;;:::i;:::-;28512:44;;:17;:44;:::i;:::-;28489:17;;28474:33;;:10;;:14;:33::i;:83::-;28449:108;;28578:18;28599:79;28675:1;28654:18;;:22;;;;:::i;:::-;28633:44;;:17;:44;:::i;:::-;28614:13;;28599:29;;:10;;:14;:29::i;:79::-;28578:100;-1:-1:-1;28691:23:0;28578:100;28717:27;28730:14;28717:10;:27;:::i;:::-;:40;;;;:::i;:::-;28791:1;28770:18;:22;;;28803:17;:21;;;28835:13;:17;;;28887:10;;28879:47;;28691:66;;-1:-1:-1;;;;;;28887:10:0;;28911;;28879:47;28791:1;28879:47;28911:10;28887;28879:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28865:61:0;;-1:-1:-1;;28943:19:0;;;;;:42;;;28984:1;28966:15;:19;28943:42;28939:278;;;29002:46;29015:15;29032;29002:12;:46::i;:::-;29172:18;;29068:137;;;15452:25:1;;;15508:2;15493:18;;15486:34;;;15536:18;;;15529:34;;;;29068:137:0;;;;;;15440:2:1;29068:137:0;;;28939:278;29251:14;;29243:62;;-1:-1:-1;;;;;29251:14:0;;;;29279:21;;29243:62;;;;29279:21;29251:14;29243:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;27589:1724:0:o;8729:98::-;8787:7;8814:5;8818:1;8814;:5;:::i;:::-;8807:12;8729:98;-1:-1:-1;;;8729:98:0:o;8835:::-;8893:7;8920:5;8924:1;8920;:5;:::i;8623:98::-;8681:7;8708:5;8712:1;8708;:5;:::i;26608:589::-;26758:16;;;26772:1;26758:16;;;;;;;;26734:21;;26758:16;;;;;;;;;;-1:-1:-1;26758:16:0;26734:40;;26803:4;26785;26790:1;26785:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26785:23:0;;;-1:-1:-1;;;;;26785:23:0;;;;;26829:15;-1:-1:-1;;;;;26829:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26819:4;26824:1;26819:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;26819:32:0;;;-1:-1:-1;;;;;26819:32:0;;;;;26864:62;26881:4;26896:15;26914:11;26864:8;:62::i;:::-;26965:224;;-1:-1:-1;;;26965:224:0;;-1:-1:-1;;;;;26965:15:0;:66;;;;:224;;27046:11;;27072:1;;27116:4;;27143;;27163:15;;26965:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26663:534;26608:589;:::o;27205:376::-;27296:62;27313:4;27328:15;27346:11;27296:8;:62::i;:::-;27373:15;-1:-1:-1;;;;;27373:31:0;;27412:9;27445:4;27465:11;27491:1;27508;27525:7;664:6;;-1:-1:-1;;;;;664:6:0;;591:87;27525:7;27373:200;;;;;;-1:-1:-1;;;;;;27373:200:0;;;-1:-1:-1;;;;;17438:15:1;;;27373:200:0;;;17420:34:1;17470:18;;;17463:34;;;;17513:18;;;17506:34;;;;17556:18;;;17549:34;17620:15;;;17599:19;;;17592:44;27547:15:0;17652:19:1;;;17645:35;17354:19;;27373:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27205:376;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:247::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;1382:9;1369:23;1401:31;1426:5;1401:31;:::i;1467:316::-;1544:6;1552;1560;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;-1:-1:-1;;1652:23:1;;;1722:2;1707:18;;1694:32;;-1:-1:-1;1773:2:1;1758:18;;;1745:32;;1467:316;-1:-1:-1;1467:316:1:o;2205:180::-;2264:6;2317:2;2305:9;2296:7;2292:23;2288:32;2285:52;;;2333:1;2330;2323:12;2285:52;-1:-1:-1;2356:23:1;;2205:180;-1:-1:-1;2205:180:1:o;2390:456::-;2467:6;2475;2483;2536:2;2524:9;2515:7;2511:23;2507:32;2504:52;;;2552:1;2549;2542:12;2504:52;2591:9;2578:23;2610:31;2635:5;2610:31;:::i;:::-;2660:5;-1:-1:-1;2717:2:1;2702:18;;2689:32;2730:33;2689:32;2730:33;:::i;:::-;2390:456;;2782:7;;-1:-1:-1;;;2836:2:1;2821:18;;;;2808:32;;2390:456::o;3248:118::-;3334:5;3327:13;3320:21;3313:5;3310:32;3300:60;;3356:1;3353;3346:12;3371:382;3436:6;3444;3497:2;3485:9;3476:7;3472:23;3468:32;3465:52;;;3513:1;3510;3503:12;3465:52;3552:9;3539:23;3571:31;3596:5;3571:31;:::i;:::-;3621:5;-1:-1:-1;3678:2:1;3663:18;;3650:32;3691:30;3650:32;3691:30;:::i;:::-;3740:7;3730:17;;;3371:382;;;;;:::o;3758:388::-;3826:6;3834;3887:2;3875:9;3866:7;3862:23;3858:32;3855:52;;;3903:1;3900;3893:12;3855:52;3942:9;3929:23;3961:31;3986:5;3961:31;:::i;:::-;4011:5;-1:-1:-1;4068:2:1;4053:18;;4040:32;4081:33;4040:32;4081:33;:::i;4151:380::-;4230:1;4226:12;;;;4273;;;4294:61;;4348:4;4340:6;4336:17;4326:27;;4294:61;4401:2;4393:6;4390:14;4370:18;4367:38;4364:161;;4447:10;4442:3;4438:20;4435:1;4428:31;4482:4;4479:1;4472:15;4510:4;4507:1;4500:15;4364:161;;4151:380;;;:::o;4536:356::-;4738:2;4720:21;;;4757:18;;;4750:30;4816:34;4811:2;4796:18;;4789:62;4883:2;4868:18;;4536:356::o;4897:127::-;4958:10;4953:3;4949:20;4946:1;4939:31;4989:4;4986:1;4979:15;5013:4;5010:1;5003:15;5029:125;5094:9;;;5115:10;;;5112:36;;;5128:18;;:::i;5511:168::-;5584:9;;;5615;;5632:15;;;5626:22;;5612:37;5602:71;;5653:18;;:::i;5684:217::-;5724:1;5750;5740:132;;5794:10;5789:3;5785:20;5782:1;5775:31;5829:4;5826:1;5819:15;5857:4;5854:1;5847:15;5740:132;-1:-1:-1;5886:9:1;;5684:217::o;8269:184::-;8339:6;8392:2;8380:9;8371:7;8367:23;8363:32;8360:52;;;8408:1;8405;8398:12;8360:52;-1:-1:-1;8431:16:1;;8269:184;-1:-1:-1;8269:184:1:o;8737:245::-;8804:6;8857:2;8845:9;8836:7;8832:23;8828:32;8825:52;;;8873:1;8870;8863:12;8825:52;8905:9;8899:16;8924:28;8946:5;8924:28;:::i;11450:401::-;11652:2;11634:21;;;11691:2;11671:18;;;11664:30;11730:34;11725:2;11710:18;;11703:62;-1:-1:-1;;;11796:2:1;11781:18;;11774:35;11841:3;11826:19;;11450:401::o;11856:399::-;12058:2;12040:21;;;12097:2;12077:18;;;12070:30;12136:34;12131:2;12116:18;;12109:62;-1:-1:-1;;;12202:2:1;12187:18;;12180:33;12245:3;12230:19;;11856:399::o;14500:128::-;14567:9;;;14588:11;;;14585:37;;;14602:18;;:::i;15706:127::-;15767:10;15762:3;15758:20;15755:1;15748:31;15798:4;15795:1;15788:15;15822:4;15819:1;15812:15;15838:251;15908:6;15961:2;15949:9;15940:7;15936:23;15932:32;15929:52;;;15977:1;15974;15967:12;15929:52;16009:9;16003:16;16028:31;16053:5;16028:31;:::i;16094:980::-;16356:4;16404:3;16393:9;16389:19;16435:6;16424:9;16417:25;16461:2;16499:6;16494:2;16483:9;16479:18;16472:34;16542:3;16537:2;16526:9;16522:18;16515:31;16566:6;16601;16595:13;16632:6;16624;16617:22;16670:3;16659:9;16655:19;16648:26;;16709:2;16701:6;16697:15;16683:29;;16730:1;16740:195;16754:6;16751:1;16748:13;16740:195;;;16819:13;;-1:-1:-1;;;;;16815:39:1;16803:52;;16910:15;;;;16875:12;;;;16851:1;16769:9;16740:195;;;-1:-1:-1;;;;;;;16991:32:1;;;;16986:2;16971:18;;16964:60;-1:-1:-1;;;17055:3:1;17040:19;17033:35;16952:3;16094:980;-1:-1:-1;;;16094:980:1:o;17691:306::-;17779:6;17787;17795;17848:2;17836:9;17827:7;17823:23;17819:32;17816:52;;;17864:1;17861;17854:12;17816:52;17893:9;17887:16;17877:26;;17943:2;17932:9;17928:18;17922:25;17912:35;;17987:2;17976:9;17972:18;17966:25;17956:35;;17691:306;;;;;:::o

Swarm Source

ipfs://6e67ca21b4e9ea57af26c7bb1f6c22f139707ed3fa9d34057e16894c98fcd685
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.