ETH Price: $2,635.18 (+1.72%)

Token

META (META)
 

Overview

Max Total Supply

10,000,000 META

Holders

217

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,108.07255518642459999 META

Value
$0.00
0x5482a56f033b28fc392ef1e8fbfc110db2f8eca6
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:
META

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
Web: https://metaproject.live/

Twitter: https://twitter.com/metab_nft

Telegram: t.me/themetaproject

Discord: https://discord.gg/QSWSc4b5

https://metabillionaire.com/

**/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
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;
    }
}

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    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;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    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 {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    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 META 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 marketingWallet;
    address public devWallet;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 public buyTotalFees = 20;
    uint256 public buyMarketingFee = 10;
    uint256 public buyDevFee = 10;

    uint256 public sellTotalFees = 90;
    uint256 public sellMarketingFee = 45;
    uint256 public sellDevFee = 45;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("META", "META") {
        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 totalSupply = 10_000_000 * 1e18;

        maxTransactionAmount = totalSupply.mul(2) / 100; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply.mul(2) / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = totalSupply.mul(5) / 10000;

        marketingWallet = address(0x873dd29068123D679eEB5FD7b076D83c9dA4283C); // set as marketing wallet
        devWallet = address(0xcFc783ce0ab32e0F43a30cc146FC091dc1e08e97); // set as Dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        swapTokensAtAmount = newAmount * (10 ** 18);
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
    }

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

    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 updateMarketingWallet(
        address newMarketingWallet
    ) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(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");

        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);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / 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 token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

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

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

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForDev = 0;

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

    // TO transfer tokens to multi users through single transaction
    function airdrop(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(1e18);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    // to withdarw ETH from contract
    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    // to withdraw ERC20 tokens from contract
    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","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":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff191660011790556014600e55600a600f819055601055605a601155602d60128190556013553480156200003e57600080fd5b506040805180820182526004808252634d45544160e01b6020808401828152855180870190965292855284015281519192916200007e916003916200068e565b508051620000949060049060208401906200068e565b505050620000b1620000ab620003c660201b60201c565b620003ca565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000d38160016200041c565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000144919062000734565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000192573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b8919062000734565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000734565b6001600160a01b031660a0819052620002479060016200041c565b60a0516200025790600162000496565b6a084595161401484a00000060646200027e826002620004ea602090811b6200154817901c565b6200028a919062000775565b6008556064620002a8826002620004ea602090811b6200154817901c565b620002b4919062000775565b600a55612710620002d3826005620004ea602090811b6200154817901c565b620002df919062000775565b600955600680546001600160a01b031990811673873dd29068123d679eeb5fd7b076d83c9da4283c179091556007805490911673cfc783ce0ab32e0f43a30cc146fc091dc1e08e9717905562000349620003416005546001600160a01b031690565b6001620004ff565b62000356306001620004ff565b6200036561dead6001620004ff565b620003846200037c6005546001600160a01b031690565b60016200041c565b620003913060016200041c565b620003a061dead60016200041c565b620003be620003b76005546001600160a01b031690565b82620005a9565b505062000812565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200046b5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f7d83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6000620004f8828462000798565b9392505050565b6005546001600160a01b031633146200054a5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f7d833981519152604482015260640162000462565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006015760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000462565b8060026000828254620006159190620007ba565b90915550506001600160a01b0382166000908152602081905260408120805483929062000644908490620007ba565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200069c90620007d5565b90600052602060002090601f016020900481019282620006c057600085556200070b565b82601f10620006db57805160ff19168380011785556200070b565b828001600101855582156200070b579182015b828111156200070b578251825591602001919060010190620006ee565b50620007199291506200071d565b5090565b5b808211156200071957600081556001016200071e565b6000602082840312156200074757600080fd5b81516001600160a01b0381168114620004f857600080fd5b634e487b7160e01b600052601160045260246000fd5b6000826200079357634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615620007b557620007b56200075f565b500290565b60008219821115620007d057620007d06200075f565b500190565b600181811c90821680620007ea57607f821691505b602082108114156200080c57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612729620008546000396000818161054c0152610fd6015260008181610419015281816120b90152818161217201526121ae01526127296000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063b62496f5116100f7578063d257b34f11610095578063e2f456051161006f578063e2f45605146109a5578063f14210a6146109bb578063f2fde38b146109db578063f8b45b05146109fb57600080fd5b8063d257b34f14610929578063d85ba06314610949578063dd62ed3e1461095f57600080fd5b8063c0246668116100d1578063c0246668146108bd578063c18bc195146108dd578063c6d2577d146108fd578063c8c8ebe41461091357600080fd5b8063b62496f514610858578063bbc0c74214610888578063bf56b371146108a757600080fd5b80639c3b4fdc11610164578063a0d82dc51161013e578063a0d82dc5146107e2578063a457c2d7146107f8578063a9059cbb14610818578063aacebbe31461083857600080fd5b80639c3b4fdc146107965780639e281a98146107ac5780639fccce32146107cc57600080fd5b80638da5cb5b146106ed5780638ea5220f1461070b578063921369131461072b578063924de9b71461074157806395d89b41146107615780639a7a23d61461077657600080fd5b806339509351116102855780636ddd171311610223578063751039fc116101fd578063751039fc146106825780637571336a1461069757806375f0a874146106b75780637bce5a04146106d757600080fd5b80636ddd17131461061757806370a0823114610637578063715018a61461066d57600080fd5b80634fbee1931161025f5780634fbee1931461058857806366ca9b83146105c157806367243482146105e15780636a486a8e1461060157600080fd5b8063395093511461051a57806349bd5a5e1461053a5780634a62bb651461056e57600080fd5b806318160ddd116102f2578063203e727e116102cc578063203e727e146104a857806323b872dd146104c857806327c8f835146104e8578063313ce567146104fe57600080fd5b806318160ddd146104535780631816467f146104725780631f3fed8f1461049257600080fd5b806301339c211461034557806302dbd8f81461035c57806306fdde031461037c578063095ea7b3146103a757806310d5de53146103d75780631694505e1461040757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a11565b005b34801561036857600080fd5b5061035a610377366004612222565b610aa6565b34801561038857600080fd5b50610391610aeb565b60405161039e9190612244565b60405180910390f35b3480156103b357600080fd5b506103c76103c23660046122ae565b610b7d565b604051901515815260200161039e565b3480156103e357600080fd5b506103c76103f23660046122da565b60176020526000908152604090205460ff1681565b34801561041357600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039e565b34801561045f57600080fd5b506002545b60405190815260200161039e565b34801561047e57600080fd5b5061035a61048d3660046122da565b610b93565b34801561049e57600080fd5b5061046460145481565b3480156104b457600080fd5b5061035a6104c33660046122f7565b610c1a565b3480156104d457600080fd5b506103c76104e3366004612310565b610c5c565b3480156104f457600080fd5b5061043b61dead81565b34801561050a57600080fd5b506040516012815260200161039e565b34801561052657600080fd5b506103c76105353660046122ae565b610d06565b34801561054657600080fd5b5061043b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561057a57600080fd5b50600b546103c79060ff1681565b34801561059457600080fd5b506103c76105a33660046122da565b6001600160a01b031660009081526016602052604090205460ff1690565b3480156105cd57600080fd5b5061035a6105dc366004612222565b610d42565b3480156105ed57600080fd5b5061035a6105fc36600461239d565b610d87565b34801561060d57600080fd5b5061046460115481565b34801561062357600080fd5b50600b546103c79062010000900460ff1681565b34801561064357600080fd5b506104646106523660046122da565b6001600160a01b031660009081526020819052604090205490565b34801561067957600080fd5b5061035a610e8d565b34801561068e57600080fd5b506103c7610ec3565b3480156106a357600080fd5b5061035a6106b2366004612417565b610f00565b3480156106c357600080fd5b5060065461043b906001600160a01b031681565b3480156106e357600080fd5b50610464600f5481565b3480156106f957600080fd5b506005546001600160a01b031661043b565b34801561071757600080fd5b5060075461043b906001600160a01b031681565b34801561073757600080fd5b5061046460125481565b34801561074d57600080fd5b5061035a61075c366004612450565b610f55565b34801561076d57600080fd5b50610391610f9b565b34801561078257600080fd5b5061035a610791366004612417565b610faa565b3480156107a257600080fd5b5061046460105481565b3480156107b857600080fd5b5061035a6107c73660046122ae565b61108a565b3480156107d857600080fd5b5061046460155481565b3480156107ee57600080fd5b5061046460135481565b34801561080457600080fd5b506103c76108133660046122ae565b6111d3565b34801561082457600080fd5b506103c76108333660046122ae565b61126c565b34801561084457600080fd5b5061035a6108533660046122da565b611279565b34801561086457600080fd5b506103c76108733660046122da565b60186020526000908152604090205460ff1681565b34801561089457600080fd5b50600b546103c790610100900460ff1681565b3480156108b357600080fd5b50610464600c5481565b3480156108c957600080fd5b5061035a6108d8366004612417565b611300565b3480156108e957600080fd5b5061035a6108f83660046122f7565b611389565b34801561090957600080fd5b50610464600d5481565b34801561091f57600080fd5b5061046460085481565b34801561093557600080fd5b506103c76109443660046122f7565b6113cb565b34801561095557600080fd5b50610464600e5481565b34801561096b57600080fd5b5061046461097a36600461246d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b157600080fd5b5061046460095481565b3480156109c757600080fd5b5061035a6109d63660046122f7565b611415565b3480156109e757600080fd5b5061035a6109f63660046122da565b6114ad565b348015610a0757600080fd5b50610464600a5481565b6005546001600160a01b03163314610a445760405162461bcd60e51b8152600401610a3b9061249b565b60405180910390fd5b600c5415610a8b5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610a3b565b43600c5542600d55600b805462ffff00191662010100179055565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a3b9061249b565b60128290556013819055610ae481836124e6565b6011555050565b606060038054610afa906124fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b26906124fe565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905090565b6000610b8a33848461155b565b50600192915050565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a3b9061249b565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c445760405162461bcd60e51b8152600401610a3b9061249b565b610c5681670de0b6b3a7640000612539565b60085550565b6000610c6984848461167f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a3b565b610cfb853385840361155b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b8a918590610d3d9086906124e6565b61155b565b6005546001600160a01b03163314610d6c5760405162461bcd60e51b8152600401610a3b9061249b565b600f8290556010819055610d8081836124e6565b600e555050565b6005546001600160a01b03163314610db15760405162461bcd60e51b8152600401610a3b9061249b565b828114610e005760405162461bcd60e51b815260206004820152601960248201527f41727261792073697a6573206d75737420626520657175616c000000000000006044820152606401610a3b565b60005b83811015610e86576000610e40670de0b6b3a7640000858585818110610e2b57610e2b612558565b9050602002013561154890919063ffffffff16565b9050610e7333878785818110610e5857610e58612558565b9050602002016020810190610e6d91906122da565b8361167f565b610e7e6001836124e6565b915050610e03565b5050505050565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610a3b9061249b565b610ec16000611d27565b565b6005546000906001600160a01b03163314610ef05760405162461bcd60e51b8152600401610a3b9061249b565b50600b805460ff19169055600190565b6005546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610a3b9061249b565b600b8054911515620100000262ff000019909216919091179055565b606060048054610afa906124fe565b6005546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610a3b9061249b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141561107c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a3b565b6110868282611d79565b5050565b6005546001600160a01b031633146110b45760405162461bcd60e51b8152600401610a3b9061249b565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e919061256e565b101561115d5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a3b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612587565b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3b565b611262338585840361155b565b5060019392505050565b6000610b8a33848461167f565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610a3b9061249b565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113b35760405162461bcd60e51b8152600401610a3b9061249b565b6113c581670de0b6b3a7640000612539565b600a5550565b6005546000906001600160a01b031633146113f85760405162461bcd60e51b8152600401610a3b9061249b565b61140a82670de0b6b3a7640000612539565b600955506001919050565b6005546001600160a01b0316331461143f5760405162461bcd60e51b8152600401610a3b9061249b565b804710156114805760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a3b565b604051339082156108fc029083906000818181858888f19350505050158015611086573d6000803e3d6000fd5b6005546001600160a01b031633146114d75760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b03811661153c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3b565b61154581611d27565b50565b60006115548284612539565b9392505050565b6001600160a01b0383166115bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3b565b6001600160a01b03821661161e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116a55760405162461bcd60e51b8152600401610a3b906125a4565b6001600160a01b0382166116cb5760405162461bcd60e51b8152600401610a3b906125e9565b806116dc576111ce83836000611dcd565b600b5460ff1615611a52576005546001600160a01b0384811691161480159061171357506005546001600160a01b03838116911614155b801561172757506001600160a01b03821615155b801561173e57506001600160a01b03821661dead14155b80156117545750600554600160a01b900460ff16155b15611a5257600b54610100900460ff166117ec576001600160a01b03831660009081526016602052604090205460ff16806117a757506001600160a01b03821660009081526016602052604090205460ff165b6117ec5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a3b565b6001600160a01b03831660009081526018602052604090205460ff16801561182d57506001600160a01b03821660009081526017602052604090205460ff16155b15611911576008548111156118a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a3b565b600a546001600160a01b0383166000908152602081905260409020546118c890836124e6565b111561190c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a3b565b611a52565b6001600160a01b03821660009081526018602052604090205460ff16801561195257506001600160a01b03831660009081526017602052604090205460ff16155b156119c85760085481111561190c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a3b565b6001600160a01b03821660009081526017602052604090205460ff16611a5257600a546001600160a01b038316600090815260208190526040902054611a0e90836124e6565b1115611a525760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a3b565b3060009081526020819052604090205460095481108015908190611a7e5750600b5462010000900460ff165b8015611a945750600554600160a01b900460ff16155b8015611ab957506001600160a01b03851660009081526018602052604090205460ff16155b8015611ade57506001600160a01b03851660009081526016602052604090205460ff16155b8015611b0357506001600160a01b03841660009081526016602052604090205460ff16155b15611b31576005805460ff60a01b1916600160a01b179055611b23611f22565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611b7f57506001600160a01b03851660009081526016602052604090205460ff165b15611b88575060005b60008115611d13576001600160a01b03861660009081526018602052604090205460ff168015611bba57506000601154115b15611c4857611bdf6064611bd96011548861154890919063ffffffff16565b90612056565b905060115460125482611bf29190612539565b611bfc919061262c565b60146000828254611c0d91906124e6565b9091555050601154601354611c229083612539565b611c2c919061262c565b60156000828254611c3d91906124e6565b90915550611cf59050565b6001600160a01b03871660009081526018602052604090205460ff168015611c7257506000600e54115b15611cf557611c916064611bd9600e548861154890919063ffffffff16565b9050600e54600f5482611ca49190612539565b611cae919061262c565b60146000828254611cbf91906124e6565b9091555050600e54601054611cd49083612539565b611cde919061262c565b60156000828254611cef91906124e6565b90915550505b8015611d0657611d06873083611dcd565b611d10818661264e565b94505b611d1e878787611dcd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611df35760405162461bcd60e51b8152600401610a3b906125a4565b6001600160a01b038216611e195760405162461bcd60e51b8152600401610a3b906125e9565b6001600160a01b03831660009081526020819052604090205481811015611e915760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a3b565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ec89084906124e6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1491815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601554601454611f4691906124e6565b90506000821580611f55575081155b15611f5f57505050565b600954831115611f6f5760095492505b82611f7981612062565b60004790506000611f9985611bd96014548561154890919063ffffffff16565b6000601481905560158190556006546040519293506001600160a01b031691839181818185875af1925050503d8060008114611ff1576040519150601f19603f3d011682016040523d82523d6000602084013e611ff6565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612046576040519150601f19603f3d011682016040523d82523d6000602084013e61204b565b606091505b505050505050505050565b6000611554828461262c565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061209757612097612558565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190612665565b8160018151811061214c5761214c612558565b60200260200101906001600160a01b031690816001600160a01b031681525050612197307f00000000000000000000000000000000000000000000000000000000000000008461155b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906121ec908590600090869030904290600401612682565b600060405180830381600087803b15801561220657600080fd5b505af115801561221a573d6000803e3d6000fd5b505050505050565b6000806040838503121561223557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561227157858101830151858201604001528201612255565b81811115612283576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461154557600080fd5b600080604083850312156122c157600080fd5b82356122cc81612299565b946020939093013593505050565b6000602082840312156122ec57600080fd5b813561155481612299565b60006020828403121561230957600080fd5b5035919050565b60008060006060848603121561232557600080fd5b833561233081612299565b9250602084013561234081612299565b929592945050506040919091013590565b60008083601f84011261236357600080fd5b50813567ffffffffffffffff81111561237b57600080fd5b6020830191508360208260051b850101111561239657600080fd5b9250929050565b600080600080604085870312156123b357600080fd5b843567ffffffffffffffff808211156123cb57600080fd5b6123d788838901612351565b909650945060208701359150808211156123f057600080fd5b506123fd87828801612351565b95989497509550505050565b801515811461154557600080fd5b6000806040838503121561242a57600080fd5b823561243581612299565b9150602083013561244581612409565b809150509250929050565b60006020828403121561246257600080fd5b813561155481612409565b6000806040838503121561248057600080fd5b823561248b81612299565b9150602083013561244581612299565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156124f9576124f96124d0565b500190565b600181811c9082168061251257607f821691505b6020821081141561253357634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612553576125536124d0565b500290565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561258057600080fd5b5051919050565b60006020828403121561259957600080fd5b815161155481612409565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261264957634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612660576126606124d0565b500390565b60006020828403121561267757600080fd5b815161155481612299565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d25784516001600160a01b0316835293830193918301916001016126ad565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e1b0cb302dc5cb69942c5c57ba798d4768d0c0b8ad3df6a424ebd7bcfec3791664736f6c634300080a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063b62496f5116100f7578063d257b34f11610095578063e2f456051161006f578063e2f45605146109a5578063f14210a6146109bb578063f2fde38b146109db578063f8b45b05146109fb57600080fd5b8063d257b34f14610929578063d85ba06314610949578063dd62ed3e1461095f57600080fd5b8063c0246668116100d1578063c0246668146108bd578063c18bc195146108dd578063c6d2577d146108fd578063c8c8ebe41461091357600080fd5b8063b62496f514610858578063bbc0c74214610888578063bf56b371146108a757600080fd5b80639c3b4fdc11610164578063a0d82dc51161013e578063a0d82dc5146107e2578063a457c2d7146107f8578063a9059cbb14610818578063aacebbe31461083857600080fd5b80639c3b4fdc146107965780639e281a98146107ac5780639fccce32146107cc57600080fd5b80638da5cb5b146106ed5780638ea5220f1461070b578063921369131461072b578063924de9b71461074157806395d89b41146107615780639a7a23d61461077657600080fd5b806339509351116102855780636ddd171311610223578063751039fc116101fd578063751039fc146106825780637571336a1461069757806375f0a874146106b75780637bce5a04146106d757600080fd5b80636ddd17131461061757806370a0823114610637578063715018a61461066d57600080fd5b80634fbee1931161025f5780634fbee1931461058857806366ca9b83146105c157806367243482146105e15780636a486a8e1461060157600080fd5b8063395093511461051a57806349bd5a5e1461053a5780634a62bb651461056e57600080fd5b806318160ddd116102f2578063203e727e116102cc578063203e727e146104a857806323b872dd146104c857806327c8f835146104e8578063313ce567146104fe57600080fd5b806318160ddd146104535780631816467f146104725780631f3fed8f1461049257600080fd5b806301339c211461034557806302dbd8f81461035c57806306fdde031461037c578063095ea7b3146103a757806310d5de53146103d75780631694505e1461040757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a610a11565b005b34801561036857600080fd5b5061035a610377366004612222565b610aa6565b34801561038857600080fd5b50610391610aeb565b60405161039e9190612244565b60405180910390f35b3480156103b357600080fd5b506103c76103c23660046122ae565b610b7d565b604051901515815260200161039e565b3480156103e357600080fd5b506103c76103f23660046122da565b60176020526000908152604090205460ff1681565b34801561041357600080fd5b5061043b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161039e565b34801561045f57600080fd5b506002545b60405190815260200161039e565b34801561047e57600080fd5b5061035a61048d3660046122da565b610b93565b34801561049e57600080fd5b5061046460145481565b3480156104b457600080fd5b5061035a6104c33660046122f7565b610c1a565b3480156104d457600080fd5b506103c76104e3366004612310565b610c5c565b3480156104f457600080fd5b5061043b61dead81565b34801561050a57600080fd5b506040516012815260200161039e565b34801561052657600080fd5b506103c76105353660046122ae565b610d06565b34801561054657600080fd5b5061043b7f00000000000000000000000042596b634675fc86c75b7a138d66f3bb909cdfca81565b34801561057a57600080fd5b50600b546103c79060ff1681565b34801561059457600080fd5b506103c76105a33660046122da565b6001600160a01b031660009081526016602052604090205460ff1690565b3480156105cd57600080fd5b5061035a6105dc366004612222565b610d42565b3480156105ed57600080fd5b5061035a6105fc36600461239d565b610d87565b34801561060d57600080fd5b5061046460115481565b34801561062357600080fd5b50600b546103c79062010000900460ff1681565b34801561064357600080fd5b506104646106523660046122da565b6001600160a01b031660009081526020819052604090205490565b34801561067957600080fd5b5061035a610e8d565b34801561068e57600080fd5b506103c7610ec3565b3480156106a357600080fd5b5061035a6106b2366004612417565b610f00565b3480156106c357600080fd5b5060065461043b906001600160a01b031681565b3480156106e357600080fd5b50610464600f5481565b3480156106f957600080fd5b506005546001600160a01b031661043b565b34801561071757600080fd5b5060075461043b906001600160a01b031681565b34801561073757600080fd5b5061046460125481565b34801561074d57600080fd5b5061035a61075c366004612450565b610f55565b34801561076d57600080fd5b50610391610f9b565b34801561078257600080fd5b5061035a610791366004612417565b610faa565b3480156107a257600080fd5b5061046460105481565b3480156107b857600080fd5b5061035a6107c73660046122ae565b61108a565b3480156107d857600080fd5b5061046460155481565b3480156107ee57600080fd5b5061046460135481565b34801561080457600080fd5b506103c76108133660046122ae565b6111d3565b34801561082457600080fd5b506103c76108333660046122ae565b61126c565b34801561084457600080fd5b5061035a6108533660046122da565b611279565b34801561086457600080fd5b506103c76108733660046122da565b60186020526000908152604090205460ff1681565b34801561089457600080fd5b50600b546103c790610100900460ff1681565b3480156108b357600080fd5b50610464600c5481565b3480156108c957600080fd5b5061035a6108d8366004612417565b611300565b3480156108e957600080fd5b5061035a6108f83660046122f7565b611389565b34801561090957600080fd5b50610464600d5481565b34801561091f57600080fd5b5061046460085481565b34801561093557600080fd5b506103c76109443660046122f7565b6113cb565b34801561095557600080fd5b50610464600e5481565b34801561096b57600080fd5b5061046461097a36600461246d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109b157600080fd5b5061046460095481565b3480156109c757600080fd5b5061035a6109d63660046122f7565b611415565b3480156109e757600080fd5b5061035a6109f63660046122da565b6114ad565b348015610a0757600080fd5b50610464600a5481565b6005546001600160a01b03163314610a445760405162461bcd60e51b8152600401610a3b9061249b565b60405180910390fd5b600c5415610a8b5760405162461bcd60e51b8152602060048201526014602482015273416c7265616479206c61756e6368656420626f6960601b6044820152606401610a3b565b43600c5542600d55600b805462ffff00191662010100179055565b6005546001600160a01b03163314610ad05760405162461bcd60e51b8152600401610a3b9061249b565b60128290556013819055610ae481836124e6565b6011555050565b606060038054610afa906124fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b26906124fe565b8015610b735780601f10610b4857610100808354040283529160200191610b73565b820191906000526020600020905b815481529060010190602001808311610b5657829003601f168201915b5050505050905090565b6000610b8a33848461155b565b50600192915050565b6005546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a3b9061249b565b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610c445760405162461bcd60e51b8152600401610a3b9061249b565b610c5681670de0b6b3a7640000612539565b60085550565b6000610c6984848461167f565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a3b565b610cfb853385840361155b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b8a918590610d3d9086906124e6565b61155b565b6005546001600160a01b03163314610d6c5760405162461bcd60e51b8152600401610a3b9061249b565b600f8290556010819055610d8081836124e6565b600e555050565b6005546001600160a01b03163314610db15760405162461bcd60e51b8152600401610a3b9061249b565b828114610e005760405162461bcd60e51b815260206004820152601960248201527f41727261792073697a6573206d75737420626520657175616c000000000000006044820152606401610a3b565b60005b83811015610e86576000610e40670de0b6b3a7640000858585818110610e2b57610e2b612558565b9050602002013561154890919063ffffffff16565b9050610e7333878785818110610e5857610e58612558565b9050602002016020810190610e6d91906122da565b8361167f565b610e7e6001836124e6565b915050610e03565b5050505050565b6005546001600160a01b03163314610eb75760405162461bcd60e51b8152600401610a3b9061249b565b610ec16000611d27565b565b6005546000906001600160a01b03163314610ef05760405162461bcd60e51b8152600401610a3b9061249b565b50600b805460ff19169055600190565b6005546001600160a01b03163314610f2a5760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f7f5760405162461bcd60e51b8152600401610a3b9061249b565b600b8054911515620100000262ff000019909216919091179055565b606060048054610afa906124fe565b6005546001600160a01b03163314610fd45760405162461bcd60e51b8152600401610a3b9061249b565b7f00000000000000000000000042596b634675fc86c75b7a138d66f3bb909cdfca6001600160a01b0316826001600160a01b0316141561107c5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a3b565b6110868282611d79565b5050565b6005546001600160a01b031633146110b45760405162461bcd60e51b8152600401610a3b9061249b565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111e919061256e565b101561115d5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a3b565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190612587565b505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156112555760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a3b565b611262338585840361155b565b5060019392505050565b6000610b8a33848461167f565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610a3b9061249b565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461132a5760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146113b35760405162461bcd60e51b8152600401610a3b9061249b565b6113c581670de0b6b3a7640000612539565b600a5550565b6005546000906001600160a01b031633146113f85760405162461bcd60e51b8152600401610a3b9061249b565b61140a82670de0b6b3a7640000612539565b600955506001919050565b6005546001600160a01b0316331461143f5760405162461bcd60e51b8152600401610a3b9061249b565b804710156114805760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b6044820152606401610a3b565b604051339082156108fc029083906000818181858888f19350505050158015611086573d6000803e3d6000fd5b6005546001600160a01b031633146114d75760405162461bcd60e51b8152600401610a3b9061249b565b6001600160a01b03811661153c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a3b565b61154581611d27565b50565b60006115548284612539565b9392505050565b6001600160a01b0383166115bd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a3b565b6001600160a01b03821661161e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a3b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116a55760405162461bcd60e51b8152600401610a3b906125a4565b6001600160a01b0382166116cb5760405162461bcd60e51b8152600401610a3b906125e9565b806116dc576111ce83836000611dcd565b600b5460ff1615611a52576005546001600160a01b0384811691161480159061171357506005546001600160a01b03838116911614155b801561172757506001600160a01b03821615155b801561173e57506001600160a01b03821661dead14155b80156117545750600554600160a01b900460ff16155b15611a5257600b54610100900460ff166117ec576001600160a01b03831660009081526016602052604090205460ff16806117a757506001600160a01b03821660009081526016602052604090205460ff165b6117ec5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a3b565b6001600160a01b03831660009081526018602052604090205460ff16801561182d57506001600160a01b03821660009081526017602052604090205460ff16155b15611911576008548111156118a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a3b565b600a546001600160a01b0383166000908152602081905260409020546118c890836124e6565b111561190c5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a3b565b611a52565b6001600160a01b03821660009081526018602052604090205460ff16801561195257506001600160a01b03831660009081526017602052604090205460ff16155b156119c85760085481111561190c5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a3b565b6001600160a01b03821660009081526017602052604090205460ff16611a5257600a546001600160a01b038316600090815260208190526040902054611a0e90836124e6565b1115611a525760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a3b565b3060009081526020819052604090205460095481108015908190611a7e5750600b5462010000900460ff165b8015611a945750600554600160a01b900460ff16155b8015611ab957506001600160a01b03851660009081526018602052604090205460ff16155b8015611ade57506001600160a01b03851660009081526016602052604090205460ff16155b8015611b0357506001600160a01b03841660009081526016602052604090205460ff16155b15611b31576005805460ff60a01b1916600160a01b179055611b23611f22565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611b7f57506001600160a01b03851660009081526016602052604090205460ff165b15611b88575060005b60008115611d13576001600160a01b03861660009081526018602052604090205460ff168015611bba57506000601154115b15611c4857611bdf6064611bd96011548861154890919063ffffffff16565b90612056565b905060115460125482611bf29190612539565b611bfc919061262c565b60146000828254611c0d91906124e6565b9091555050601154601354611c229083612539565b611c2c919061262c565b60156000828254611c3d91906124e6565b90915550611cf59050565b6001600160a01b03871660009081526018602052604090205460ff168015611c7257506000600e54115b15611cf557611c916064611bd9600e548861154890919063ffffffff16565b9050600e54600f5482611ca49190612539565b611cae919061262c565b60146000828254611cbf91906124e6565b9091555050600e54601054611cd49083612539565b611cde919061262c565b60156000828254611cef91906124e6565b90915550505b8015611d0657611d06873083611dcd565b611d10818661264e565b94505b611d1e878787611dcd565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611df35760405162461bcd60e51b8152600401610a3b906125a4565b6001600160a01b038216611e195760405162461bcd60e51b8152600401610a3b906125e9565b6001600160a01b03831660009081526020819052604090205481811015611e915760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a3b565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611ec89084906124e6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f1491815260200190565b60405180910390a350505050565b3060009081526020819052604081205490506000601554601454611f4691906124e6565b90506000821580611f55575081155b15611f5f57505050565b600954831115611f6f5760095492505b82611f7981612062565b60004790506000611f9985611bd96014548561154890919063ffffffff16565b6000601481905560158190556006546040519293506001600160a01b031691839181818185875af1925050503d8060008114611ff1576040519150601f19603f3d011682016040523d82523d6000602084013e611ff6565b606091505b50506007546040519195506001600160a01b0316904790600081818185875af1925050503d8060008114612046576040519150601f19603f3d011682016040523d82523d6000602084013e61204b565b606091505b505050505050505050565b6000611554828461262c565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061209757612097612558565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190612665565b8160018151811061214c5761214c612558565b60200260200101906001600160a01b031690816001600160a01b031681525050612197307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461155b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906121ec908590600090869030904290600401612682565b600060405180830381600087803b15801561220657600080fd5b505af115801561221a573d6000803e3d6000fd5b505050505050565b6000806040838503121561223557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561227157858101830151858201604001528201612255565b81811115612283576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461154557600080fd5b600080604083850312156122c157600080fd5b82356122cc81612299565b946020939093013593505050565b6000602082840312156122ec57600080fd5b813561155481612299565b60006020828403121561230957600080fd5b5035919050565b60008060006060848603121561232557600080fd5b833561233081612299565b9250602084013561234081612299565b929592945050506040919091013590565b60008083601f84011261236357600080fd5b50813567ffffffffffffffff81111561237b57600080fd5b6020830191508360208260051b850101111561239657600080fd5b9250929050565b600080600080604085870312156123b357600080fd5b843567ffffffffffffffff808211156123cb57600080fd5b6123d788838901612351565b909650945060208701359150808211156123f057600080fd5b506123fd87828801612351565b95989497509550505050565b801515811461154557600080fd5b6000806040838503121561242a57600080fd5b823561243581612299565b9150602083013561244581612409565b809150509250929050565b60006020828403121561246257600080fd5b813561155481612409565b6000806040838503121561248057600080fd5b823561248b81612299565b9150602083013561244581612299565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156124f9576124f96124d0565b500190565b600181811c9082168061251257607f821691505b6020821081141561253357634e487b7160e01b600052602260045260246000fd5b50919050565b6000816000190483118215151615612553576125536124d0565b500290565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561258057600080fd5b5051919050565b60006020828403121561259957600080fd5b815161155481612409565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008261264957634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612660576126606124d0565b500390565b60006020828403121561267757600080fd5b815161155481612299565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126d25784516001600160a01b0316835293830193918301916001016126ad565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e1b0cb302dc5cb69942c5c57ba798d4768d0c0b8ad3df6a424ebd7bcfec3791664736f6c634300080a0033

Deployed Bytecode Sourcemap

18787:13687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22595:246;;;;;;;;;;;;;:::i;:::-;;24156;;;;;;;;;;-1:-1:-1;24156:246:0;;;;;:::i;:::-;;:::i;4837:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6234:194;;;;;;;;;;-1:-1:-1;6234:194:0;;;;;:::i;:::-;;:::i;:::-;;;1490:14:1;;1483:22;1465:41;;1453:2;1438:18;6234:194:0;1325:187:1;19893:63:0;;;;;;;;;;-1:-1:-1;19893:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18861:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1960:32:1;;;1942:51;;1930:2;1915:18;18861:51:0;1769:230:1;5326:108:0;;;;;;;;;;-1:-1:-1;5414:12:0;;5326:108;;;2150:25:1;;;2138:2;2123:18;5326:108:0;2004:177:1;25342:157:0;;;;;;;;;;-1:-1:-1;25342:157:0;;;;;:::i;:::-;;:::i;19677:33::-;;;;;;;;;;;;;;;;23279:124;;;;;;;;;;-1:-1:-1;23279:124:0;;;;;:::i;:::-;;:::i;6436:529::-;;;;;;;;;;-1:-1:-1;6436:529:0;;;;;:::i;:::-;;:::i;18964:53::-;;;;;;;;;;;;19010:6;18964:53;;5168:93;;;;;;;;;;-1:-1:-1;5168:93:0;;5251:2;3182:36:1;;3170:2;3155:18;5168:93:0;3040:184:1;6973:290:0;;;;;;;;;;-1:-1:-1;6973:290:0;;;;;:::i;:::-;;:::i;18919:38::-;;;;;;;;;;;;;;;19241:33;;;;;;;;;;-1:-1:-1;19241:33:0;;;;;;;;25507:126;;;;;;;;;;-1:-1:-1;25507:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;25597:28:0;25573:4;25597:28;;;:19;:28;;;;;;;;;25507:126;23908:240;;;;;;;;;;-1:-1:-1;23908:240:0;;;;;:::i;:::-;;:::i;31523:455::-;;;;;;;;;;-1:-1:-1;31523:455:0;;;;;:::i;:::-;;:::i;19555:33::-;;;;;;;;;;;;;;;;19321:31;;;;;;;;;;-1:-1:-1;19321:31:0;;;;;;;;;;;5497:143;;;;;;;;;;-1:-1:-1;5497:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;5614:18:0;5587:7;5614:18;;;;;;;;;;;;5497:143;1269:103;;;;;;;;;;;;;:::i;22893:121::-;;;;;;;;;;;;;:::i;23535:169::-;;;;;;;;;;-1:-1:-1;23535:169:0;;;;;:::i;:::-;;:::i;19056:30::-;;;;;;;;;;-1:-1:-1;19056:30:0;;;;-1:-1:-1;;;;;19056:30:0;;;19475:35;;;;;;;;;;;;;;;;961:87;;;;;;;;;;-1:-1:-1;1034:6:0;;-1:-1:-1;;;;;1034:6:0;961:87;;19093:24;;;;;;;;;;-1:-1:-1;19093:24:0;;;;-1:-1:-1;;;;;19093:24:0;;;19595:36;;;;;;;;;;;;;;;;23800:100;;;;;;;;;;-1:-1:-1;23800:100:0;;;;;:::i;:::-;;:::i;5056:104::-;;;;;;;;;;;;;:::i;24600:306::-;;;;;;;;;;-1:-1:-1;24600:306:0;;;;;:::i;:::-;;:::i;19517:29::-;;;;;;;;;;;;;;;;32262:209;;;;;;;;;;-1:-1:-1;32262:209:0;;;;;:::i;:::-;;:::i;19717:27::-;;;;;;;;;;;;;;;;19638:30;;;;;;;;;;;;;;;;7271:475;;;;;;;;;;-1:-1:-1;7271:475:0;;;;;:::i;:::-;;:::i;5648:200::-;;;;;;;;;;-1:-1:-1;5648:200:0;;;;;:::i;:::-;;:::i;25110:224::-;;;;;;;;;;-1:-1:-1;25110:224:0;;;;;:::i;:::-;;:::i;20114:57::-;;;;;;;;;;-1:-1:-1;20114:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19281:33;;;;;;;;;;-1:-1:-1;19281:33:0;;;;;;;;;;;19361:25;;;;;;;;;;;;;;;;24410:182;;;;;;;;;;-1:-1:-1;24410:182:0;;;;;:::i;:::-;;:::i;23411:116::-;;;;;;;;;;-1:-1:-1;23411:116:0;;;;;:::i;:::-;;:::i;19393:34::-;;;;;;;;;;;;;;;;19126:35;;;;;;;;;;;;;;;;23084:187;;;;;;;;;;-1:-1:-1;23084:187:0;;;;;:::i;:::-;;:::i;19436:32::-;;;;;;;;;;;;;;;;5911:176;;;;;;;;;;-1:-1:-1;5911:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;6052:18:0;;;6025:7;6052:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5911:176;19168:33;;;;;;;;;;;;;;;;32024:183;;;;;;;;;;-1:-1:-1;32024:183:0;;;;;:::i;:::-;;:::i;1527:238::-;;;;;;;;;;-1:-1:-1;1527:238:0;;;;;:::i;:::-;;:::i;19208:24::-;;;;;;;;;;;;;;;;22595:246;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;;;;;;;;;22649:10:::1;::::0;:15;22641:48:::1;;;::::0;-1:-1:-1;;;22641:48:0;;6425:2:1;22641:48:0::1;::::0;::::1;6407:21:1::0;6464:2;6444:18;;;6437:30;-1:-1:-1;;;6483:18:1;;;6476:50;6543:18;;22641:48:0::1;6223:344:1::0;22641:48:0::1;22713:12;22700:10;:25:::0;22758:15:::1;22736:19;:37:::0;22784:13:::1;:20:::0;;-1:-1:-1;;22815:18:0;;;;;22595:246::o;24156:::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;24275:16:::1;:32:::0;;;24318:10:::1;:20:::0;;;24365:29:::1;24331:7:::0;24294:13;24365:29:::1;:::i;:::-;24349:13;:45:::0;-1:-1:-1;;24156:246:0:o;4837:100::-;4891:13;4924:5;4917:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4837:100;:::o;6234:194::-;6342:4;6359:39;399:10;6382:7;6391:6;6359:8;:39::i;:::-;-1:-1:-1;6416:4:0;6234:194;;;;:::o;25342:157::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;25449:9:::1;::::0;25421:38:::1;::::0;-1:-1:-1;;;;;25449:9:0;;::::1;::::0;25421:38;::::1;::::0;::::1;::::0;25449:9:::1;::::0;25421:38:::1;25470:9;:21:::0;;-1:-1:-1;;;;;;25470:21:0::1;-1:-1:-1::0;;;;;25470:21:0;;;::::1;::::0;;;::::1;::::0;;25342:157::o;23279:124::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;23376:19:::1;:6:::0;23386:8:::1;23376:19;:::i;:::-;23353:20;:42:::0;-1:-1:-1;23279:124:0:o;6436:529::-;6576:4;6593:36;6603:6;6611:9;6622:6;6593:9;:36::i;:::-;-1:-1:-1;;;;;6669:19:0;;6642:24;6669:19;;;:11;:19;;;;;;;;399:10;6669:33;;;;;;;;6735:26;;;;6713:116;;;;-1:-1:-1;;;6713:116:0;;7597:2:1;6713:116:0;;;7579:21:1;7636:2;7616:18;;;7609:30;7675:34;7655:18;;;7648:62;-1:-1:-1;;;7726:18:1;;;7719:38;7774:19;;6713:116:0;7395:404:1;6713:116:0;6865:57;6874:6;399:10;6915:6;6896:16;:25;6865:8;:57::i;:::-;-1:-1:-1;6953:4:0;;6436:529;-1:-1:-1;;;;6436:529:0:o;6973:290::-;399:10;7086:4;7175:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7175:34:0;;;;;;;;;;7086:4;;7103:130;;7153:7;;7175:47;;7212:10;;7175:47;:::i;:::-;7103:8;:130::i;23908:240::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;24026:15:::1;:31:::0;;;24068:9:::1;:19:::0;;;24113:27:::1;24080:7:::0;24044:13;24113:27:::1;:::i;:::-;24098:12;:42:::0;-1:-1:-1;;23908:240:0:o;31523:455::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;31675:34;;::::1;31653:109;;;::::0;-1:-1:-1;;;31653:109:0;;8006:2:1;31653:109:0::1;::::0;::::1;7988:21:1::0;8045:2;8025:18;;;8018:30;8084:27;8064:18;;;8057:55;8129:18;;31653:109:0::1;7804:349:1::0;31653:109:0::1;31773:9;31797:174;31804:20:::0;;::::1;31797:174;;;31841:15;31859:20;31874:4;31859:7;;31867:1;31859:10;;;;;;;:::i;:::-;;;;;;;:14;;:20;;;;:::i;:::-;31841:38;;31894:44;31904:10;31916:9;;31926:1;31916:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31930:7;31894:9;:44::i;:::-;31953:6;31958:1;31953:6:::0;::::1;:::i;:::-;;;31826:145;31797:174;;;31642:336;31523:455:::0;;;;:::o;1269:103::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;1334:30:::1;1361:1;1334:18;:30::i;:::-;1269:103::o:0;22893:121::-;1034:6;;22945:4;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;-1:-1:-1;22962:14:0::1;:22:::0;;-1:-1:-1;;22962:22:0::1;::::0;;;22893:121;:::o;23535:169::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23650:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;23650:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23535:169::o;23800:100::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;23871:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23871:21:0;;::::1;::::0;;;::::1;::::0;;23800:100::o;5056:104::-;5112:13;5145:7;5138:14;;;;;:::i;24600:306::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;24746:13:::1;-1:-1:-1::0;;;;;24738:21:0::1;:4;-1:-1:-1::0;;;;;24738:21:0::1;;;24716:128;;;::::0;-1:-1:-1;;;24716:128:0;;8492:2:1;24716:128:0::1;::::0;::::1;8474:21:1::0;8531:2;8511:18;;;8504:30;8570:34;8550:18;;;8543:62;8641:27;8621:18;;;8614:55;8686:19;;24716:128:0::1;8290:421:1::0;24716:128:0::1;24857:41;24886:4;24892:5;24857:28;:41::i;:::-;24600:306:::0;;:::o;32262:209::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;32355:31:::1;::::0;-1:-1:-1;;;32355:31:0;;32380:4:::1;32355:31;::::0;::::1;1942:51:1::0;32390:7:0;;-1:-1:-1;;;;;32355:16:0;::::1;::::0;::::1;::::0;1915:18:1;;32355:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;32347:69;;;::::0;-1:-1:-1;;;32347:69:0;;9107:2:1;32347:69:0::1;::::0;::::1;9089:21:1::0;9146:2;9126:18;;;9119:30;-1:-1:-1;;;9165:18:1;;;9158:44;9219:18;;32347:69:0::1;8905:338:1::0;32347:69:0::1;32427:36;::::0;-1:-1:-1;;;32427:36:0;;32443:10:::1;32427:36;::::0;::::1;9422:51:1::0;9489:18;;;9482:34;;;-1:-1:-1;;;;;32427:15:0;::::1;::::0;::::1;::::0;9395:18:1;;32427:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32262:209:::0;;:::o;7271:475::-;399:10;7389:4;7433:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7433:34:0;;;;;;;;;;7500:35;;;;7478:122;;;;-1:-1:-1;;;7478:122:0;;9979:2:1;7478:122:0;;;9961:21:1;10018:2;9998:18;;;9991:30;10057:34;10037:18;;;10030:62;-1:-1:-1;;;10108:18:1;;;10101:35;10153:19;;7478:122:0;9777:401:1;7478:122:0;7636:67;399:10;7659:7;7687:15;7668:16;:34;7636:8;:67::i;:::-;-1:-1:-1;7734:4:0;;7271:475;-1:-1:-1;;;7271:475:0:o;5648:200::-;5759:4;5776:42;399:10;5800:9;5811:6;5776:9;:42::i;25110:224::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;25263:15:::1;::::0;25220:59:::1;::::0;-1:-1:-1;;;;;25263:15:0;;::::1;::::0;25220:59;::::1;::::0;::::1;::::0;25263:15:::1;::::0;25220:59:::1;25290:15;:36:::0;;-1:-1:-1;;;;;;25290:36:0::1;-1:-1:-1::0;;;;;25290:36:0;;;::::1;::::0;;;::::1;::::0;;25110:224::o;24410:182::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24495:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;24495:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24550:34;;1465:41:1;;;24550:34:0::1;::::0;1438:18:1;24550:34:0::1;;;;;;;24410:182:::0;;:::o;23411:116::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;23500:19:::1;:6:::0;23510:8:::1;23500:19;:::i;:::-;23488:9;:31:::0;-1:-1:-1;23411:116:0:o;23084:187::-;1034:6;;23181:4;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;23219:22:::1;:9:::0;23232:8:::1;23219:22;:::i;:::-;23198:18;:43:::0;-1:-1:-1;23259:4:0::1;23084:187:::0;;;:::o;32024:183::-;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;32125:7:::1;32100:21;:32;;32092:59;;;::::0;-1:-1:-1;;;32092:59:0;;9107:2:1;32092:59:0::1;::::0;::::1;9089:21:1::0;9146:2;9126:18;;;9119:30;-1:-1:-1;;;9165:18:1;;;9158:44;9219:18;;32092:59:0::1;8905:338:1::0;32092:59:0::1;32162:37;::::0;32170:10:::1;::::0;32162:37;::::1;;;::::0;32191:7;;32162:37:::1;::::0;;;32191:7;32170:10;32162:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;1527:238:::0;1034:6;;-1:-1:-1;;;;;1034:6:0;399:10;1181:23;1173:68;;;;-1:-1:-1;;;1173:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1630:22:0;::::1;1608:110;;;::::0;-1:-1:-1;;;1608:110:0;;10385:2:1;1608:110:0::1;::::0;::::1;10367:21:1::0;10424:2;10404:18;;;10397:30;10463:34;10443:18;;;10436:62;-1:-1:-1;;;10514:18:1;;;10507:36;10560:19;;1608:110:0::1;10183:402:1::0;1608:110:0::1;1729:28;1748:8;1729:18;:28::i;:::-;1527:238:::0;:::o;12639:98::-;12697:7;12724:5;12728:1;12724;:5;:::i;:::-;12717:12;12639:98;-1:-1:-1;;;12639:98:0:o;9538:380::-;-1:-1:-1;;;;;9674:19:0;;9666:68;;;;-1:-1:-1;;;9666:68:0;;10792:2:1;9666:68:0;;;10774:21:1;10831:2;10811:18;;;10804:30;10870:34;10850:18;;;10843:62;-1:-1:-1;;;10921:18:1;;;10914:34;10965:19;;9666:68:0;10590:400:1;9666:68:0;-1:-1:-1;;;;;9753:21:0;;9745:68;;;;-1:-1:-1;;;9745:68:0;;11197:2:1;9745:68:0;;;11179:21:1;11236:2;11216:18;;;11209:30;11275:34;11255:18;;;11248:62;-1:-1:-1;;;11326:18:1;;;11319:32;11368:19;;9745:68:0;10995:398:1;9745:68:0;-1:-1:-1;;;;;9826:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9878:32;;2150:25:1;;;9878:32:0;;2123:18:1;9878:32:0;;;;;;;9538:380;;;:::o;25641:3760::-;-1:-1:-1;;;;;25773:18:0;;25765:68;;;;-1:-1:-1;;;25765:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25852:16:0;;25844:64;;;;-1:-1:-1;;;25844:64:0;;;;;;;:::i;:::-;25925:11;25921:93;;25953:28;25969:4;25975:2;25979:1;25953:15;:28::i;25921:93::-;26030:14;;;;26026:1692;;;1034:6;;-1:-1:-1;;;;;26083:15:0;;;1034:6;;26083:15;;;;:49;;-1:-1:-1;1034:6:0;;-1:-1:-1;;;;;26119:13:0;;;1034:6;;26119:13;;26083:49;:86;;;;-1:-1:-1;;;;;;26153:16:0;;;;26083:86;:128;;;;-1:-1:-1;;;;;;26190:21:0;;26204:6;26190:21;;26083:128;:158;;;;-1:-1:-1;26233:8:0;;-1:-1:-1;;;26233:8:0;;;;26232:9;26083:158;26061:1646;;;26281:13;;;;;;;26276:223;;-1:-1:-1;;;;;26353:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26382:23:0;;;;;;:19;:23;;;;;;;;26353:52;26319:160;;;;-1:-1:-1;;;26319:160:0;;12410:2:1;26319:160:0;;;12392:21:1;12449:2;12429:18;;;12422:30;-1:-1:-1;;;12468:18:1;;;12461:52;12530:18;;26319:160:0;12208:346:1;26319:160:0;-1:-1:-1;;;;;26571:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;26628:35:0;;;;;;:31;:35;;;;;;;;26627:36;26571:92;26545:1147;;;26750:20;;26740:6;:30;;26706:169;;;;-1:-1:-1;;;26706:169:0;;12761:2:1;26706:169:0;;;12743:21:1;12800:2;12780:18;;;12773:30;12839:34;12819:18;;;12812:62;-1:-1:-1;;;12890:18:1;;;12883:51;12951:19;;26706:169:0;12559:417:1;26706:169:0;26958:9;;-1:-1:-1;;;;;5614:18:0;;5587:7;5614:18;;;;;;;;;;;26932:22;;:6;:22;:::i;:::-;:35;;26898:140;;;;-1:-1:-1;;;26898:140:0;;13183:2:1;26898:140:0;;;13165:21:1;13222:2;13202:18;;;13195:30;-1:-1:-1;;;13241:18:1;;;13234:49;13300:18;;26898:140:0;12981:343:1;26898:140:0;26545:1147;;;-1:-1:-1;;;;;27136:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;27191:37:0;;;;;;:31;:37;;;;;;;;27190:38;27136:92;27110:582;;;27315:20;;27305:6;:30;;27271:170;;;;-1:-1:-1;;;27271:170:0;;13531:2:1;27271:170:0;;;13513:21:1;13570:2;13550:18;;;13543:30;13609:34;13589:18;;;13582:62;-1:-1:-1;;;13660:18:1;;;13653:52;13722:19;;27271:170:0;13329:418:1;27110:582:0;-1:-1:-1;;;;;27472:35:0;;;;;;:31;:35;;;;;;;;27467:225;;27592:9;;-1:-1:-1;;;;;5614:18:0;;5587:7;5614:18;;;;;;;;;;;27566:22;;:6;:22;:::i;:::-;:35;;27532:140;;;;-1:-1:-1;;;27532:140:0;;13183:2:1;27532:140:0;;;13165:21:1;13222:2;13202:18;;;13195:30;-1:-1:-1;;;13241:18:1;;;13234:49;13300:18;;27532:140:0;12981:343:1;27532:140:0;27779:4;27730:28;5614:18;;;;;;;;;;;27837;;27813:42;;;;;;;27886:35;;-1:-1:-1;27910:11:0;;;;;;;27886:35;:61;;;;-1:-1:-1;27939:8:0;;-1:-1:-1;;;27939:8:0;;;;27938:9;27886:61;:110;;;;-1:-1:-1;;;;;;27965:31:0;;;;;;:25;:31;;;;;;;;27964:32;27886:110;:153;;;;-1:-1:-1;;;;;;28014:25:0;;;;;;:19;:25;;;;;;;;28013:26;27886:153;:194;;;;-1:-1:-1;;;;;;28057:23:0;;;;;;:19;:23;;;;;;;;28056:24;27886:194;27868:326;;;28107:8;:15;;-1:-1:-1;;;;28107:15:0;-1:-1:-1;;;28107:15:0;;;28139:10;:8;:10::i;:::-;28166:8;:16;;-1:-1:-1;;;;28166:16:0;;;27868:326;28222:8;;-1:-1:-1;;;;;28332:25:0;;28206:12;28332:25;;;:19;:25;;;;;;28222:8;-1:-1:-1;;;28222:8:0;;;;;28221:9;;28332:25;;:52;;-1:-1:-1;;;;;;28361:23:0;;;;;;:19;:23;;;;;;;;28332:52;28328:100;;;-1:-1:-1;28411:5:0;28328:100;28440:12;28545:7;28541:807;;;-1:-1:-1;;;;;28597:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28646:1;28630:13;;:17;28597:50;28593:606;;;28675:34;28705:3;28675:25;28686:13;;28675:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;28668:41;;28778:13;;28758:16;;28751:4;:23;;;;:::i;:::-;28750:41;;;;:::i;:::-;28728:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28848:13:0;;28834:10;;28827:17;;:4;:17;:::i;:::-;28826:35;;;;:::i;:::-;28810:12;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;28593:606:0;;-1:-1:-1;28593:606:0;;-1:-1:-1;;;;;28923:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28973:1;28958:12;;:16;28923:51;28919:280;;;29002:33;29031:3;29002:24;29013:12;;29002:6;:10;;:24;;;;:::i;:33::-;28995:40;;29103:12;;29084:15;;29077:4;:22;;;;:::i;:::-;29076:39;;;;:::i;:::-;29054:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29171:12:0;;29158:9;;29151:16;;:4;:16;:::i;:::-;29150:33;;;;:::i;:::-;29134:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;28919:280:0;29219:8;;29215:91;;29248:42;29264:4;29278;29285;29248:15;:42::i;:::-;29322:14;29332:4;29322:14;;:::i;:::-;;;28541:807;29360:33;29376:4;29382:2;29386:6;29360:15;:33::i;:::-;25754:3647;;;;25641:3760;;;:::o;1925:191::-;2018:6;;;-1:-1:-1;;;;;2035:17:0;;;-1:-1:-1;;;;;;2035:17:0;;;;;;;2068:40;;2018:6;;;2035:17;2018:6;;2068:40;;1999:16;;2068:40;1988:128;1925:191;:::o;24914:188::-;-1:-1:-1;;;;;24997:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;24997:39:0;;;;;;;;;;25054:40;;24997:39;;:31;25054:40;;;24914:188;;:::o;7754:770::-;-1:-1:-1;;;;;7894:20:0;;7886:70;;;;-1:-1:-1;;;7886:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7975:23:0;;7967:71;;;;-1:-1:-1;;;7967:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8135:17:0;;8111:21;8135:17;;;;;;;;;;;8185:23;;;;8163:111;;;;-1:-1:-1;;;8163:111:0;;14306:2:1;8163:111:0;;;14288:21:1;14345:2;14325:18;;;14318:30;14384:34;14364:18;;;14357:62;-1:-1:-1;;;14435:18:1;;;14428:36;14481:19;;8163:111:0;14104:402:1;8163:111:0;-1:-1:-1;;;;;8310:17:0;;;:9;:17;;;;;;;;;;;8330:22;;;8310:42;;8374:20;;;;;;;;:30;;8346:6;;8310:9;8374:30;;8346:6;;8374:30;:::i;:::-;;;;;;;;8439:9;-1:-1:-1;;;;;8422:35:0;8431:6;-1:-1:-1;;;;;8422:35:0;;8450:6;8422:35;;;;2150:25:1;;2138:2;2123:18;;2004:177;8422:35:0;;;;;;;;7875:649;7754:770;;;:::o;30531:915::-;30614:4;30570:23;5614:18;;;;;;;;;;;30570:50;;30631:25;30680:12;;30659:18;;:33;;;;:::i;:::-;30631:61;-1:-1:-1;30703:12:0;30732:20;;;:46;;-1:-1:-1;30756:22:0;;30732:46;30728:85;;;30795:7;;;30531:915::o;30728:85::-;30847:18;;30829:15;:36;30825:105;;;30900:18;;30882:36;;30825:105;30971:15;30999:36;30971:15;30999:16;:36::i;:::-;31048:18;31069:21;31048:42;;31103:23;31129:81;31182:17;31129:34;31144:18;;31129:10;:14;;:34;;;;:::i;:81::-;31244:1;31223:18;:22;;;31256:12;:16;;;31307:15;;31299:57;;31103:107;;-1:-1:-1;;;;;;31307:15:0;;31103:107;;31299:57;31244:1;31299:57;31103:107;31307:15;31299:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31389:9:0;;31381:57;;31285:71;;-1:-1:-1;;;;;;31389:9:0;;31412:21;;31381:57;;;;31412:21;31389:9;31381:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;30531:915:0:o;12745:98::-;12803:7;12830:5;12834:1;12830;:5;:::i;29409:589::-;29559:16;;;29573:1;29559:16;;;;;;;;29535:21;;29559:16;;;;;;;;;;-1:-1:-1;29559:16:0;29535:40;;29604:4;29586;29591:1;29586:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29586:23:0;;;-1:-1:-1;;;;;29586:23:0;;;;;29630:15;-1:-1:-1;;;;;29630:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29620:4;29625:1;29620:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29620:32:0;;;-1:-1:-1;;;;;29620:32:0;;;;;29665:62;29682:4;29697:15;29715:11;29665:8;:62::i;:::-;29766:224;;-1:-1:-1;;;29766:224:0;;-1:-1:-1;;;;;29766:15:0;:66;;;;:224;;29847:11;;29873:1;;29917:4;;29944;;29964:15;;29766:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29464:534;29409:589;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:597::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;848:2:1;827:15;-1:-1:-1;;823:29:1;808:45;;;;855:2;804:54;;267:597;-1:-1:-1;;;267:597:1:o;869:131::-;-1:-1:-1;;;;;944:31:1;;934:42;;924:70;;990:1;987;980:12;1005:315;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:52;;;1150:1;1147;1140:12;1102:52;1189:9;1176:23;1208:31;1233:5;1208:31;:::i;:::-;1258:5;1310:2;1295:18;;;;1282:32;;-1:-1:-1;;;1005:315:1:o;1517:247::-;1576:6;1629:2;1617:9;1608:7;1604:23;1600:32;1597:52;;;1645:1;1642;1635:12;1597:52;1684:9;1671:23;1703:31;1728:5;1703:31;:::i;2186:180::-;2245:6;2298:2;2286:9;2277:7;2273:23;2269:32;2266:52;;;2314:1;2311;2304:12;2266:52;-1:-1:-1;2337:23:1;;2186:180;-1:-1:-1;2186:180:1:o;2371:456::-;2448:6;2456;2464;2517:2;2505:9;2496:7;2492:23;2488:32;2485:52;;;2533:1;2530;2523:12;2485:52;2572:9;2559:23;2591:31;2616:5;2591:31;:::i;:::-;2641:5;-1:-1:-1;2698:2:1;2683:18;;2670:32;2711:33;2670:32;2711:33;:::i;:::-;2371:456;;2763:7;;-1:-1:-1;;;2817:2:1;2802:18;;;;2789:32;;2371:456::o;3229:367::-;3292:8;3302:6;3356:3;3349:4;3341:6;3337:17;3333:27;3323:55;;3374:1;3371;3364:12;3323:55;-1:-1:-1;3397:20:1;;3440:18;3429:30;;3426:50;;;3472:1;3469;3462:12;3426:50;3509:4;3501:6;3497:17;3485:29;;3569:3;3562:4;3552:6;3549:1;3545:14;3537:6;3533:27;3529:38;3526:47;3523:67;;;3586:1;3583;3576:12;3523:67;3229:367;;;;;:::o;3601:773::-;3723:6;3731;3739;3747;3800:2;3788:9;3779:7;3775:23;3771:32;3768:52;;;3816:1;3813;3806:12;3768:52;3856:9;3843:23;3885:18;3926:2;3918:6;3915:14;3912:34;;;3942:1;3939;3932:12;3912:34;3981:70;4043:7;4034:6;4023:9;4019:22;3981:70;:::i;:::-;4070:8;;-1:-1:-1;3955:96:1;-1:-1:-1;4158:2:1;4143:18;;4130:32;;-1:-1:-1;4174:16:1;;;4171:36;;;4203:1;4200;4193:12;4171:36;;4242:72;4306:7;4295:8;4284:9;4280:24;4242:72;:::i;:::-;3601:773;;;;-1:-1:-1;4333:8:1;-1:-1:-1;;;;3601:773:1:o;4379:118::-;4465:5;4458:13;4451:21;4444:5;4441:32;4431:60;;4487:1;4484;4477:12;4502:382;4567:6;4575;4628:2;4616:9;4607:7;4603:23;4599:32;4596:52;;;4644:1;4641;4634:12;4596:52;4683:9;4670:23;4702:31;4727:5;4702:31;:::i;:::-;4752:5;-1:-1:-1;4809:2:1;4794:18;;4781:32;4822:30;4781:32;4822:30;:::i;:::-;4871:7;4861:17;;;4502:382;;;;;:::o;4889:241::-;4945:6;4998:2;4986:9;4977:7;4973:23;4969:32;4966:52;;;5014:1;5011;5004:12;4966:52;5053:9;5040:23;5072:28;5094:5;5072:28;:::i;5469:388::-;5537:6;5545;5598:2;5586:9;5577:7;5573:23;5569:32;5566:52;;;5614:1;5611;5604:12;5566:52;5653:9;5640:23;5672:31;5697:5;5672:31;:::i;:::-;5722:5;-1:-1:-1;5779:2:1;5764:18;;5751:32;5792:33;5751:32;5792:33;:::i;5862:356::-;6064:2;6046:21;;;6083:18;;;6076:30;6142:34;6137:2;6122:18;;6115:62;6209:2;6194:18;;5862:356::o;6572:127::-;6633:10;6628:3;6624:20;6621:1;6614:31;6664:4;6661:1;6654:15;6688:4;6685:1;6678:15;6704:128;6744:3;6775:1;6771:6;6768:1;6765:13;6762:39;;;6781:18;;:::i;:::-;-1:-1:-1;6817:9:1;;6704:128::o;6837:380::-;6916:1;6912:12;;;;6959;;;6980:61;;7034:4;7026:6;7022:17;7012:27;;6980:61;7087:2;7079:6;7076:14;7056:18;7053:38;7050:161;;;7133:10;7128:3;7124:20;7121:1;7114:31;7168:4;7165:1;7158:15;7196:4;7193:1;7186:15;7050:161;;6837:380;;;:::o;7222:168::-;7262:7;7328:1;7324;7320:6;7316:14;7313:1;7310:21;7305:1;7298:9;7291:17;7287:45;7284:71;;;7335:18;;:::i;:::-;-1:-1:-1;7375:9:1;;7222:168::o;8158:127::-;8219:10;8214:3;8210:20;8207:1;8200:31;8250:4;8247:1;8240:15;8274:4;8271:1;8264:15;8716:184;8786:6;8839:2;8827:9;8818:7;8814:23;8810:32;8807:52;;;8855:1;8852;8845:12;8807:52;-1:-1:-1;8878:16:1;;8716:184;-1:-1:-1;8716:184:1:o;9527:245::-;9594:6;9647:2;9635:9;9626:7;9622:23;9618:32;9615:52;;;9663:1;9660;9653:12;9615:52;9695:9;9689:16;9714:28;9736:5;9714:28;:::i;11398:401::-;11600:2;11582:21;;;11639:2;11619:18;;;11612:30;11678:34;11673:2;11658:18;;11651:62;-1:-1:-1;;;11744:2:1;11729:18;;11722:35;11789:3;11774:19;;11398:401::o;11804:399::-;12006:2;11988:21;;;12045:2;12025:18;;;12018:30;12084:34;12079:2;12064:18;;12057:62;-1:-1:-1;;;12150:2:1;12135:18;;12128:33;12193:3;12178:19;;11804:399::o;13752:217::-;13792:1;13818;13808:132;;13862:10;13857:3;13853:20;13850:1;13843:31;13897:4;13894:1;13887:15;13925:4;13922:1;13915:15;13808:132;-1:-1:-1;13954:9:1;;13752:217::o;13974:125::-;14014:4;14042:1;14039;14036:8;14033:34;;;14047:18;;:::i;:::-;-1:-1:-1;14084:9:1;;13974:125::o;14853:251::-;14923:6;14976:2;14964:9;14955:7;14951:23;14947:32;14944:52;;;14992:1;14989;14982:12;14944:52;15024:9;15018:16;15043:31;15068:5;15043:31;:::i;15109:980::-;15371:4;15419:3;15408:9;15404:19;15450:6;15439:9;15432:25;15476:2;15514:6;15509:2;15498:9;15494:18;15487:34;15557:3;15552:2;15541:9;15537:18;15530:31;15581:6;15616;15610:13;15647:6;15639;15632:22;15685:3;15674:9;15670:19;15663:26;;15724:2;15716:6;15712:15;15698:29;;15745:1;15755:195;15769:6;15766:1;15763:13;15755:195;;;15834:13;;-1:-1:-1;;;;;15830:39:1;15818:52;;15925:15;;;;15890:12;;;;15866:1;15784:9;15755:195;;;-1:-1:-1;;;;;;;16006:32:1;;;;16001:2;15986:18;;15979:60;-1:-1:-1;;;16070:3:1;16055:19;16048:35;15967:3;15109:980;-1:-1:-1;;;15109:980:1:o

Swarm Source

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