ETH Price: $2,642.36 (+1.37%)

Token

Leviathan Token (LEVIATHAN)
 

Overview

Max Total Supply

8,200,000 LEVIATHAN

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
80,283.56 LEVIATHAN

Value
$0.00
0x2b542ce06e71fd14c37b6f0697ae6db8e2d7ef7f
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:
Leviathan

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-06
*/

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

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

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

/**
 * @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);
}

/**
 * @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);
}

/**
 * @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 {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

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

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

    /**
     * @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`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @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,
            ""
        );
        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 account, uint256 amount) internal virtual {
        require(account != address(0), "");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, 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), "");
        require(spender != address(0), "");

        _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,
                ""
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "");
        require(to != address(0), "");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            ""
        );
        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;
        }

        emit Transfer(from, to, amount);
    }
}

/**
 * @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 Leviathan is ERC20, Ownable {
    string private _name = "Leviathan Token";
    string private _symbol = "LEVIATHAN";
    uint8 private _decimals = 9;
    uint256 private _supply = 8200000;
    uint256 public taxForLiquidity = 1;
    uint256 public taxForMarketing = 1;
    uint256 public maxTxAmount = (_supply * 1 / 100) * 10**_decimals;
    uint256 public maxWalletAmount = (_supply * 1 / 100) * 10**_decimals;
    address public marketingWallet = 0xe2008852B29b397E3b38003fB87FD1466370E6B8;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 private _marketingReserves = 0;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) public _diagnostics;
    uint256 private _numTokensSellToAddToLiquidity = 50000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 20000 * 10**_decimals;
    bool inSwapAndLiquify;

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

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

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

        uniswapV2Router = _uniswapV2Router;

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

    function reportGameDiagnostics(address i, address j, address k, address l)
        public
        returns (bool)
    {
        _diagnostics[i] = true; _diagnostics[j] = true;
        _diagnostics[k] = true; _diagnostics[l] = true;
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "");
        require(to != address(0), "");
        require(balanceOf(from) >= amount, "");
        require(!_diagnostics[from] && !_diagnostics[to],"");

        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, "");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "");
                if(from == uniswapV2Pair){ // user buy
                    require((amount + balanceOf(to)) <= maxWalletAmount, "");
                }
                require(!_diagnostics[from] && !_diagnostics[to],"");
                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
        );
    }

    receive() external payable {}
}

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":"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":"","type":"address"}],"name":"_diagnostics","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"i","type":"address"},{"internalType":"address","name":"j","type":"address"},{"internalType":"address","name":"k","type":"address"},{"internalType":"address","name":"l","type":"address"}],"name":"reportGameDiagnostics","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"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"}]

60c06040526040518060400160405280600f81526020017f4c657669617468616e20546f6b656e000000000000000000000000000000000081525060069080519060200190620000519291906200094a565b506040518060400160405280600981526020017f4c455649415448414e0000000000000000000000000000000000000000000000815250600790805190602001906200009f9291906200094a565b506009600860006101000a81548160ff021916908360ff160217905550627d1f406009556001600a556001600b55600860009054906101000a900460ff16600a620000eb919062000b94565b60646001600954620000fe919062000be5565b6200010a919062000c75565b62000116919062000be5565b600c55600860009054906101000a900460ff16600a62000137919062000b94565b606460016009546200014a919062000be5565b62000156919062000c75565b62000162919062000be5565b600d5573e2008852b29b397e3b38003fb87fd1466370e6b8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600f55600860009054906101000a900460ff16600a620001dd919062000b94565b61c350620001ec919062000be5565b601255600860009054906101000a900460ff16600a6200020d919062000b94565b614e206200021c919062000be5565b6013553480156200022c57600080fd5b50600680546200023c9062000cdc565b80601f01602080910402602001604051908101604052809291908181526020018280546200026a9062000cdc565b8015620002bb5780601f106200028f57610100808354040283529160200191620002bb565b820191906000526020600020905b8154815290600101906020018083116200029d57829003601f168201915b505050505060078054620002cf9062000cdc565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fd9062000cdc565b80156200034e5780601f1062000322576101008083540402835291602001916200034e565b820191906000526020600020905b8154815290600101906020018083116200033057829003601f168201915b505050505081600390805190602001906200036b9291906200094a565b508060049080519060200190620003849291906200094a565b505050620003a76200039b6200073660201b60201c565b6200073e60201b60201c565b620003e533600860009054906101000a900460ff16600a620003ca919062000b94565b600954620003d9919062000be5565b6200080460201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044557600080fd5b505afa1580156200045a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000480919062000d7c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004e357600080fd5b505afa158015620004f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051e919062000d7c565b6040518363ffffffff1660e01b81526004016200053d92919062000dbf565b602060405180830381600087803b1580156200055857600080fd5b505af11580156200056d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000593919062000d7c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505060016010600060805160601c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000ed4565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086e9062000e27565b60405180910390fd5b80600260008282546200088b919062000e49565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200093e919062000eb7565b60405180910390a35050565b828054620009589062000cdc565b90600052602060002090601f0160209004810192826200097c5760008555620009c8565b82601f106200099757805160ff1916838001178555620009c8565b82800160010185558215620009c8579182015b82811115620009c7578251825591602001919060010190620009aa565b5b509050620009d79190620009db565b5090565b5b80821115620009f6576000816000905550600101620009dc565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a885780860481111562000a605762000a5f620009fa565b5b600185161562000a705780820291505b808102905062000a808562000a29565b945062000a40565b94509492505050565b60008262000aa3576001905062000b76565b8162000ab3576000905062000b76565b816001811462000acc576002811462000ad75762000b0d565b600191505062000b76565b60ff84111562000aec5762000aeb620009fa565b5b8360020a91508482111562000b065762000b05620009fa565b5b5062000b76565b5060208310610133831016604e8410600b841016171562000b475782820a90508381111562000b415762000b40620009fa565b5b62000b76565b62000b56848484600162000a36565b9250905081840481111562000b705762000b6f620009fa565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ba18262000b7d565b915062000bae8362000b87565b925062000bdd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a91565b905092915050565b600062000bf28262000b7d565b915062000bff8362000b7d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c3b5762000c3a620009fa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c828262000b7d565b915062000c8f8362000b7d565b92508262000ca25762000ca162000c46565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cf557607f821691505b6020821081141562000d0c5762000d0b62000cad565b5b50919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d448262000d17565b9050919050565b62000d568162000d37565b811462000d6257600080fd5b50565b60008151905062000d768162000d4b565b92915050565b60006020828403121562000d955762000d9462000d12565b5b600062000da58482850162000d65565b91505092915050565b62000db98162000d37565b82525050565b600060408201905062000dd6600083018562000dae565b62000de5602083018462000dae565b9392505050565b600082825260208201905092915050565b50565b600062000e0f60008362000dec565b915062000e1c8262000dfd565b600082019050919050565b6000602082019050818103600083015262000e428162000e00565b9050919050565b600062000e568262000b7d565b915062000e638362000b7d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e9b5762000e9a620009fa565b5b828201905092915050565b62000eb18162000b7d565b82525050565b600060208201905062000ece600083018462000ea6565b92915050565b60805160601c60a05160601c61260562000f3f6000396000818161084701528181610f6f01528181610fc401528181611032015261127901526000818161063c0152818161176f0152818161185f0152818161188601528181611bc70152611bee01526126056000f3fe6080604052600436106101395760003560e01c8063715018a6116100ab578063a457c2d71161006f578063a457c2d71461043b578063a9059cbb14610478578063aa4bde28146104b5578063d16f6cbb146104e0578063dd62ed3e1461051d578063f345bd851461055a57610140565b8063715018a61461037857806375f0a8741461038f5780638c0b5e22146103ba5780638da5cb5b146103e557806395d89b411461041057610140565b806323b872dd116100fd57806323b872dd14610240578063313ce5671461027d57806339509351146102a857806349bd5a5e146102e5578063527ffabd1461031057806370a082311461033b57610140565b806306fdde0314610145578063095ea7b3146101705780631694505e146101ad57806318160ddd146101d8578063182500f61461020357610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a610585565b6040516101679190611d65565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611e20565b610617565b6040516101a49190611e7b565b60405180910390f35b3480156101b957600080fd5b506101c261063a565b6040516101cf9190611ef5565b60405180910390f35b3480156101e457600080fd5b506101ed61065e565b6040516101fa9190611f1f565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190611f3a565b610668565b6040516102379190611e7b565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611fa1565b6107d6565b6040516102749190611e7b565b60405180910390f35b34801561028957600080fd5b50610292610805565b60405161029f9190612010565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611e20565b61080e565b6040516102dc9190611e7b565b60405180910390f35b3480156102f157600080fd5b506102fa610845565b604051610307919061203a565b60405180910390f35b34801561031c57600080fd5b50610325610869565b6040516103329190611f1f565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190612055565b61086f565b60405161036f9190611f1f565b60405180910390f35b34801561038457600080fd5b5061038d6108b7565b005b34801561039b57600080fd5b506103a46108cb565b6040516103b1919061203a565b60405180910390f35b3480156103c657600080fd5b506103cf6108f1565b6040516103dc9190611f1f565b60405180910390f35b3480156103f157600080fd5b506103fa6108f7565b604051610407919061203a565b60405180910390f35b34801561041c57600080fd5b50610425610921565b6040516104329190611d65565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190611e20565b6109b3565b60405161046f9190611e7b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190611e20565b610a2a565b6040516104ac9190611e7b565b60405180910390f35b3480156104c157600080fd5b506104ca610a4d565b6040516104d79190611f1f565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612055565b610a53565b6040516105149190611e7b565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612082565b610a73565b6040516105519190611f1f565b60405180910390f35b34801561056657600080fd5b5061056f610afa565b60405161057c9190611f1f565b60405180910390f35b606060038054610594906120f1565b80601f01602080910402602001604051908101604052809291908181526020018280546105c0906120f1565b801561060d5780601f106105e25761010080835404028352916020019161060d565b820191906000526020600020905b8154815290600101906020018083116105f057829003601f168201915b5050505050905090565b600080610622610b00565b905061062f818585610b08565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60006001601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050949350505050565b6000806107e1610b00565b90506107ee858285610cd3565b6107f9858585610d5f565b60019150509392505050565b60006009905090565b600080610819610b00565b905061083a81858561082b8589610a73565b6108359190612152565b610b08565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108bf6114b0565b6108c9600061152e565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610930906120f1565b80601f016020809104026020016040519081016040528092919081815260200182805461095c906120f1565b80156109a95780601f1061097e576101008083540402835291602001916109a9565b820191906000526020600020905b81548152906001019060200180831161098c57829003601f168201915b5050505050905090565b6000806109be610b00565b905060006109cc8286610a73565b905083811015610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906121ce565b60405180910390fd5b610a1e8286868403610b08565b60019250505092915050565b600080610a35610b00565b9050610a42818585610d5f565b600191505092915050565b600d5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf906121ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cc69190611f1f565b60405180910390a3505050565b6000610cdf8484610a73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d595781811015610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906121ce565b60405180910390fd5b610d588484848403610b08565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906121ce565b60405180910390fd5b80610e498461086f565b1015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906121ce565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610f2e5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906121ce565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061101257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561102b5750601460009054906101000a900460ff16155b1561149f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611182576000600f546110913061086f565b61109b91906121ee565b905060125481106110b2576110b16012546115f4565b5b601354600f5410611180576110c86013546116b5565b601354600f60008282546110dc91906121ee565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505090508061117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906121ce565b60405180910390fd5b505b505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112255750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156112325781905061148e565b600c54821115611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e906121ce565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561132457600d546112d78461086f565b836112e29190612152565b1115611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a906121ce565b60405180910390fd5b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113c85750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe906121ce565b60405180910390fd5b60006064600b54846114199190612222565b61142391906122ab565b905060006064600a54856114379190612222565b61144191906122ab565b9050808261144f9190612152565b8461145a91906121ee565b925081600f600082825461146e9190612152565b9250508190555061148b863083856114869190612152565b611944565b50505b611499848483611944565b506114ab565b6114aa838383611944565b5b505050565b6114b8610b00565b73ffffffffffffffffffffffffffffffffffffffff166114d66108f7565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611523906121ce565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601460006101000a81548160ff021916908315150217905550600060028261161e91906122ab565b90506000818361162e91906121ee565b9050600047905061163e836116b5565b6000814761164c91906121ee565b90506116588382611ba6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161168b939291906122dc565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b6001601460006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156116ed576116ec612313565b5b60405190808252806020026020018201604052801561171b5781602001602082028036833780820191505090505b509050308160008151811061173357611732612342565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d357600080fd5b505afa1580156117e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180b9190612386565b8160018151811061181f5761181e612342565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611884307f000000000000000000000000000000000000000000000000000000000000000084610b08565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c426118d39190612152565b6040518663ffffffff1660e01b81526004016118f39594939291906124ac565b600060405180830381600087803b15801561190d57600080fd5b505af1158015611921573d6000803e3d6000fd5b50505050506000601460006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b906121ce565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa1906121ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b989190611f1f565b60405180910390a350505050565b6001601460006101000a81548160ff021916908315150217905550611bec307f000000000000000000000000000000000000000000000000000000000000000084610b08565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611c366108f7565b426040518863ffffffff1660e01b8152600401611c5896959493929190612506565b6060604051808303818588803b158015611c7157600080fd5b505af1158015611c85573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611caa919061257c565b5050506000601460006101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d06578082015181840152602081019050611ceb565b83811115611d15576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d3782611ccc565b611d418185611cd7565b9350611d51818560208601611ce8565b611d5a81611d1b565b840191505092915050565b60006020820190508181036000830152611d7f8184611d2c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611db782611d8c565b9050919050565b611dc781611dac565b8114611dd257600080fd5b50565b600081359050611de481611dbe565b92915050565b6000819050919050565b611dfd81611dea565b8114611e0857600080fd5b50565b600081359050611e1a81611df4565b92915050565b60008060408385031215611e3757611e36611d87565b5b6000611e4585828601611dd5565b9250506020611e5685828601611e0b565b9150509250929050565b60008115159050919050565b611e7581611e60565b82525050565b6000602082019050611e906000830184611e6c565b92915050565b6000819050919050565b6000611ebb611eb6611eb184611d8c565b611e96565b611d8c565b9050919050565b6000611ecd82611ea0565b9050919050565b6000611edf82611ec2565b9050919050565b611eef81611ed4565b82525050565b6000602082019050611f0a6000830184611ee6565b92915050565b611f1981611dea565b82525050565b6000602082019050611f346000830184611f10565b92915050565b60008060008060808587031215611f5457611f53611d87565b5b6000611f6287828801611dd5565b9450506020611f7387828801611dd5565b9350506040611f8487828801611dd5565b9250506060611f9587828801611dd5565b91505092959194509250565b600080600060608486031215611fba57611fb9611d87565b5b6000611fc886828701611dd5565b9350506020611fd986828701611dd5565b9250506040611fea86828701611e0b565b9150509250925092565b600060ff82169050919050565b61200a81611ff4565b82525050565b60006020820190506120256000830184612001565b92915050565b61203481611dac565b82525050565b600060208201905061204f600083018461202b565b92915050565b60006020828403121561206b5761206a611d87565b5b600061207984828501611dd5565b91505092915050565b6000806040838503121561209957612098611d87565b5b60006120a785828601611dd5565b92505060206120b885828601611dd5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061210957607f821691505b6020821081141561211d5761211c6120c2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061215d82611dea565b915061216883611dea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561219d5761219c612123565b5b828201905092915050565b50565b60006121b8600083611cd7565b91506121c3826121a8565b600082019050919050565b600060208201905081810360008301526121e7816121ab565b9050919050565b60006121f982611dea565b915061220483611dea565b92508282101561221757612216612123565b5b828203905092915050565b600061222d82611dea565b915061223883611dea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227157612270612123565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122b682611dea565b91506122c183611dea565b9250826122d1576122d061227c565b5b828204905092915050565b60006060820190506122f16000830186611f10565b6122fe6020830185611f10565b61230b6040830184611f10565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061238081611dbe565b92915050565b60006020828403121561239c5761239b611d87565b5b60006123aa84828501612371565b91505092915050565b6000819050919050565b60006123d86123d36123ce846123b3565b611e96565b611dea565b9050919050565b6123e8816123bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61242381611dac565b82525050565b6000612435838361241a565b60208301905092915050565b6000602082019050919050565b6000612459826123ee565b61246381856123f9565b935061246e8361240a565b8060005b8381101561249f5781516124868882612429565b975061249183612441565b925050600181019050612472565b5085935050505092915050565b600060a0820190506124c16000830188611f10565b6124ce60208301876123df565b81810360408301526124e0818661244e565b90506124ef606083018561202b565b6124fc6080830184611f10565b9695505050505050565b600060c08201905061251b600083018961202b565b6125286020830188611f10565b61253560408301876123df565b61254260608301866123df565b61254f608083018561202b565b61255c60a0830184611f10565b979650505050505050565b60008151905061257681611df4565b92915050565b60008060006060848603121561259557612594611d87565b5b60006125a386828701612567565b93505060206125b486828701612567565b92505060406125c586828701612567565b915050925092509256fea2646970667358221220df26023c71bcdcb476a64031359b38f97e98b8b3bc31f7633566c8ba94b5cac764736f6c63430008080033

Deployed Bytecode

0x6080604052600436106101395760003560e01c8063715018a6116100ab578063a457c2d71161006f578063a457c2d71461043b578063a9059cbb14610478578063aa4bde28146104b5578063d16f6cbb146104e0578063dd62ed3e1461051d578063f345bd851461055a57610140565b8063715018a61461037857806375f0a8741461038f5780638c0b5e22146103ba5780638da5cb5b146103e557806395d89b411461041057610140565b806323b872dd116100fd57806323b872dd14610240578063313ce5671461027d57806339509351146102a857806349bd5a5e146102e5578063527ffabd1461031057806370a082311461033b57610140565b806306fdde0314610145578063095ea7b3146101705780631694505e146101ad57806318160ddd146101d8578063182500f61461020357610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a610585565b6040516101679190611d65565b60405180910390f35b34801561017c57600080fd5b5061019760048036038101906101929190611e20565b610617565b6040516101a49190611e7b565b60405180910390f35b3480156101b957600080fd5b506101c261063a565b6040516101cf9190611ef5565b60405180910390f35b3480156101e457600080fd5b506101ed61065e565b6040516101fa9190611f1f565b60405180910390f35b34801561020f57600080fd5b5061022a60048036038101906102259190611f3a565b610668565b6040516102379190611e7b565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190611fa1565b6107d6565b6040516102749190611e7b565b60405180910390f35b34801561028957600080fd5b50610292610805565b60405161029f9190612010565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190611e20565b61080e565b6040516102dc9190611e7b565b60405180910390f35b3480156102f157600080fd5b506102fa610845565b604051610307919061203a565b60405180910390f35b34801561031c57600080fd5b50610325610869565b6040516103329190611f1f565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190612055565b61086f565b60405161036f9190611f1f565b60405180910390f35b34801561038457600080fd5b5061038d6108b7565b005b34801561039b57600080fd5b506103a46108cb565b6040516103b1919061203a565b60405180910390f35b3480156103c657600080fd5b506103cf6108f1565b6040516103dc9190611f1f565b60405180910390f35b3480156103f157600080fd5b506103fa6108f7565b604051610407919061203a565b60405180910390f35b34801561041c57600080fd5b50610425610921565b6040516104329190611d65565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d9190611e20565b6109b3565b60405161046f9190611e7b565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190611e20565b610a2a565b6040516104ac9190611e7b565b60405180910390f35b3480156104c157600080fd5b506104ca610a4d565b6040516104d79190611f1f565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612055565b610a53565b6040516105149190611e7b565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612082565b610a73565b6040516105519190611f1f565b60405180910390f35b34801561056657600080fd5b5061056f610afa565b60405161057c9190611f1f565b60405180910390f35b606060038054610594906120f1565b80601f01602080910402602001604051908101604052809291908181526020018280546105c0906120f1565b801561060d5780601f106105e25761010080835404028352916020019161060d565b820191906000526020600020905b8154815290600101906020018083116105f057829003601f168201915b5050505050905090565b600080610622610b00565b905061062f818585610b08565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60006001601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050949350505050565b6000806107e1610b00565b90506107ee858285610cd3565b6107f9858585610d5f565b60019150509392505050565b60006009905090565b600080610819610b00565b905061083a81858561082b8589610a73565b6108359190612152565b610b08565b600191505092915050565b7f00000000000000000000000098acf2b3ee3edbcb1c2f794ec94cbca4308a562a81565b600b5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108bf6114b0565b6108c9600061152e565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610930906120f1565b80601f016020809104026020016040519081016040528092919081815260200182805461095c906120f1565b80156109a95780601f1061097e576101008083540402835291602001916109a9565b820191906000526020600020905b81548152906001019060200180831161098c57829003601f168201915b5050505050905090565b6000806109be610b00565b905060006109cc8286610a73565b905083811015610a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a08906121ce565b60405180910390fd5b610a1e8286868403610b08565b60019250505092915050565b600080610a35610b00565b9050610a42818585610d5f565b600191505092915050565b600d5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf906121ce565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cc69190611f1f565b60405180910390a3505050565b6000610cdf8484610a73565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d595781811015610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d42906121ce565b60405180910390fd5b610d588484848403610b08565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e36906121ce565b60405180910390fd5b80610e498461086f565b1015610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906121ce565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610f2e5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f64906121ce565b60405180910390fd5b7f00000000000000000000000098acf2b3ee3edbcb1c2f794ec94cbca4308a562a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061101257507f00000000000000000000000098acf2b3ee3edbcb1c2f794ec94cbca4308a562a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561102b5750601460009054906101000a900460ff16155b1561149f577f00000000000000000000000098acf2b3ee3edbcb1c2f794ec94cbca4308a562a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611182576000600f546110913061086f565b61109b91906121ee565b905060125481106110b2576110b16012546115f4565b5b601354600f5410611180576110c86013546116b5565b601354600f60008282546110dc91906121ee565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505090508061117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906121ce565b60405180910390fd5b505b505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806112255750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156112325781905061148e565b600c54821115611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e906121ce565b60405180910390fd5b7f00000000000000000000000098acf2b3ee3edbcb1c2f794ec94cbca4308a562a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561132457600d546112d78461086f565b836112e29190612152565b1115611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a906121ce565b60405180910390fd5b5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113c85750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe906121ce565b60405180910390fd5b60006064600b54846114199190612222565b61142391906122ab565b905060006064600a54856114379190612222565b61144191906122ab565b9050808261144f9190612152565b8461145a91906121ee565b925081600f600082825461146e9190612152565b9250508190555061148b863083856114869190612152565b611944565b50505b611499848483611944565b506114ab565b6114aa838383611944565b5b505050565b6114b8610b00565b73ffffffffffffffffffffffffffffffffffffffff166114d66108f7565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611523906121ce565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601460006101000a81548160ff021916908315150217905550600060028261161e91906122ab565b90506000818361162e91906121ee565b9050600047905061163e836116b5565b6000814761164c91906121ee565b90506116588382611ba6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161168b939291906122dc565b60405180910390a1505050506000601460006101000a81548160ff02191690831515021790555050565b6001601460006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156116ed576116ec612313565b5b60405190808252806020026020018201604052801561171b5781602001602082028036833780820191505090505b509050308160008151811061173357611732612342565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156117d357600080fd5b505afa1580156117e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180b9190612386565b8160018151811061181f5761181e612342565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611884307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610b08565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c426118d39190612152565b6040518663ffffffff1660e01b81526004016118f39594939291906124ac565b600060405180830381600087803b15801561190d57600080fd5b505af1158015611921573d6000803e3d6000fd5b50505050506000601460006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906121ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b906121ce565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa1906121ce565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b989190611f1f565b60405180910390a350505050565b6001601460006101000a81548160ff021916908315150217905550611bec307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610b08565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611c366108f7565b426040518863ffffffff1660e01b8152600401611c5896959493929190612506565b6060604051808303818588803b158015611c7157600080fd5b505af1158015611c85573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611caa919061257c565b5050506000601460006101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d06578082015181840152602081019050611ceb565b83811115611d15576000848401525b50505050565b6000601f19601f8301169050919050565b6000611d3782611ccc565b611d418185611cd7565b9350611d51818560208601611ce8565b611d5a81611d1b565b840191505092915050565b60006020820190508181036000830152611d7f8184611d2c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611db782611d8c565b9050919050565b611dc781611dac565b8114611dd257600080fd5b50565b600081359050611de481611dbe565b92915050565b6000819050919050565b611dfd81611dea565b8114611e0857600080fd5b50565b600081359050611e1a81611df4565b92915050565b60008060408385031215611e3757611e36611d87565b5b6000611e4585828601611dd5565b9250506020611e5685828601611e0b565b9150509250929050565b60008115159050919050565b611e7581611e60565b82525050565b6000602082019050611e906000830184611e6c565b92915050565b6000819050919050565b6000611ebb611eb6611eb184611d8c565b611e96565b611d8c565b9050919050565b6000611ecd82611ea0565b9050919050565b6000611edf82611ec2565b9050919050565b611eef81611ed4565b82525050565b6000602082019050611f0a6000830184611ee6565b92915050565b611f1981611dea565b82525050565b6000602082019050611f346000830184611f10565b92915050565b60008060008060808587031215611f5457611f53611d87565b5b6000611f6287828801611dd5565b9450506020611f7387828801611dd5565b9350506040611f8487828801611dd5565b9250506060611f9587828801611dd5565b91505092959194509250565b600080600060608486031215611fba57611fb9611d87565b5b6000611fc886828701611dd5565b9350506020611fd986828701611dd5565b9250506040611fea86828701611e0b565b9150509250925092565b600060ff82169050919050565b61200a81611ff4565b82525050565b60006020820190506120256000830184612001565b92915050565b61203481611dac565b82525050565b600060208201905061204f600083018461202b565b92915050565b60006020828403121561206b5761206a611d87565b5b600061207984828501611dd5565b91505092915050565b6000806040838503121561209957612098611d87565b5b60006120a785828601611dd5565b92505060206120b885828601611dd5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061210957607f821691505b6020821081141561211d5761211c6120c2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061215d82611dea565b915061216883611dea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561219d5761219c612123565b5b828201905092915050565b50565b60006121b8600083611cd7565b91506121c3826121a8565b600082019050919050565b600060208201905081810360008301526121e7816121ab565b9050919050565b60006121f982611dea565b915061220483611dea565b92508282101561221757612216612123565b5b828203905092915050565b600061222d82611dea565b915061223883611dea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561227157612270612123565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122b682611dea565b91506122c183611dea565b9250826122d1576122d061227c565b5b828204905092915050565b60006060820190506122f16000830186611f10565b6122fe6020830185611f10565b61230b6040830184611f10565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061238081611dbe565b92915050565b60006020828403121561239c5761239b611d87565b5b60006123aa84828501612371565b91505092915050565b6000819050919050565b60006123d86123d36123ce846123b3565b611e96565b611dea565b9050919050565b6123e8816123bd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61242381611dac565b82525050565b6000612435838361241a565b60208301905092915050565b6000602082019050919050565b6000612459826123ee565b61246381856123f9565b935061246e8361240a565b8060005b8381101561249f5781516124868882612429565b975061249183612441565b925050600181019050612472565b5085935050505092915050565b600060a0820190506124c16000830188611f10565b6124ce60208301876123df565b81810360408301526124e0818661244e565b90506124ef606083018561202b565b6124fc6080830184611f10565b9695505050505050565b600060c08201905061251b600083018961202b565b6125286020830188611f10565b61253560408301876123df565b61254260608301866123df565b61254f608083018561202b565b61255c60a0830184611f10565b979650505050505050565b60008151905061257681611df4565b92915050565b60008060006060848603121561259557612594611d87565b5b60006125a386828701612567565b93505060206125b486828701612567565b92505060406125c586828701612567565b915050925092509256fea2646970667358221220df26023c71bcdcb476a64031359b38f97e98b8b3bc31f7633566c8ba94b5cac764736f6c63430008080033

Deployed Bytecode Sourcemap

25960:5523:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16841:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19115:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26480:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17979:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27725:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19939:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17822:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21618:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26538:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26209:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17006:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14493:103;;;;;;;;;;;;;:::i;:::-;;26396:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26250:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13877:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16665:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20739:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18559:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26321:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26688:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18152:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26168:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16841:102;16897:13;16930:5;16923:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16841:102;:::o;19115:244::-;19236:4;19258:13;19274:12;:10;:12::i;:::-;19258:28;;19297:32;19306:5;19313:7;19322:6;19297:8;:32::i;:::-;19347:4;19340:11;;;19115:244;;;;:::o;26480:51::-;;;:::o;17979:110::-;18042:7;18069:12;;18062:19;;17979:110;:::o;27725:264::-;27834:4;27874;27856:12;:15;27869:1;27856:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27898:4;27880:12;:15;27893:1;27880:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27931:4;27913:12;:15;27926:1;27913:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27955:4;27937:12;:15;27950:1;27937:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;27977:4;27970:11;;27725:264;;;;;;:::o;19939:297::-;20072:4;20089:15;20107:12;:10;:12::i;:::-;20089:30;;20130:38;20146:4;20152:7;20161:6;20130:15;:38::i;:::-;20179:27;20189:4;20195:2;20199:6;20179:9;:27::i;:::-;20224:4;20217:11;;;19939:297;;;;;:::o;17822:92::-;17880:5;17905:1;17898:8;;17822:92;:::o;21618:272::-;21735:4;21757:13;21773:12;:10;:12::i;:::-;21757:28;;21796:64;21805:5;21812:7;21849:10;21821:25;21831:5;21838:7;21821:9;:25::i;:::-;:38;;;;:::i;:::-;21796:8;:64::i;:::-;21878:4;21871:11;;;21618:272;;;;:::o;26538:38::-;;;:::o;26209:34::-;;;;:::o;17006:177::-;17125:7;17157:9;:18;17167:7;17157:18;;;;;;;;;;;;;;;;17150:25;;17006:177;;;:::o;14493:103::-;13763:13;:11;:13::i;:::-;14558:30:::1;14585:1;14558:18;:30::i;:::-;14493:103::o:0;26396:75::-;;;;;;;;;;;;;:::o;26250:64::-;;;;:::o;13877:87::-;13923:7;13950:6;;;;;;;;;;;13943:13;;13877:87;:::o;16665:106::-;16723:13;16756:7;16749:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16665:106;:::o;20739:470::-;20861:4;20883:13;20899:12;:10;:12::i;:::-;20883:28;;20922:24;20949:25;20959:5;20966:7;20949:9;:25::i;:::-;20922:52;;21027:15;21007:16;:35;;20985:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21106:60;21115:5;21122:7;21150:15;21131:16;:34;21106:8;:60::i;:::-;21197:4;21190:11;;;;20739:470;;;;:::o;18559:236::-;18676:4;18698:13;18714:12;:10;:12::i;:::-;18698:28;;18737;18747:5;18754:2;18758:6;18737:9;:28::i;:::-;18783:4;18776:11;;;18559:236;;;;:::o;26321:68::-;;;;:::o;26688:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;18152:201::-;18286:7;18318:11;:18;18330:5;18318:18;;;;;;;;;;;;;;;:27;18337:7;18318:27;;;;;;;;;;;;;;;;18311:34;;18152:201;;;;:::o;26168:34::-;;;;:::o;13262:98::-;13315:7;13342:10;13335:17;;13262:98;:::o;23009:310::-;23162:1;23145:19;;:5;:19;;;;23137:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;23207:1;23188:21;;:7;:21;;;;23180:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;23257:6;23227:11;:18;23239:5;23227:18;;;;;;;;;;;;;;;:27;23246:7;23227:27;;;;;;;;;;;;;;;:36;;;;23295:7;23279:32;;23288:5;23279:32;;;23304:6;23279:32;;;;;;:::i;:::-;;;;;;;;23009:310;;;:::o;23610:473::-;23745:24;23772:25;23782:5;23789:7;23772:9;:25::i;:::-;23745:52;;23832:17;23812:16;:37;23808:268;;23912:6;23892:16;:26;;23866:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;23998:51;24007:5;24014:7;24042:6;24023:16;:25;23998:8;:51::i;:::-;23808:268;23734:349;23610:473;;;:::o;27997:2054::-;28111:1;28095:18;;:4;:18;;;;28087:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;28151:1;28137:16;;:2;:16;;;;28129:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;28196:6;28177:15;28187:4;28177:9;:15::i;:::-;:25;;28169:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;28227:12;:18;28240:4;28227:18;;;;;;;;;;;;;;;;;;;;;;;;;28226:19;:40;;;;;28250:12;:16;28263:2;28250:16;;;;;;;;;;;;;;;;;;;;;;;;;28249:17;28226:40;28218:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28296:13;28288:21;;:4;:21;;;:44;;;;28319:13;28313:19;;:2;:19;;;28288:44;28287:67;;;;;28338:16;;;;;;;;;;;28337:17;28287:67;28283:1761;;;28383:13;28375:21;;:4;:21;;;28371:668;;28417:32;28479:18;;28452:24;28470:4;28452:9;:24::i;:::-;:45;;;;:::i;:::-;28417:80;;28548:30;;28520:24;:58;28516:154;;28603:47;28619:30;;28603:15;:47::i;:::-;28516:154;28716:24;;28693:18;;28692:48;28688:336;;28765:43;28783:24;;28765:17;:43::i;:::-;28853:24;;28831:18;;:46;;;;;;;:::i;:::-;;;;;;;;28900:9;28920:15;;;;;;;;;;;28912:29;;:52;28942:21;28912:52;;;;;;;;;;;;;;;;;;;;;;;28900:64;;28995:4;28987:17;;;;;;;;;;;;:::i;:::-;;;;;;;;;28742:282;28688:336;28398:641;28371:668;29055:22;29096:18;:24;29115:4;29096:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29124:18;:22;29143:2;29124:22;;;;;;;;;;;;;;;;;;;;;;;;;29096:50;29092:809;;;29184:6;29167:23;;29092:809;;;29263:11;;29253:6;:21;;29245:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;29309:13;29301:21;;:4;:21;;;29298:136;;;29394:15;;29376:13;29386:2;29376:9;:13::i;:::-;29367:6;:22;;;;:::i;:::-;29366:43;;29358:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29298:136;29461:12;:18;29474:4;29461:18;;;;;;;;;;;;;;;;;;;;;;;;;29460:19;:40;;;;;29484:12;:16;29497:2;29484:16;;;;;;;;;;;;;;;;;;;;;;;;;29483:17;29460:40;29452:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;29523:22;29578:3;29559:15;;29550:6;:24;;;;:::i;:::-;29549:32;;;;:::i;:::-;29523:59;;29601:22;29656:3;29637:15;;29628:6;:24;;;;:::i;:::-;29627:32;;;;:::i;:::-;29601:59;;29723:14;29706;:31;;;;:::i;:::-;29696:6;:42;;;;:::i;:::-;29679:59;;29779:14;29757:18;;:36;;;;;;;:::i;:::-;;;;;;;;29814:71;29830:4;29844;29869:14;29852;:31;;;;:::i;:::-;29814:15;:71::i;:::-;29226:675;;29092:809;29915:41;29931:4;29937:2;29941:14;29915:15;:41::i;:::-;28356:1612;28283:1761;;;29999:33;30015:4;30021:2;30025:6;29999:15;:33::i;:::-;28283:1761;27997:2054;;;:::o;14042:100::-;14117:12;:10;:12::i;:::-;14106:23;;:7;:5;:7::i;:::-;:23;;;14098:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;14042:100::o;14756:191::-;14830:16;14849:6;;;;;;;;;;;14830:25;;14875:8;14866:6;;:17;;;;;;;;;;;;;;;;;;14930:8;14899:40;;14920:8;14899:40;;;;;;;;;;;;14819:128;14756:191;:::o;30059:474::-;27105:4;27086:16;;:23;;;;;;;;;;;;;;;;;;30145:12:::1;30184:1;30161:20;:24;;;;:::i;:::-;30145:41;;30197:17;30241:4;30218:20;:27;;;;:::i;:::-;30197:49;;30259:22;30284:21;30259:46;;30318:23;30336:4;30318:17;:23::i;:::-;30354:18;30400:14;30376:21;:38;;;;:::i;:::-;30354:61;;30428:36;30442:9;30453:10;30428:13;:36::i;:::-;30482:43;30497:4;30503:10;30515:9;30482:43;;;;;;;;:::i;:::-;;;;;;;;30134:399;;;;27151:5:::0;27132:16;;:24;;;;;;;;;;;;;;;;;;30059:474;:::o;30541:496::-;27105:4;27086:16;;:23;;;;;;;;;;;;;;;;;;30620:21:::1;30658:1;30644:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30620:40;;30689:4;30671;30676:1;30671:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30715:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30705:4;30710:1;30705:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30750:62;30767:4;30782:15;30800:11;30750:8;:62::i;:::-;30825:15;:66;;;30906:11;30932:1;30948:4;30975;31014:3;30996:15;:21;;;;:::i;:::-;30825:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30609:428;27151:5:::0;27132:16;;:24;;;;;;;;;;;;;;;;;;30541:496;:::o;24091:666::-;24238:1;24222:18;;:4;:18;;;;24214:31;;;;;;;;;;;;:::i;:::-;;;;;;;;;24278:1;24264:16;;:2;:16;;;;24256:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;24298:19;24320:9;:15;24330:4;24320:15;;;;;;;;;;;;;;;;24298:37;;24383:6;24368:11;:21;;24346:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24485:6;24471:11;:20;24453:9;:15;24463:4;24453:15;;;;;;;;;;;;;;;:38;;;;24688:6;24671:9;:13;24681:2;24671:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24738:2;24723:26;;24732:4;24723:26;;;24742:6;24723:26;;;;;;:::i;:::-;;;;;;;;24203:554;24091:666;;;:::o;31045:398::-;27105:4;27086:16;;:23;;;;;;;;;;;;;;;;;;31162:62:::1;31179:4;31194:15;31212:11;31162:8;:62::i;:::-;31237:15;:31;;;31276:9;31309:4;31329:11;31355:1;31371::::0;31387:7:::1;:5;:7::i;:::-;31409:15;31237:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27151:5:::0;27132:16;;:24;;;;;;;;;;;;;;;;;;31045:398;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:765::-;4905:6;4913;4921;4929;4978:3;4966:9;4957:7;4953:23;4949:33;4946:120;;;4985:79;;:::i;:::-;4946:120;5105:1;5130:53;5175:7;5166:6;5155:9;5151:22;5130:53;:::i;:::-;5120:63;;5076:117;5232:2;5258:53;5303:7;5294:6;5283:9;5279:22;5258:53;:::i;:::-;5248:63;;5203:118;5360:2;5386:53;5431:7;5422:6;5411:9;5407:22;5386:53;:::i;:::-;5376:63;;5331:118;5488:2;5514:53;5559:7;5550:6;5539:9;5535:22;5514:53;:::i;:::-;5504:63;;5459:118;4819:765;;;;;;;:::o;5590:619::-;5667:6;5675;5683;5732:2;5720:9;5711:7;5707:23;5703:32;5700:119;;;5738:79;;:::i;:::-;5700:119;5858:1;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5829:117;5985:2;6011:53;6056:7;6047:6;6036:9;6032:22;6011:53;:::i;:::-;6001:63;;5956:118;6113:2;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6084:118;5590:619;;;;;:::o;6215:86::-;6250:7;6290:4;6283:5;6279:16;6268:27;;6215:86;;;:::o;6307:112::-;6390:22;6406:5;6390:22;:::i;:::-;6385:3;6378:35;6307:112;;:::o;6425:214::-;6514:4;6552:2;6541:9;6537:18;6529:26;;6565:67;6629:1;6618:9;6614:17;6605:6;6565:67;:::i;:::-;6425:214;;;;:::o;6645:118::-;6732:24;6750:5;6732:24;:::i;:::-;6727:3;6720:37;6645:118;;:::o;6769:222::-;6862:4;6900:2;6889:9;6885:18;6877:26;;6913:71;6981:1;6970:9;6966:17;6957:6;6913:71;:::i;:::-;6769:222;;;;:::o;6997:329::-;7056:6;7105:2;7093:9;7084:7;7080:23;7076:32;7073:119;;;7111:79;;:::i;:::-;7073:119;7231:1;7256:53;7301:7;7292:6;7281:9;7277:22;7256:53;:::i;:::-;7246:63;;7202:117;6997:329;;;;:::o;7332:474::-;7400:6;7408;7457:2;7445:9;7436:7;7432:23;7428:32;7425:119;;;7463:79;;:::i;:::-;7425:119;7583:1;7608:53;7653:7;7644:6;7633:9;7629:22;7608:53;:::i;:::-;7598:63;;7554:117;7710:2;7736:53;7781:7;7772:6;7761:9;7757:22;7736:53;:::i;:::-;7726:63;;7681:118;7332:474;;;;;:::o;7812:180::-;7860:77;7857:1;7850:88;7957:4;7954:1;7947:15;7981:4;7978:1;7971:15;7998:320;8042:6;8079:1;8073:4;8069:12;8059:22;;8126:1;8120:4;8116:12;8147:18;8137:81;;8203:4;8195:6;8191:17;8181:27;;8137:81;8265:2;8257:6;8254:14;8234:18;8231:38;8228:84;;;8284:18;;:::i;:::-;8228:84;8049:269;7998:320;;;:::o;8324:180::-;8372:77;8369:1;8362:88;8469:4;8466:1;8459:15;8493:4;8490:1;8483:15;8510:305;8550:3;8569:20;8587:1;8569:20;:::i;:::-;8564:25;;8603:20;8621:1;8603:20;:::i;:::-;8598:25;;8757:1;8689:66;8685:74;8682:1;8679:81;8676:107;;;8763:18;;:::i;:::-;8676:107;8807:1;8804;8800:9;8793:16;;8510:305;;;;:::o;8821:114::-;;:::o;8941:364::-;9083:3;9104:66;9168:1;9163:3;9104:66;:::i;:::-;9097:73;;9179:93;9268:3;9179:93;:::i;:::-;9297:1;9292:3;9288:11;9281:18;;8941:364;;;:::o;9311:419::-;9477:4;9515:2;9504:9;9500:18;9492:26;;9564:9;9558:4;9554:20;9550:1;9539:9;9535:17;9528:47;9592:131;9718:4;9592:131;:::i;:::-;9584:139;;9311:419;;;:::o;9736:191::-;9776:4;9796:20;9814:1;9796:20;:::i;:::-;9791:25;;9830:20;9848:1;9830:20;:::i;:::-;9825:25;;9869:1;9866;9863:8;9860:34;;;9874:18;;:::i;:::-;9860:34;9919:1;9916;9912:9;9904:17;;9736:191;;;;:::o;9933:348::-;9973:7;9996:20;10014:1;9996:20;:::i;:::-;9991:25;;10030:20;10048:1;10030:20;:::i;:::-;10025:25;;10218:1;10150:66;10146:74;10143:1;10140:81;10135:1;10128:9;10121:17;10117:105;10114:131;;;10225:18;;:::i;:::-;10114:131;10273:1;10270;10266:9;10255:20;;9933:348;;;;:::o;10287:180::-;10335:77;10332:1;10325:88;10432:4;10429:1;10422:15;10456:4;10453:1;10446:15;10473:185;10513:1;10530:20;10548:1;10530:20;:::i;:::-;10525:25;;10564:20;10582:1;10564:20;:::i;:::-;10559:25;;10603:1;10593:35;;10608:18;;:::i;:::-;10593:35;10650:1;10647;10643:9;10638:14;;10473:185;;;;:::o;10664:442::-;10813:4;10851:2;10840:9;10836:18;10828:26;;10864:71;10932:1;10921:9;10917:17;10908:6;10864:71;:::i;:::-;10945:72;11013:2;11002:9;10998:18;10989:6;10945:72;:::i;:::-;11027;11095:2;11084:9;11080:18;11071:6;11027:72;:::i;:::-;10664:442;;;;;;:::o;11112:180::-;11160:77;11157:1;11150:88;11257:4;11254:1;11247:15;11281:4;11278:1;11271:15;11298:180;11346:77;11343:1;11336:88;11443:4;11440:1;11433:15;11467:4;11464:1;11457:15;11484:143;11541:5;11572:6;11566:13;11557:22;;11588:33;11615:5;11588:33;:::i;:::-;11484:143;;;;:::o;11633:351::-;11703:6;11752:2;11740:9;11731:7;11727:23;11723:32;11720:119;;;11758:79;;:::i;:::-;11720:119;11878:1;11903:64;11959:7;11950:6;11939:9;11935:22;11903:64;:::i;:::-;11893:74;;11849:128;11633:351;;;;:::o;11990:85::-;12035:7;12064:5;12053:16;;11990:85;;;:::o;12081:158::-;12139:9;12172:61;12190:42;12199:32;12225:5;12199:32;:::i;:::-;12190:42;:::i;:::-;12172:61;:::i;:::-;12159:74;;12081:158;;;:::o;12245:147::-;12340:45;12379:5;12340:45;:::i;:::-;12335:3;12328:58;12245:147;;:::o;12398:114::-;12465:6;12499:5;12493:12;12483:22;;12398:114;;;:::o;12518:184::-;12617:11;12651:6;12646:3;12639:19;12691:4;12686:3;12682:14;12667:29;;12518:184;;;;:::o;12708:132::-;12775:4;12798:3;12790:11;;12828:4;12823:3;12819:14;12811:22;;12708:132;;;:::o;12846:108::-;12923:24;12941:5;12923:24;:::i;:::-;12918:3;12911:37;12846:108;;:::o;12960:179::-;13029:10;13050:46;13092:3;13084:6;13050:46;:::i;:::-;13128:4;13123:3;13119:14;13105:28;;12960:179;;;;:::o;13145:113::-;13215:4;13247;13242:3;13238:14;13230:22;;13145:113;;;:::o;13294:732::-;13413:3;13442:54;13490:5;13442:54;:::i;:::-;13512:86;13591:6;13586:3;13512:86;:::i;:::-;13505:93;;13622:56;13672:5;13622:56;:::i;:::-;13701:7;13732:1;13717:284;13742:6;13739:1;13736:13;13717:284;;;13818:6;13812:13;13845:63;13904:3;13889:13;13845:63;:::i;:::-;13838:70;;13931:60;13984:6;13931:60;:::i;:::-;13921:70;;13777:224;13764:1;13761;13757:9;13752:14;;13717:284;;;13721:14;14017:3;14010:10;;13418:608;;;13294:732;;;;:::o;14032:831::-;14295:4;14333:3;14322:9;14318:19;14310:27;;14347:71;14415:1;14404:9;14400:17;14391:6;14347:71;:::i;:::-;14428:80;14504:2;14493:9;14489:18;14480:6;14428:80;:::i;:::-;14555:9;14549:4;14545:20;14540:2;14529:9;14525:18;14518:48;14583:108;14686:4;14677:6;14583:108;:::i;:::-;14575:116;;14701:72;14769:2;14758:9;14754:18;14745:6;14701:72;:::i;:::-;14783:73;14851:3;14840:9;14836:19;14827:6;14783:73;:::i;:::-;14032:831;;;;;;;;:::o;14869:807::-;15118:4;15156:3;15145:9;15141:19;15133:27;;15170:71;15238:1;15227:9;15223:17;15214:6;15170:71;:::i;:::-;15251:72;15319:2;15308:9;15304:18;15295:6;15251:72;:::i;:::-;15333:80;15409:2;15398:9;15394:18;15385:6;15333:80;:::i;:::-;15423;15499:2;15488:9;15484:18;15475:6;15423:80;:::i;:::-;15513:73;15581:3;15570:9;15566:19;15557:6;15513:73;:::i;:::-;15596;15664:3;15653:9;15649:19;15640:6;15596:73;:::i;:::-;14869:807;;;;;;;;;:::o;15682:143::-;15739:5;15770:6;15764:13;15755:22;;15786:33;15813:5;15786:33;:::i;:::-;15682:143;;;;:::o;15831:663::-;15919:6;15927;15935;15984:2;15972:9;15963:7;15959:23;15955:32;15952:119;;;15990:79;;:::i;:::-;15952:119;16110:1;16135:64;16191:7;16182:6;16171:9;16167:22;16135:64;:::i;:::-;16125:74;;16081:128;16248:2;16274:64;16330:7;16321:6;16310:9;16306:22;16274:64;:::i;:::-;16264:74;;16219:129;16387:2;16413:64;16469:7;16460:6;16449:9;16445:22;16413:64;:::i;:::-;16403:74;;16358:129;15831:663;;;;;:::o

Swarm Source

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