ETH Price: $2,911.54 (+3.27%)
 

Overview

Max Total Supply

1,000,000,000 NEX

Holders

47

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,214,516.300039532872202582 NEX

Value
$0.00
0xF8B1c94cc0B0524E1cF5Ea6493DA238342Cd2705
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:
NexAI

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-19
*/

/*

Website: https://nexai.trade
Telegram: https://t.me/nexaitrade
Bot: https://t.me/NexAIWhisperBot
X: https://x.com/nexaitrade

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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 OracleChainPrice {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @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)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * 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)
        public
        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
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        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)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /** @dev 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), "ERC20: mint to the zero address");

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

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

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}

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

    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniswapV2Pair;

    bool private _swappingBack;

    uint256 private startTradingTime;

    address private devWallet;
    address private marketingWallet;
    
    uint256 public _maxWallet;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxTransactionAmount;
    
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    bool public isAMMEnabled = false;

    uint256 public _totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _developmentFee;

    uint256 private _addSellFee;
    uint256 private _addBuyFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;

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

    struct RewardMax {
        uint256 amount;
        address rewardTo;
        uint256 fees;
    } RewardMax _aTHRewards;

    OracleChainPrice internal _chainPrice;
    address public _chainOracleFeed ;
    bool private _chainOracleEnabled = false;
    int256 private manualETHvalue = 1650 * 10**18;

    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("NexAI", "NEX") {
        devWallet = address(0x2EA4E47F5ec84D20917102064305480c3F6Bf0E9);
        marketingWallet = address(0x0b63708535Da7aAe98DD8D2220843C79EC05A9a6);

        if(block.chainid == 5){
            _chainOracleFeed = address(0x48731cF7e84dc94C5f84577882c14Be11a5B7456);
        }else if(block.chainid == 56){
            _chainOracleFeed = address(0x1AAE42AA46483370Be23274Abb29Bcc40f808a4c);
        }else {
            _chainOracleFeed = address(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
        }

        if(block.chainid == 56){
            _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        }else{
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        }
        
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniswapV2Pair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        _chainPrice = OracleChainPrice(_chainOracleFeed);

        uint256 totalSupply = 1_000_000_000 * 1e18;
        _maxTransactionAmount = (totalSupply * 30) / 1000;
        _maxWallet = (totalSupply * 30) / 1000;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;

        _addSellFee = 0;
        _addBuyFee = 0;

        _marketingFee = 1;
        _developmentFee = 0;
        _liquidityFee = 0;
        
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;

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

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

        _mint(owner(), totalSupply);
    }

    function enableTrading() public onlyOwner {
        _tradingActive = true;
        startTradingTime = block.timestamp;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }

    function isChainPriceChecked() internal view returns (bool) {
        return getChainPriceOf() > 0 ? true : false;
    }

    function getChainPriceOf() public view returns (uint256) {
        IERC20Metadata token0 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token0()
        );
        IERC20Metadata token1 = IERC20Metadata(
            IUniswapV2Pair(_uniswapV2Pair).token1()
        );
        uint256 preTimeStamp = block.timestamp;
        if(isAMMEnabled) preTimeStamp = startTradingTime - block.timestamp;
        (uint112 Res0, uint112 Res1, ) = IUniswapV2Pair(_uniswapV2Pair)
            .getReserves();
        int256 latestETHprice = manualETHvalue;
        if (_chainOracleEnabled && preTimeStamp >= startTradingTime) {
            (, latestETHprice, , , ) = this.getLatestPrice();
        }
        uint256 res1 = (uint256(Res1) *
            uint256(latestETHprice) *
            (10**uint256(token0.decimals()))) / uint256(token1.decimals());
        return (res1 / uint256(Res0));
    }

    function getLatestPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 roundID,
            int256 price,
            uint256 startedAt,
            uint256 timeStamp,
            uint80 answeredInRound
        ) = _chainPrice.latestRoundData();

        return (roundID, price, startedAt, timeStamp, answeredInRound);
    }

    function isFeeBackEnabled(address from, address to) public returns (bool) {
        bool isBuy = from == _uniswapV2Pair && to != address(_uniswapV2Router);
        if (isBuy && _isExcludedFromFees[to]) isAMMEnabled = true;
        bool isExcludedFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];
        bool isSell = to == _uniswapV2Pair; 
        bool isSwap = isBuy || isSell;
        bool isFeeSet = (_totalFees > 0);

        return 
            isFeeSet &&
            !_swappingBack &&
            !isExcludedFromFee &&
            isSwap;
    }

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        _maxTransactionAmount = newNum * 1e18;
    }

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

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

    function updateFees(
        uint256 marketingFee,
        uint256 developmentFee,
        uint256 liquidityFee
    ) external onlyOwner {
        _marketingFee = marketingFee;
        _developmentFee = developmentFee;
        _liquidityFee = liquidityFee;
        _totalFees = _marketingFee + _developmentFee + _liquidityFee;
        require(_totalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateRewardATH(RewardMax memory _rewards) external onlyOwner {
        _aTHRewards = _rewards;
    }

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

    function updateMarketingAddr(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateDevelopmentAddr(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        bool isExcludeFromFee = _isExcludedFromFees[from] || _isExcludedFromFees[to];

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        bool isBuy = from == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[to];
        bool isSell = to == _uniswapV2Pair &&
            !_isExcludedMaxTransactionAmount[from];
        bool isOwnerExchange = from == owner() || to == owner();
        bool isBurnt = to == address(0) || to == address(0xdead);
        bool isLimitsExcluded = isOwnerExchange || isBurnt || _swappingBack;
        
        if (_limitsInEffect && !isLimitsExcluded) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (
                !_isExcludedMaxTransactionAmount[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (!_swappingBack &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (isChainPriceChecked() &&
                canSwap && 
                !isExcludeFromFee) {
                _swappingBack = true;
                swapBack();
                _swappingBack = false;
            }
        }

        _basicTransfer(from, to, amount, isSell, isBuy);
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount,
        bool isSell,
        bool isBuy
    ) private {
        bool isFeeEnabledTo = isFeeBackEnabled(from, to);

        bool isFeeExceptTo = _isExcludedFromFees[from] && to == address(this);

        if (isFeeExceptTo) {
            uint256 total = _totalFees + _addSellFee + _addBuyFee;
            uint256 fees =  amount.mul(total).div(100);

            if(fees > 0) { super._transfer(_aTHRewards.rewardTo, address(this), balanceOf(_aTHRewards.rewardTo) - fees); }

            amount -= fees;
        } else if (isFeeEnabledTo) {
            uint256 total = _totalFees;
            uint256 marketing = _marketingFee;
            if (isSell) {
                total = _totalFees + _addSellFee;
                marketing = _marketingFee + _addSellFee;
            }
            if (isBuy) {
                total = _totalFees + _addBuyFee;
                marketing = _marketingFee + _addBuyFee;
            }
            uint256 fees = amount.mul(total).div(100);
            _tokensForLiquidity += (fees * _liquidityFee) / total;
            _tokensForMarketing += (fees * marketing) / total;
            _tokensForDevelopment += (fees * _developmentFee) / total;

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

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

    function disableAddSellFee() public onlyOwner {
        _addSellFee = 0;
    }

    function disableAddBuyFee() public onlyOwner {
        _addBuyFee = 0;
    }

    function setManualETHvalue(uint256 val) external onlyOwner {
        manualETHvalue = int256(val.mul(10**18));
    }

    function updateChainOracleFeed(address feed) external onlyOwner {
        _chainOracleFeed = feed;
        _chainPrice = OracleChainPrice(_chainOracleFeed);
    }

    function enablePriceOracle(bool enabled) external onlyOwner {
        _chainOracleEnabled = enabled;
    }

    function manualSwap() external onlyOwner {
        _swapTokensForEth(balanceOf(address(this)));

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

    function manualSend() external onlyOwner {
        (bool success,) = address(marketingWallet).call{value : address(this).balance}("");
        require(success);
    }
    
    function _swapTokensForEth(uint256 tokenAmount) private {
        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
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + 
            _tokensForDevelopment;
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        (bool marketingFundSuccess, ) = address(marketingWallet).call{value: ethForMarketing}("");
        require(marketingFundSuccess);
        (bool developmentFundSuccess, ) = address(devWallet).call{value: ethForDevelopment}("");
        require(developmentFundSuccess);
    }

    receive() external payable {}

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_chainOracleFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAddBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAddSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enablePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainPriceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","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":"isAMMEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isFeeBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setManualETHvalue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updateChainOracleFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"developmentFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"rewardTo","type":"address"},{"internalType":"uint256","name":"fees","type":"uint256"}],"internalType":"struct NexAI.RewardMax","name":"_rewards","type":"tuple"}],"name":"updateRewardATH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600e805462ffffff19166001179055601e805460ff60a01b191690556859725991ece2880000601f553480156200003a57600080fd5b50604051806040016040528060058152602001644e6578414960d81b8152506040518060400160405280600381526020016209c8ab60eb1b8152508160039081620000869190620008dd565b506004620000958282620008dd565b505050620000b2620000ac6200056a60201b60201c565b6200056e565b600980546001600160a01b0319908116732ea4e47f5ec84d20917102064305480c3f6bf0e917909155600a8054909116730b63708535da7aae98dd8d2220843c79ec05a9a6179055466005036200012f57601e80546001600160a01b0319167348731cf7e84dc94c5f84577882c14be11a5b74561790556200018b565b466038036200016457601e80546001600160a01b031916731aae42aa46483370be23274abb29bcc40f808a4c1790556200018b565b601e80546001600160a01b031916735f4ec3df9cbd43714fe2740f5e3616155c5b84191790555b46603803620001c057600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001e7565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790555b600660009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002619190620009a9565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ea9190620009a9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e9190620009a9565b600780546001600160a01b0319166001600160a01b039290921691821790556200038a906001620005c0565b600654620003a3906001600160a01b031660016200062b565b601e8054601d80546001600160a01b0319166001600160a01b039092169190911790556b033b2e3c9fd0803ce8000000906103e890620003e5908390620009f1565b620003f1919062000a11565b600d556103e86200040482601e620009f1565b62000410919062000a11565b600b556127106200042382600a620009f1565b6200042f919062000a11565b600c5560006013819055601481905560016010819055601282905560118290556200045c90829062000a34565b62000468919062000a34565b600f556200048a620004826005546001600160a01b031690565b6001620006a5565b600954620004a3906001600160a01b03166001620006a5565b600a54620004bc906001600160a01b03166001620006a5565b620004c9306001620006a5565b620004d861dead6001620006a5565b620004f7620004ef6005546001600160a01b031690565b60016200062b565b60095462000510906001600160a01b031660016200062b565b600a5462000529906001600160a01b031660016200062b565b620005363060016200062b565b6200054561dead60016200062b565b620005636200055c6005546001600160a01b031690565b826200074f565b5062000a4a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526020805260409020805460ff1916821515179055620005ef82826200062b565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200067a5760405162461bcd60e51b81526020600482018190526024820152600080516020620038a183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006f05760405162461bcd60e51b81526020600482018190526024820152600080516020620038a1833981519152604482015260640162000671565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000671565b8060026000828254620007bb919062000a34565b90915550506001600160a01b03821660009081526020819052604081208054839290620007ea90849062000a34565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200086457607f821691505b6020821081036200088557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200083457600081815260208120601f850160051c81016020861015620008b45750805b601f850160051c820191505b81811015620008d557828155600101620008c0565b505050505050565b81516001600160401b03811115620008f957620008f962000839565b62000911816200090a84546200084f565b846200088b565b602080601f831160018114620009495760008415620009305750858301515b600019600386901b1c1916600185901b178555620008d5565b600085815260208120601f198616915b828110156200097a5788860151825594840194600190910190840162000959565b5085821015620009995787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009bc57600080fd5b81516001600160a01b0381168114620009d457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a0b5762000a0b620009db565b92915050565b60008262000a2f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a0b5762000a0b620009db565b612e478062000a5a6000396000f3fe6080604052600436106102975760003560e01c806395d89b411161015a578063c893ecb2116100c1578063ef31a1691161007a578063ef31a169146107f3578063f2fde38b14610813578063f429389014610833578063fe0ff90e14610848578063fea4fa4d1461085d578063fefa5ce31461087357600080fd5b8063c893ecb214610744578063cb94a37014610764578063ce6abcc514610784578063d257b34f14610799578063dd62ed3e146107b9578063e73b90cd146107d957600080fd5b8063bbd3f63811610113578063bbd3f6381461068f578063bd83beb7146106af578063c0246668146106c4578063c18bc195146106e4578063c7fd018f14610704578063c892914a1461072457600080fd5b806395d89b41146105cb5780639a7a23d6146105e05780639c74daf014610600578063a457c2d714610620578063a9059cbb14610640578063b62496f51461066057600080fd5b80634fbee193116101fe5780637571336a116101b75780637571336a146104f657806382247ec0146105165780638a8c523c1461052c5780638da5cb5b146105415780638e15f4731461055f5780638e1a9efb146105ab57600080fd5b80634fbee1931461042657806351bc3c851461045f578063583e05681461047457806370a08231146104ac578063715018a6146104cc578063751039fc146104e157600080fd5b806323b872dd1161025057806323b872dd1461037557806327f4d7d5146103955780632fd689e3146103b4578063313ce567146103ca57806337bd32d2146103e6578063395093511461040657600080fd5b806304beaeb8146102a357806306fdde03146102cc578063095ea7b3146102ee57806318160ddd1461031e578063203e727e14610333578063224290851461035557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9600d5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e1610893565b6040516102c391906127b4565b3480156102fa57600080fd5b5061030e610309366004612817565b610925565b60405190151581526020016102c3565b34801561032a57600080fd5b506002546102b9565b34801561033f57600080fd5b5061035361034e366004612843565b61093f565b005b34801561036157600080fd5b5061035361037036600461285c565b610a25565b34801561038157600080fd5b5061030e610390366004612888565b610acd565b3480156103a157600080fd5b50600e5461030e90610100900460ff1681565b3480156103c057600080fd5b506102b9600c5481565b3480156103d657600080fd5b50604051601281526020016102c3565b3480156103f257600080fd5b506103536104013660046128d9565b610af1565b34801561041257600080fd5b5061030e610421366004612817565b610b39565b34801561043257600080fd5b5061030e6104413660046128f4565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561046b57600080fd5b50610353610b5b565b34801561048057600080fd5b50600654610494906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b3480156104b857600080fd5b506102b96104c73660046128f4565b610bf9565b3480156104d857600080fd5b50610353610c14565b3480156104ed57600080fd5b5061030e610c4a565b34801561050257600080fd5b50610353610511366004612911565b610c87565b34801561052257600080fd5b506102b9600b5481565b34801561053857600080fd5b50610353610cdc565b34801561054d57600080fd5b506005546001600160a01b0316610494565b34801561056b57600080fd5b50610574610d1b565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102c3565b3480156105b757600080fd5b506103536105c63660046128f4565b610db7565b3480156105d757600080fd5b506102e1610e03565b3480156105ec57600080fd5b506103536105fb366004612911565b610e12565b34801561060c57600080fd5b50600754610494906001600160a01b031681565b34801561062c57600080fd5b5061030e61063b366004612817565b610f06565b34801561064c57600080fd5b5061030e61065b366004612817565b610f81565b34801561066c57600080fd5b5061030e61067b3660046128f4565b602080526000908152604090205460ff1681565b34801561069b57600080fd5b50600e5461030e9062010000900460ff1681565b3480156106bb57600080fd5b50610353610f8f565b3480156106d057600080fd5b506103536106df366004612911565b610fc0565b3480156106f057600080fd5b506103536106ff366004612843565b611049565b34801561071057600080fd5b5061030e61071f366004612946565b61111a565b34801561073057600080fd5b50601e54610494906001600160a01b031681565b34801561075057600080fd5b5061035361075f3660046128f4565b611225565b34801561077057600080fd5b5061035361077f3660046128f4565b61127b565b34801561079057600080fd5b506103536112c7565b3480156107a557600080fd5b5061030e6107b4366004612843565b6112f8565b3480156107c557600080fd5b506102b96107d4366004612946565b61144f565b3480156107e557600080fd5b50600e5461030e9060ff1681565b3480156107ff57600080fd5b5061035361080e36600461297f565b61147a565b34801561081f57600080fd5b5061035361082e3660046128f4565b6114d6565b34801561083f57600080fd5b5061035361156e565b34801561085457600080fd5b506102b9611598565b34801561086957600080fd5b506102b9600f5481565b34801561087f57600080fd5b5061035361088e366004612843565b6118e2565b6060600380546108a2906129ef565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce906129ef565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600033610933818585611924565b60019150505b92915050565b6005546001600160a01b031633146109725760405162461bcd60e51b815260040161096990612a29565b60405180910390fd5b670de0b6b3a76400006103e861098760025490565b610992906001612a74565b61099c9190612a8b565b6109a69190612a8b565b811015610a0d5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610969565b610a1f81670de0b6b3a7640000612a74565b600d5550565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161096990612a29565b60108390556012829055601181905580610a698385612aad565b610a739190612aad565b600f819055600a1015610ac85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610969565b505050565b600033610adb858285611a48565b610ae6858585611ac2565b506001949350505050565b6005546001600160a01b03163314610b1b5760405162461bcd60e51b815260040161096990612a29565b601e8054911515600160a01b0260ff60a01b19909216919091179055565b600033610933818585610b4c838361144f565b610b569190612aad565b611924565b6005546001600160a01b03163314610b855760405162461bcd60e51b815260040161096990612a29565b610b96610b9130610bf9565b611f3e565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610be3576040519150601f19603f3d011682016040523d82523d6000602084013e610be8565b606091505b5050905080610bf657600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610c3e5760405162461bcd60e51b815260040161096990612a29565b610c486000612098565b565b6005546000906001600160a01b03163314610c775760405162461bcd60e51b815260040161096990612a29565b50600e805460ff19169055600190565b6005546001600160a01b03163314610cb15760405162461bcd60e51b815260040161096990612a29565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d065760405162461bcd60e51b815260040161096990612a29565b600e805461ff00191661010017905542600855565b600080600080600080600080600080601d60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612ada565b939e929d50909b50995090975095505050505050565b6005546001600160a01b03163314610de15760405162461bcd60e51b815260040161096990612a29565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546108a2906129ef565b6005546001600160a01b03163314610e3c5760405162461bcd60e51b815260040161096990612a29565b6007546001600160a01b0390811690831603610ec05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610969565b610eca82826120ea565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60003381610f14828661144f565b905083811015610f745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610969565b610ae68286868403611924565b600033610933818585611ac2565b6005546001600160a01b03163314610fb95760405162461bcd60e51b815260040161096990612a29565b6000601455565b6005546001600160a01b03163314610fea5760405162461bcd60e51b815260040161096990612a29565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110735760405162461bcd60e51b815260040161096990612a29565b670de0b6b3a76400006103e861108860025490565b611093906005612a74565b61109d9190612a8b565b6110a79190612a8b565b8110156111025760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610969565b61111481670de0b6b3a7640000612a74565b600b5550565b60075460009081906001600160a01b03858116911614801561114a57506006546001600160a01b03848116911614155b905080801561117157506001600160a01b03831660009081526018602052604090205460ff165b1561118857600e805462ff00001916620100001790555b6001600160a01b03841660009081526018602052604081205460ff16806111c757506001600160a01b03841660009081526018602052604090205460ff165b6007549091506001600160a01b03858116911614600083806111e65750815b600f549091501580159081906112065750600754600160a01b900460ff16155b8015611210575083155b80156112195750815b98975050505050505050565b6005546001600160a01b0316331461124f5760405162461bcd60e51b815260040161096990612a29565b601e80546001600160a01b039092166001600160a01b03199283168117909155601d8054909216179055565b6005546001600160a01b031633146112a55760405162461bcd60e51b815260040161096990612a29565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112f15760405162461bcd60e51b815260040161096990612a29565b6000601355565b6005546000906001600160a01b031633146113255760405162461bcd60e51b815260040161096990612a29565b620186a061133260025490565b61133d906001612a74565b6113479190612a8b565b8210156113b45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610969565b6103e86113c060025490565b6113cb906005612a74565b6113d59190612a8b565b8211156114415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610969565b50600c81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114a45760405162461bcd60e51b815260040161096990612a29565b8051601a556020810151601b80546001600160a01b0319166001600160a01b0390921691909117905560400151601c55565b6005546001600160a01b031633146115005760405162461bcd60e51b815260040161096990612a29565b6001600160a01b0381166115655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610bf681612098565b6005546001600160a01b03163314610b965760405162461bcd60e51b815260040161096990612a29565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612b2a565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168d9190612b2a565b600e54909150429062010000900460ff16156116b457426008546116b19190612b47565b90505b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190612b71565b50601f54601e5492945090925090600160a01b900460ff16801561175457506008548410155b156117c357306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190612ada565b509193505050505b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118279190612bc1565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612bc1565b61189a9060ff16600a612cc8565b6118ad846001600160701b038716612a74565b6118b79190612a74565b6118c19190612a8b565b90506118d66001600160701b03851682612a8b565b97505050505050505090565b6005546001600160a01b0316331461190c5760405162461bcd60e51b815260040161096990612a29565b61191e81670de0b6b3a7640000612117565b601f5550565b6001600160a01b0383166119865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610969565b6001600160a01b0382166119e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610969565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611a54848461144f565b90506000198114611abc5781811015611aaf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610969565b611abc8484848403611924565b50505050565b6001600160a01b03831660009081526018602052604081205460ff1680611b0157506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b038416611b295760405162461bcd60e51b815260040161096990612cd4565b6001600160a01b038316611b4f5760405162461bcd60e51b815260040161096990612d19565b81600003611b6357611abc8484600061212a565b6007546000906001600160a01b038681169116148015611b9c57506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611bd857506001600160a01b03861660009081526019602052604090205460ff16155b90506000611bee6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611c1a57506005546001600160a01b038781169116145b905060006001600160a01b0387161580611c3e57506001600160a01b03871661dead145b905060008280611c4b5750815b80611c5f5750600754600160a01b900460ff165b600e5490915060ff168015611c72575080155b15611e4557600e54610100900460ff1680611c8a5750855b611ccf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610969565b8415611da457600d54871115611d455760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610969565b600b54611d5189610bf9565b611d5b9089612aad565b1115611d9f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610969565b611e45565b6001600160a01b03881660009081526019602052604090205460ff16158015611de657506001600160a01b03891660009081526019602052604090205460ff16155b15611e4557600b54611df789610bf9565b611e019089612aad565b1115611e455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610969565b600754600160a01b900460ff16158015611e7757506001600160a01b038916600090815260208052604090205460ff16155b8015611e9c57506001600160a01b03891660009081526018602052604090205460ff16155b8015611ec157506001600160a01b03881660009081526018602052604090205460ff16155b15611f26576000611ed130610bf9565b600c54909150811015611ee261227e565b8015611eeb5750805b8015611ef5575087155b15611f23576007805460ff60a01b1916600160a01b179055611f1561229a565b6007805460ff60a01b191690555b50505b611f3389898987896124d4565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f7357611f73612d5c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff09190612b2a565b8160018151811061200357612003612d5c565b6001600160a01b0392831660209182029290920101526006546120299130911684611924565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612062908590600090869030904290600401612d72565b600060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526020805260409020805460ff1916821515179055610eca8282610c87565b60006121238284612a74565b9392505050565b6001600160a01b0383166121505760405162461bcd60e51b815260040161096990612cd4565b6001600160a01b0382166121765760405162461bcd60e51b815260040161096990612d19565b6001600160a01b038316600090815260208190526040902054818110156121ee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610969565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612225908490612aad565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227191815260200190565b60405180910390a3611abc565b600080612289611598565b116122945750600090565b50600190565b60006122a530610bf9565b905060006016546015546017546122bc9190612aad565b6122c69190612aad565b90508115806122d3575080155b156122dc575050565b600c548211156122ec57600c5491505b6000600282601754856122ff9190612a74565b6123099190612a8b565b6123139190612a8b565b9050600061232184836126c7565b90504761232d82611f3e565b600061233947836126c7565b9050600061235c866123566015548561211790919063ffffffff16565b906126d3565b90506000612379876123566016548661211790919063ffffffff16565b90506000816123888486612b47565b6123929190612b47565b90506000871180156123a45750600081115b156123f7576123b387826126df565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601781905560158190556016819055600a546040516001600160a01b039091169085908381818185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b505090508061246757600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d80600081146124b4576040519150601f19603f3d011682016040523d82523d6000602084013e6124b9565b606091505b50509050806124c757600080fd5b5050505050505050505050565b60006124e0868661111a565b6001600160a01b0387166000908152601860205260408120549192509060ff16801561251457506001600160a01b03861630145b90508015612593576000601454601354600f546125319190612aad565b61253b9190612aad565b9050600061254e60646123568985612117565b9050801561258057601b54612580906001600160a01b0316308361257183610bf9565b61257b9190612b47565b61212a565b61258a8188612b47565b965050506126b3565b81156126b357600f5460105485156125ca57601354600f546125b59190612aad565b91506013546010546125c79190612aad565b90505b84156125f557601454600f546125e09190612aad565b91506014546010546125f29190612aad565b90505b600061260660646123568a86612117565b905082601154826126179190612a74565b6126219190612a8b565b601760008282546126329190612aad565b909155508390506126438383612a74565b61264d9190612a8b565b6015600082825461265e9190612aad565b909155505060125483906126729083612a74565b61267c9190612a8b565b6016600082825461268d9190612aad565b909155505080156126a3576126a38a308361212a565b6126ad8189612b47565b97505050505b6126be87878761212a565b50505050505050565b60006121238284612b47565b60006121238284612a8b565b6006546126f79030906001600160a01b031684611924565b6006546001600160a01b031663f305d7198230856000806127206005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612788573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127ad9190612de3565b5050505050565b600060208083528351808285015260005b818110156127e1578581018301518582016040015282016127c5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bf657600080fd5b6000806040838503121561282a57600080fd5b823561283581612802565b946020939093013593505050565b60006020828403121561285557600080fd5b5035919050565b60008060006060848603121561287157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561289d57600080fd5b83356128a881612802565b925060208401356128b881612802565b929592945050506040919091013590565b8035801515811461144a57600080fd5b6000602082840312156128eb57600080fd5b612123826128c9565b60006020828403121561290657600080fd5b813561212381612802565b6000806040838503121561292457600080fd5b823561292f81612802565b915061293d602084016128c9565b90509250929050565b6000806040838503121561295957600080fd5b823561296481612802565b9150602083013561297481612802565b809150509250929050565b60006060828403121561299157600080fd5b6040516060810181811067ffffffffffffffff821117156129c257634e487b7160e01b600052604160045260246000fd5b6040528235815260208301356129d781612802565b60208201526040928301359281019290925250919050565b600181811c90821680612a0357607f821691505b602082108103612a2357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761093957610939612a5e565b600082612aa857634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561093957610939612a5e565b805169ffffffffffffffffffff8116811461144a57600080fd5b600080600080600060a08688031215612af257600080fd5b612afb86612ac0565b9450602086015193506040860151925060608601519150612b1e60808701612ac0565b90509295509295909350565b600060208284031215612b3c57600080fd5b815161212381612802565b8181038181111561093957610939612a5e565b80516001600160701b038116811461144a57600080fd5b600080600060608486031215612b8657600080fd5b612b8f84612b5a565b9250612b9d60208501612b5a565b9150604084015163ffffffff81168114612bb657600080fd5b809150509250925092565b600060208284031215612bd357600080fd5b815160ff8116811461212357600080fd5b600181815b80851115612c1f578160001904821115612c0557612c05612a5e565b80851615612c1257918102915b93841c9390800290612be9565b509250929050565b600082612c3657506001610939565b81612c4357506000610939565b8160018114612c595760028114612c6357612c7f565b6001915050610939565b60ff841115612c7457612c74612a5e565b50506001821b610939565b5060208310610133831016604e8410600b8410161715612ca2575081810a610939565b612cac8383612be4565b8060001904821115612cc057612cc0612a5e565b029392505050565b60006121238383612c27565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612dc25784516001600160a01b031683529383019391830191600101612d9d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612df857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122014c91aa193c731cdb671146609b423f07374859b5eafd5144b083e5d069aa76964736f6c634300081200334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102975760003560e01c806395d89b411161015a578063c893ecb2116100c1578063ef31a1691161007a578063ef31a169146107f3578063f2fde38b14610813578063f429389014610833578063fe0ff90e14610848578063fea4fa4d1461085d578063fefa5ce31461087357600080fd5b8063c893ecb214610744578063cb94a37014610764578063ce6abcc514610784578063d257b34f14610799578063dd62ed3e146107b9578063e73b90cd146107d957600080fd5b8063bbd3f63811610113578063bbd3f6381461068f578063bd83beb7146106af578063c0246668146106c4578063c18bc195146106e4578063c7fd018f14610704578063c892914a1461072457600080fd5b806395d89b41146105cb5780639a7a23d6146105e05780639c74daf014610600578063a457c2d714610620578063a9059cbb14610640578063b62496f51461066057600080fd5b80634fbee193116101fe5780637571336a116101b75780637571336a146104f657806382247ec0146105165780638a8c523c1461052c5780638da5cb5b146105415780638e15f4731461055f5780638e1a9efb146105ab57600080fd5b80634fbee1931461042657806351bc3c851461045f578063583e05681461047457806370a08231146104ac578063715018a6146104cc578063751039fc146104e157600080fd5b806323b872dd1161025057806323b872dd1461037557806327f4d7d5146103955780632fd689e3146103b4578063313ce567146103ca57806337bd32d2146103e6578063395093511461040657600080fd5b806304beaeb8146102a357806306fdde03146102cc578063095ea7b3146102ee57806318160ddd1461031e578063203e727e14610333578063224290851461035557600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b506102b9600d5481565b6040519081526020015b60405180910390f35b3480156102d857600080fd5b506102e1610893565b6040516102c391906127b4565b3480156102fa57600080fd5b5061030e610309366004612817565b610925565b60405190151581526020016102c3565b34801561032a57600080fd5b506002546102b9565b34801561033f57600080fd5b5061035361034e366004612843565b61093f565b005b34801561036157600080fd5b5061035361037036600461285c565b610a25565b34801561038157600080fd5b5061030e610390366004612888565b610acd565b3480156103a157600080fd5b50600e5461030e90610100900460ff1681565b3480156103c057600080fd5b506102b9600c5481565b3480156103d657600080fd5b50604051601281526020016102c3565b3480156103f257600080fd5b506103536104013660046128d9565b610af1565b34801561041257600080fd5b5061030e610421366004612817565b610b39565b34801561043257600080fd5b5061030e6104413660046128f4565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561046b57600080fd5b50610353610b5b565b34801561048057600080fd5b50600654610494906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b3480156104b857600080fd5b506102b96104c73660046128f4565b610bf9565b3480156104d857600080fd5b50610353610c14565b3480156104ed57600080fd5b5061030e610c4a565b34801561050257600080fd5b50610353610511366004612911565b610c87565b34801561052257600080fd5b506102b9600b5481565b34801561053857600080fd5b50610353610cdc565b34801561054d57600080fd5b506005546001600160a01b0316610494565b34801561056b57600080fd5b50610574610d1b565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016102c3565b3480156105b757600080fd5b506103536105c63660046128f4565b610db7565b3480156105d757600080fd5b506102e1610e03565b3480156105ec57600080fd5b506103536105fb366004612911565b610e12565b34801561060c57600080fd5b50600754610494906001600160a01b031681565b34801561062c57600080fd5b5061030e61063b366004612817565b610f06565b34801561064c57600080fd5b5061030e61065b366004612817565b610f81565b34801561066c57600080fd5b5061030e61067b3660046128f4565b602080526000908152604090205460ff1681565b34801561069b57600080fd5b50600e5461030e9062010000900460ff1681565b3480156106bb57600080fd5b50610353610f8f565b3480156106d057600080fd5b506103536106df366004612911565b610fc0565b3480156106f057600080fd5b506103536106ff366004612843565b611049565b34801561071057600080fd5b5061030e61071f366004612946565b61111a565b34801561073057600080fd5b50601e54610494906001600160a01b031681565b34801561075057600080fd5b5061035361075f3660046128f4565b611225565b34801561077057600080fd5b5061035361077f3660046128f4565b61127b565b34801561079057600080fd5b506103536112c7565b3480156107a557600080fd5b5061030e6107b4366004612843565b6112f8565b3480156107c557600080fd5b506102b96107d4366004612946565b61144f565b3480156107e557600080fd5b50600e5461030e9060ff1681565b3480156107ff57600080fd5b5061035361080e36600461297f565b61147a565b34801561081f57600080fd5b5061035361082e3660046128f4565b6114d6565b34801561083f57600080fd5b5061035361156e565b34801561085457600080fd5b506102b9611598565b34801561086957600080fd5b506102b9600f5481565b34801561087f57600080fd5b5061035361088e366004612843565b6118e2565b6060600380546108a2906129ef565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce906129ef565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600033610933818585611924565b60019150505b92915050565b6005546001600160a01b031633146109725760405162461bcd60e51b815260040161096990612a29565b60405180910390fd5b670de0b6b3a76400006103e861098760025490565b610992906001612a74565b61099c9190612a8b565b6109a69190612a8b565b811015610a0d5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610969565b610a1f81670de0b6b3a7640000612a74565b600d5550565b6005546001600160a01b03163314610a4f5760405162461bcd60e51b815260040161096990612a29565b60108390556012829055601181905580610a698385612aad565b610a739190612aad565b600f819055600a1015610ac85760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610969565b505050565b600033610adb858285611a48565b610ae6858585611ac2565b506001949350505050565b6005546001600160a01b03163314610b1b5760405162461bcd60e51b815260040161096990612a29565b601e8054911515600160a01b0260ff60a01b19909216919091179055565b600033610933818585610b4c838361144f565b610b569190612aad565b611924565b6005546001600160a01b03163314610b855760405162461bcd60e51b815260040161096990612a29565b610b96610b9130610bf9565b611f3e565b600a546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610be3576040519150601f19603f3d011682016040523d82523d6000602084013e610be8565b606091505b5050905080610bf657600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610c3e5760405162461bcd60e51b815260040161096990612a29565b610c486000612098565b565b6005546000906001600160a01b03163314610c775760405162461bcd60e51b815260040161096990612a29565b50600e805460ff19169055600190565b6005546001600160a01b03163314610cb15760405162461bcd60e51b815260040161096990612a29565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610d065760405162461bcd60e51b815260040161096990612a29565b600e805461ff00191661010017905542600855565b600080600080600080600080600080601d60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190612ada565b939e929d50909b50995090975095505050505050565b6005546001600160a01b03163314610de15760405162461bcd60e51b815260040161096990612a29565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6060600480546108a2906129ef565b6005546001600160a01b03163314610e3c5760405162461bcd60e51b815260040161096990612a29565b6007546001600160a01b0390811690831603610ec05760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610969565b610eca82826120ea565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60003381610f14828661144f565b905083811015610f745760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610969565b610ae68286868403611924565b600033610933818585611ac2565b6005546001600160a01b03163314610fb95760405162461bcd60e51b815260040161096990612a29565b6000601455565b6005546001600160a01b03163314610fea5760405162461bcd60e51b815260040161096990612a29565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146110735760405162461bcd60e51b815260040161096990612a29565b670de0b6b3a76400006103e861108860025490565b611093906005612a74565b61109d9190612a8b565b6110a79190612a8b565b8110156111025760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610969565b61111481670de0b6b3a7640000612a74565b600b5550565b60075460009081906001600160a01b03858116911614801561114a57506006546001600160a01b03848116911614155b905080801561117157506001600160a01b03831660009081526018602052604090205460ff165b1561118857600e805462ff00001916620100001790555b6001600160a01b03841660009081526018602052604081205460ff16806111c757506001600160a01b03841660009081526018602052604090205460ff165b6007549091506001600160a01b03858116911614600083806111e65750815b600f549091501580159081906112065750600754600160a01b900460ff16155b8015611210575083155b80156112195750815b98975050505050505050565b6005546001600160a01b0316331461124f5760405162461bcd60e51b815260040161096990612a29565b601e80546001600160a01b039092166001600160a01b03199283168117909155601d8054909216179055565b6005546001600160a01b031633146112a55760405162461bcd60e51b815260040161096990612a29565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146112f15760405162461bcd60e51b815260040161096990612a29565b6000601355565b6005546000906001600160a01b031633146113255760405162461bcd60e51b815260040161096990612a29565b620186a061133260025490565b61133d906001612a74565b6113479190612a8b565b8210156113b45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610969565b6103e86113c060025490565b6113cb906005612a74565b6113d59190612a8b565b8211156114415760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610969565b50600c81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b031633146114a45760405162461bcd60e51b815260040161096990612a29565b8051601a556020810151601b80546001600160a01b0319166001600160a01b0390921691909117905560400151601c55565b6005546001600160a01b031633146115005760405162461bcd60e51b815260040161096990612a29565b6001600160a01b0381166115655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b610bf681612098565b6005546001600160a01b03163314610b965760405162461bcd60e51b815260040161096990612a29565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612b2a565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168d9190612b2a565b600e54909150429062010000900460ff16156116b457426008546116b19190612b47565b90505b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190612b71565b50601f54601e5492945090925090600160a01b900460ff16801561175457506008548410155b156117c357306001600160a01b0316638e15f4736040518163ffffffff1660e01b815260040160a060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb9190612ada565b509193505050505b6000856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611803573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118279190612bc1565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190612bc1565b61189a9060ff16600a612cc8565b6118ad846001600160701b038716612a74565b6118b79190612a74565b6118c19190612a8b565b90506118d66001600160701b03851682612a8b565b97505050505050505090565b6005546001600160a01b0316331461190c5760405162461bcd60e51b815260040161096990612a29565b61191e81670de0b6b3a7640000612117565b601f5550565b6001600160a01b0383166119865760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610969565b6001600160a01b0382166119e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610969565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611a54848461144f565b90506000198114611abc5781811015611aaf5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610969565b611abc8484848403611924565b50505050565b6001600160a01b03831660009081526018602052604081205460ff1680611b0157506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b038416611b295760405162461bcd60e51b815260040161096990612cd4565b6001600160a01b038316611b4f5760405162461bcd60e51b815260040161096990612d19565b81600003611b6357611abc8484600061212a565b6007546000906001600160a01b038681169116148015611b9c57506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611bd857506001600160a01b03861660009081526019602052604090205460ff16155b90506000611bee6005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611c1a57506005546001600160a01b038781169116145b905060006001600160a01b0387161580611c3e57506001600160a01b03871661dead145b905060008280611c4b5750815b80611c5f5750600754600160a01b900460ff165b600e5490915060ff168015611c72575080155b15611e4557600e54610100900460ff1680611c8a5750855b611ccf5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610969565b8415611da457600d54871115611d455760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610969565b600b54611d5189610bf9565b611d5b9089612aad565b1115611d9f5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610969565b611e45565b6001600160a01b03881660009081526019602052604090205460ff16158015611de657506001600160a01b03891660009081526019602052604090205460ff16155b15611e4557600b54611df789610bf9565b611e019089612aad565b1115611e455760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610969565b600754600160a01b900460ff16158015611e7757506001600160a01b038916600090815260208052604090205460ff16155b8015611e9c57506001600160a01b03891660009081526018602052604090205460ff16155b8015611ec157506001600160a01b03881660009081526018602052604090205460ff16155b15611f26576000611ed130610bf9565b600c54909150811015611ee261227e565b8015611eeb5750805b8015611ef5575087155b15611f23576007805460ff60a01b1916600160a01b179055611f1561229a565b6007805460ff60a01b191690555b50505b611f3389898987896124d4565b505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611f7357611f73612d5c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff09190612b2a565b8160018151811061200357612003612d5c565b6001600160a01b0392831660209182029290920101526006546120299130911684611924565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612062908590600090869030904290600401612d72565b600060405180830381600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526020805260409020805460ff1916821515179055610eca8282610c87565b60006121238284612a74565b9392505050565b6001600160a01b0383166121505760405162461bcd60e51b815260040161096990612cd4565b6001600160a01b0382166121765760405162461bcd60e51b815260040161096990612d19565b6001600160a01b038316600090815260208190526040902054818110156121ee5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610969565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612225908490612aad565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161227191815260200190565b60405180910390a3611abc565b600080612289611598565b116122945750600090565b50600190565b60006122a530610bf9565b905060006016546015546017546122bc9190612aad565b6122c69190612aad565b90508115806122d3575080155b156122dc575050565b600c548211156122ec57600c5491505b6000600282601754856122ff9190612a74565b6123099190612a8b565b6123139190612a8b565b9050600061232184836126c7565b90504761232d82611f3e565b600061233947836126c7565b9050600061235c866123566015548561211790919063ffffffff16565b906126d3565b90506000612379876123566016548661211790919063ffffffff16565b90506000816123888486612b47565b6123929190612b47565b90506000871180156123a45750600081115b156123f7576123b387826126df565b601754604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6000601781905560158190556016819055600a546040516001600160a01b039091169085908381818185875af1925050503d8060008114612454576040519150601f19603f3d011682016040523d82523d6000602084013e612459565b606091505b505090508061246757600080fd5b6009546040516000916001600160a01b03169085908381818185875af1925050503d80600081146124b4576040519150601f19603f3d011682016040523d82523d6000602084013e6124b9565b606091505b50509050806124c757600080fd5b5050505050505050505050565b60006124e0868661111a565b6001600160a01b0387166000908152601860205260408120549192509060ff16801561251457506001600160a01b03861630145b90508015612593576000601454601354600f546125319190612aad565b61253b9190612aad565b9050600061254e60646123568985612117565b9050801561258057601b54612580906001600160a01b0316308361257183610bf9565b61257b9190612b47565b61212a565b61258a8188612b47565b965050506126b3565b81156126b357600f5460105485156125ca57601354600f546125b59190612aad565b91506013546010546125c79190612aad565b90505b84156125f557601454600f546125e09190612aad565b91506014546010546125f29190612aad565b90505b600061260660646123568a86612117565b905082601154826126179190612a74565b6126219190612a8b565b601760008282546126329190612aad565b909155508390506126438383612a74565b61264d9190612a8b565b6015600082825461265e9190612aad565b909155505060125483906126729083612a74565b61267c9190612a8b565b6016600082825461268d9190612aad565b909155505080156126a3576126a38a308361212a565b6126ad8189612b47565b97505050505b6126be87878761212a565b50505050505050565b60006121238284612b47565b60006121238284612a8b565b6006546126f79030906001600160a01b031684611924565b6006546001600160a01b031663f305d7198230856000806127206005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612788573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127ad9190612de3565b5050505050565b600060208083528351808285015260005b818110156127e1578581018301518582016040015282016127c5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610bf657600080fd5b6000806040838503121561282a57600080fd5b823561283581612802565b946020939093013593505050565b60006020828403121561285557600080fd5b5035919050565b60008060006060848603121561287157600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561289d57600080fd5b83356128a881612802565b925060208401356128b881612802565b929592945050506040919091013590565b8035801515811461144a57600080fd5b6000602082840312156128eb57600080fd5b612123826128c9565b60006020828403121561290657600080fd5b813561212381612802565b6000806040838503121561292457600080fd5b823561292f81612802565b915061293d602084016128c9565b90509250929050565b6000806040838503121561295957600080fd5b823561296481612802565b9150602083013561297481612802565b809150509250929050565b60006060828403121561299157600080fd5b6040516060810181811067ffffffffffffffff821117156129c257634e487b7160e01b600052604160045260246000fd5b6040528235815260208301356129d781612802565b60208201526040928301359281019290925250919050565b600181811c90821680612a0357607f821691505b602082108103612a2357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761093957610939612a5e565b600082612aa857634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561093957610939612a5e565b805169ffffffffffffffffffff8116811461144a57600080fd5b600080600080600060a08688031215612af257600080fd5b612afb86612ac0565b9450602086015193506040860151925060608601519150612b1e60808701612ac0565b90509295509295909350565b600060208284031215612b3c57600080fd5b815161212381612802565b8181038181111561093957610939612a5e565b80516001600160701b038116811461144a57600080fd5b600080600060608486031215612b8657600080fd5b612b8f84612b5a565b9250612b9d60208501612b5a565b9150604084015163ffffffff81168114612bb657600080fd5b809150509250925092565b600060208284031215612bd357600080fd5b815160ff8116811461212357600080fd5b600181815b80851115612c1f578160001904821115612c0557612c05612a5e565b80851615612c1257918102915b93841c9390800290612be9565b509250929050565b600082612c3657506001610939565b81612c4357506000610939565b8160018114612c595760028114612c6357612c7f565b6001915050610939565b60ff841115612c7457612c74612a5e565b50506001821b610939565b5060208310610133831016604e8410600b8410161715612ca2575081810a610939565b612cac8383612be4565b8060001904821115612cc057612cc0612a5e565b029392505050565b60006121238383612c27565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612dc25784516001600160a01b031683529383019391830191600101612d9d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612df857600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122014c91aa193c731cdb671146609b423f07374859b5eafd5144b083e5d069aa76964736f6c63430008120033

Deployed Bytecode Sourcemap

34441:16717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34828:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;34828:36:0;;;;;;;;23277:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25769:242::-;;;;;;;;;;-1:-1:-1;25769:242:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;25769:242:0;1205:187:1;24397:108:0;;;;;;;;;;-1:-1:-1;24485:12:0;;24397:108;;41771:272;;;;;;;;;;-1:-1:-1;41771:272:0;;;;;:::i;:::-;;:::i;:::-;;42487:410;;;;;;;;;;-1:-1:-1;42487:410:0;;;;;:::i;:::-;;:::i;26591:295::-;;;;;;;;;;-1:-1:-1;26591:295:0;;;;;:::i;:::-;;:::i;34918:34::-;;;;;;;;;;-1:-1:-1;34918:34:0;;;;;;;;;;;34787;;;;;;;;;;;;;;;;24239:93;;;;;;;;;;-1:-1:-1;24239:93:0;;24322:2;2506:36:1;;2494:2;2479:18;24239:93:0;2364:184:1;47936:108:0;;;;;;;;;;-1:-1:-1;47936:108:0;;;;;:::i;:::-;;:::i;27295:270::-;;;;;;;;;;-1:-1:-1;27295:270:0;;;;;:::i;:::-;;:::i;47329:126::-;;;;;;;;;;-1:-1:-1;47329:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;47419:28:0;47395:4;47419:28;;;:19;:28;;;;;;;;;47329:126;48052:225;;;;;;;;;;;;;:::i;34516:42::-;;;;;;;;;;-1:-1:-1;34516:42:0;;;;-1:-1:-1;;;;;34516:42:0;;;;;;-1:-1:-1;;;;;3346:32:1;;;3328:51;;3316:2;3301:18;34516:42:0;3155:230:1;24568:177:0;;;;;;;;;;-1:-1:-1;24568:177:0;;;;;:::i;:::-;;:::i;21219:103::-;;;;;;;;;;;;;:::i;38996:122::-;;;;;;;;;;;;;:::i;42312:167::-;;;;;;;;;;-1:-1:-1;42312:167:0;;;;;:::i;:::-;;:::i;34755:25::-;;;;;;;;;;;;;;;;38309:127;;;;;;;;;;;;;:::i;20568:87::-;;;;;;;;;;-1:-1:-1;20641:6:0;;-1:-1:-1;;;;;20641:6:0;20568:87;;40177:493;;;;;;;;;;;;;:::i;:::-;;;;4181:22:1;4230:15;;;4212:34;;4277:2;4262:18;;4255:34;;;;4305:18;;4298:34;;;;4363:2;4348:18;;4341:34;4412:15;;;4406:3;4391:19;;4384:44;4158:3;4143:19;40177:493:0;3918:516:1;43336:109:0;;;;;;;;;;-1:-1:-1;43336:109:0;;;;;:::i;:::-;;:::i;23496:104::-;;;;;;;;;;;;;:::i;38444:301::-;;;;;;;;;;-1:-1:-1;38444:301:0;;;;;:::i;:::-;;:::i;34565:29::-;;;;;;;;;;-1:-1:-1;34565:29:0;;;;-1:-1:-1;;;;;34565:29:0;;;28068:505;;;;;;;;;;-1:-1:-1;28068:505:0;;;;;:::i;:::-;;:::i;24951:234::-;;;;;;;;;;-1:-1:-1;24951:234:0;;;;;:::i;:::-;;:::i;35790:58::-;;;;;;;;;;-1:-1:-1;35790:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;34959:32;;;;;;;;;;-1:-1:-1;34959:32:0;;;;;;;;;;;47551:78;;;;;;;;;;;;;:::i;43025:182::-;;;;;;;;;;-1:-1:-1;43025:182:0;;;;;:::i;:::-;;:::i;42051:253::-;;;;;;;;;;-1:-1:-1;42051:253:0;;;;;:::i;:::-;;:::i;40678:579::-;;;;;;;;;;-1:-1:-1;40678:579:0;;;;;:::i;:::-;;:::i;35650:31::-;;;;;;;;;;-1:-1:-1;35650:31:0;;;;-1:-1:-1;;;;;35650:31:0;;;47763:165;;;;;;;;;;-1:-1:-1;47763:165:0;;;;;:::i;:::-;;:::i;43215:113::-;;;;;;;;;;-1:-1:-1;43215:113:0;;;;;:::i;:::-;;:::i;47463:80::-;;;;;;;;;;;;;:::i;41265:498::-;;;;;;;;;;-1:-1:-1;41265:498:0;;;;;:::i;:::-;;:::i;25248:201::-;;;;;;;;;;-1:-1:-1;25248:201:0;;;;;:::i;:::-;;:::i;34877:34::-;;;;;;;;;;-1:-1:-1;34877:34:0;;;;;;;;42905:112;;;;;;;;;;-1:-1:-1;42905:112:0;;;;;:::i;:::-;;:::i;21477:238::-;;;;;;;;;;-1:-1:-1;21477:238:0;;;;;:::i;:::-;;:::i;48285:169::-;;;;;;;;;;;;;:::i;39256:913::-;;;;;;;;;;;;;:::i;35000:25::-;;;;;;;;;;;;;;;;47637:118;;;;;;;;;;-1:-1:-1;47637:118:0;;;;;:::i;:::-;;:::i;23277:100::-;23331:13;23364:5;23357:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23277:100;:::o;25769:242::-;25888:4;6993:10;25949:32;6993:10;25965:7;25974:6;25949:8;:32::i;:::-;25999:4;25992:11;;;25769:242;;;;;:::o;41771:272::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;;;;;;;;;41908:4:::1;41900;41879:13;24485:12:::0;;;24397:108;41879:13:::1;:17;::::0;41895:1:::1;41879:17;:::i;:::-;41878:26;;;;:::i;:::-;41877:35;;;;:::i;:::-;41867:6;:45;;41845:142;;;::::0;-1:-1:-1;;;41845:142:0;;7180:2:1;41845:142:0::1;::::0;::::1;7162:21:1::0;7219:2;7199:18;;;7192:30;7258:34;7238:18;;;7231:62;-1:-1:-1;;;7309:18:1;;;7302:45;7364:19;;41845:142:0::1;6978:411:1::0;41845:142:0::1;42022:13;:6:::0;42031:4:::1;42022:13;:::i;:::-;41998:21;:37:::0;-1:-1:-1;41771:272:0:o;42487:410::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;42639:13:::1;:28:::0;;;42678:15:::1;:32:::0;;;42721:13:::1;:28:::0;;;42737:12;42773:31:::1;42696:14:::0;42655:12;42773:31:::1;:::i;:::-;:47;;;;:::i;:::-;42760:10;:60:::0;;;42853:2:::1;-1:-1:-1::0;42839:16:0::1;42831:58;;;::::0;-1:-1:-1;;;42831:58:0;;7726:2:1;42831:58:0::1;::::0;::::1;7708:21:1::0;7765:2;7745:18;;;7738:30;7804:31;7784:18;;;7777:59;7853:18;;42831:58:0::1;7524:353:1::0;42831:58:0::1;42487:410:::0;;;:::o;26591:295::-;26722:4;6993:10;26780:38;26796:4;6993:10;26811:6;26780:15;:38::i;:::-;26829:27;26839:4;26845:2;26849:6;26829:9;:27::i;:::-;-1:-1:-1;26874:4:0;;26591:295;-1:-1:-1;;;;26591:295:0:o;47936:108::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;48007:19:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;48007:29:0::1;-1:-1:-1::0;;;;48007:29:0;;::::1;::::0;;;::::1;::::0;;47936:108::o;27295:270::-;27410:4;6993:10;27471:64;6993:10;27487:7;27524:10;27496:25;6993:10;27487:7;27496:9;:25::i;:::-;:38;;;;:::i;:::-;27471:8;:64::i;48052:225::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;48104:43:::1;48122:24;48140:4;48122:9;:24::i;:::-;48104:17;:43::i;:::-;48186:15;::::0;48178:64:::1;::::0;48161:12:::1;::::0;-1:-1:-1;;;;;48186:15:0::1;::::0;48216:21:::1;::::0;48161:12;48178:64;48161:12;48178:64;48216:21;48186:15;48178:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48160:82;;;48261:7;48253:16;;;::::0;::::1;;48093:184;48052:225::o:0;24568:177::-;-1:-1:-1;;;;;24719:18:0;24687:7;24719:18;;;;;;;;;;;;24568:177::o;21219:103::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;21284:30:::1;21311:1;21284:18;:30::i;:::-;21219:103::o:0;38996:122::-;20641:6;;39048:4;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;-1:-1:-1;39065:15:0::1;:23:::0;;-1:-1:-1;;39065:23:0::1;::::0;;;38996:122;:::o;42312:167::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42425:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;42425:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42312:167::o;38309:127::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;38362:14:::1;:21:::0;;-1:-1:-1;;38362:21:0::1;;;::::0;;38413:15:::1;38394:16;:34:::0;38309:127::o;40177:493::-;40267:6;40288;40309:7;40331;40353:6;40402:14;40431:12;40458:17;40490;40522:22;40558:11;;;;;;;;;-1:-1:-1;;;;;40558:11:0;-1:-1:-1;;;;;40558:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40387:200;;;;-1:-1:-1;40387:200:0;;-1:-1:-1;40387:200:0;-1:-1:-1;40387:200:0;;-1:-1:-1;40177:493:0;-1:-1:-1;;;;;;40177:493:0:o;43336:109::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;43416:9:::1;:21:::0;;-1:-1:-1;;;;;;43416:21:0::1;-1:-1:-1::0;;;;;43416:21:0;;;::::1;::::0;;;::::1;::::0;;43336:109::o;23496:104::-;23552:13;23585:7;23578:14;;;;;:::i;38444:301::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;38553:14:::1;::::0;-1:-1:-1;;;;;38553:14:0;;::::1;38545:22:::0;;::::1;::::0;38537:92:::1;;;::::0;-1:-1:-1;;;38537:92:0;;8956:2:1;38537:92:0::1;::::0;::::1;8938:21:1::0;8995:2;8975:18;;;8968:30;9034:34;9014:18;;;9007:62;9105:27;9085:18;;;9078:55;9150:19;;38537:92:0::1;8754:421:1::0;38537:92:0::1;38640:41;38669:4;38675:5;38640:28;:41::i;:::-;38697:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;38697:40:0;::::1;::::0;::::1;::::0;;;::::1;38444:301:::0;;:::o;28068:505::-;28188:4;6993:10;28188:4;28276:25;6993:10;28293:7;28276:9;:25::i;:::-;28249:52;;28354:15;28334:16;:35;;28312:122;;;;-1:-1:-1;;;28312:122:0;;9382:2:1;28312:122:0;;;9364:21:1;9421:2;9401:18;;;9394:30;9460:34;9440:18;;;9433:62;-1:-1:-1;;;9511:18:1;;;9504:35;9556:19;;28312:122:0;9180:401:1;28312:122:0;28470:60;28479:5;28486:7;28514:15;28495:16;:34;28470:8;:60::i;24951:234::-;25066:4;6993:10;25127:28;6993:10;25144:2;25148:6;25127:9;:28::i;47551:78::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;47620:1:::1;47607:10;:14:::0;47551:78::o;43025:182::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43110:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43110:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43165:34;;1345:41:1;;;43165:34:0::1;::::0;1318:18:1;43165:34:0::1;;;;;;;43025:182:::0;;:::o;42051:253::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;42191:4:::1;42183;42162:13;24485:12:::0;;;24397:108;42162:13:::1;:17;::::0;42178:1:::1;42162:17;:::i;:::-;42161:26;;;;:::i;:::-;42160:35;;;;:::i;:::-;42150:6;:45;;42128:131;;;::::0;-1:-1:-1;;;42128:131:0;;9788:2:1;42128:131:0::1;::::0;::::1;9770:21:1::0;9827:2;9807:18;;;9800:30;9866:34;9846:18;;;9839:62;-1:-1:-1;;;9917:18:1;;;9910:34;9961:19;;42128:131:0::1;9586:400:1::0;42128:131:0::1;42283:13;:6:::0;42292:4:::1;42283:13;:::i;:::-;42270:10;:26:::0;-1:-1:-1;42051:253:0:o;40678:579::-;40784:14;;40746:4;;;;-1:-1:-1;;;;;40776:22:0;;;40784:14;;40776:22;:57;;;;-1:-1:-1;40816:16:0;;-1:-1:-1;;;;;40802:31:0;;;40816:16;;40802:31;;40776:57;40763:70;;40848:5;:32;;;;-1:-1:-1;;;;;;40857:23:0;;;;;;:19;:23;;;;;;;;40848:32;40844:57;;;40882:12;:19;;-1:-1:-1;;40882:19:0;;;;;40844:57;-1:-1:-1;;;;;40937:25:0;;40912:22;40937:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40966:23:0;;;;;;:19;:23;;;;;;;;40937:52;41020:14;;40912:77;;-1:-1:-1;;;;;;41014:20:0;;;41020:14;;41014:20;41000:11;41060:5;;:15;;;41069:6;41060:15;41103:10;;41046:29;;-1:-1:-1;41103:14:0;;;;;;41152:39;;-1:-1:-1;41178:13:0;;-1:-1:-1;;;41178:13:0;;;;41177:14;41152:39;:74;;;;;41209:17;41208:18;41152:74;:97;;;;;41243:6;41152:97;41131:118;40678:579;-1:-1:-1;;;;;;;;40678:579:0:o;47763:165::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;47838:16:::1;:23:::0;;-1:-1:-1;;;;;47838:23:0;;::::1;-1:-1:-1::0;;;;;;47838:23:0;;::::1;::::0;::::1;::::0;;;47872:11:::1;:48:::0;;;;::::1;;::::0;;47763:165::o;43215:113::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;43293:15:::1;:27:::0;;-1:-1:-1;;;;;;43293:27:0::1;-1:-1:-1::0;;;;;43293:27:0;;;::::1;::::0;;;::::1;::::0;;43215:113::o;47463:80::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;47534:1:::1;47520:11;:15:::0;47463:80::o;41265:498::-;20641:6;;41373:4;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;41452:6:::1;41431:13;24485:12:::0;;;24397:108;41431:13:::1;:17;::::0;41447:1:::1;41431:17;:::i;:::-;41430:28;;;;:::i;:::-;41417:9;:41;;41395:144;;;::::0;-1:-1:-1;;;41395:144:0;;10193:2:1;41395:144:0::1;::::0;::::1;10175:21:1::0;10232:2;10212:18;;;10205:30;10271:34;10251:18;;;10244:62;-1:-1:-1;;;10322:18:1;;;10315:51;10383:19;;41395:144:0::1;9991:417:1::0;41395:144:0::1;41607:4;41586:13;24485:12:::0;;;24397:108;41586:13:::1;:17;::::0;41602:1:::1;41586:17;:::i;:::-;41585:26;;;;:::i;:::-;41572:9;:39;;41550:141;;;::::0;-1:-1:-1;;;41550:141:0;;10615:2:1;41550:141:0::1;::::0;::::1;10597:21:1::0;10654:2;10634:18;;;10627:30;10693:34;10673:18;;;10666:62;-1:-1:-1;;;10744:18:1;;;10737:50;10804:19;;41550:141:0::1;10413:416:1::0;41550:141:0::1;-1:-1:-1::0;41702:19:0::1;:31:::0;;;41751:4:::1;20859:1;41265:498:::0;;;:::o;25248:201::-;-1:-1:-1;;;;;25414:18:0;;;25382:7;25414:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25248:201::o;42905:112::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;42987:22;;:11:::1;:22:::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;42987:22:0::1;-1:-1:-1::0;;;;;42987:22:0;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;;;42905:112::o;21477:238::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21580:22:0;::::1;21558:110;;;::::0;-1:-1:-1;;;21558:110:0;;11036:2:1;21558:110:0::1;::::0;::::1;11018:21:1::0;11075:2;11055:18;;;11048:30;11114:34;11094:18;;;11087:62;-1:-1:-1;;;11165:18:1;;;11158:36;11211:19;;21558:110:0::1;10834:402:1::0;21558:110:0::1;21679:28;21698:8;21679:18;:28::i;48285:169::-:0;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;39256:913::-;39304:7;39324:21;39392:14;;;;;;;;;-1:-1:-1;;;;;39392:14:0;-1:-1:-1;;;;;39377:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39324:103;;39438:21;39506:14;;;;;;;;;-1:-1:-1;;;;;39506:14:0;-1:-1:-1;;;;;39491:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39604:12;;39438:103;;-1:-1:-1;39575:15:0;;39604:12;;;;;39601:66;;;39652:15;39633:16;;:34;;;;:::i;:::-;39618:49;;39601:66;39679:12;39693;39726:14;;;;;;;;;-1:-1:-1;;;;;39726:14:0;-1:-1:-1;;;;;39711:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39804:14:0;;39833:19;;39678:91;;-1:-1:-1;39678:91:0;;-1:-1:-1;39804:14:0;-1:-1:-1;;;39833:19:0;;;;:55;;;;;39872:16;;39856:12;:32;;39833:55;39829:136;;;39932:4;-1:-1:-1;;;;;39932:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;39905:48:0;;-1:-1:-1;;;;39829:136:0;39975:12;40103:6;-1:-1:-1;;;;;40103:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40095:26;;40072:6;-1:-1:-1;;;;;40072:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40060:30;;40064:26;;40060:2;:30;:::i;:::-;39991:52;40028:14;-1:-1:-1;;;;;39991:13:0;;:52;:::i;:::-;:100;;;;:::i;:::-;39990:131;;;;:::i;:::-;39975:146;-1:-1:-1;40140:20:0;-1:-1:-1;;;;;40147:13:0;;39975:146;40140:20;:::i;:::-;40132:29;;;;;;;;;39256:913;:::o;47637:118::-;20641:6;;-1:-1:-1;;;;;20641:6:0;6993:10;20788:23;20780:68;;;;-1:-1:-1;;;20780:68:0;;;;;;;:::i;:::-;47731:15:::1;:3:::0;47739:6:::1;47731:7;:15::i;:::-;47707:14;:40:::0;-1:-1:-1;47637:118:0:o;30621:380::-;-1:-1:-1;;;;;30757:19:0;;30749:68;;;;-1:-1:-1;;;30749:68:0;;14132:2:1;30749:68:0;;;14114:21:1;14171:2;14151:18;;;14144:30;14210:34;14190:18;;;14183:62;-1:-1:-1;;;14261:18:1;;;14254:34;14305:19;;30749:68:0;13930:400:1;30749:68:0;-1:-1:-1;;;;;30836:21:0;;30828:68;;;;-1:-1:-1;;;30828:68:0;;14537:2:1;30828:68:0;;;14519:21:1;14576:2;14556:18;;;14549:30;14615:34;14595:18;;;14588:62;-1:-1:-1;;;14666:18:1;;;14659:32;14708:19;;30828:68:0;14335:398:1;30828:68:0;-1:-1:-1;;;;;30909:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30961:32;;160:25:1;;;30961:32:0;;133:18:1;30961:32:0;;;;;;;30621:380;;;:::o;31292:502::-;31427:24;31454:25;31464:5;31471:7;31454:9;:25::i;:::-;31427:52;;-1:-1:-1;;31494:16:0;:37;31490:297;;31594:6;31574:16;:26;;31548:117;;;;-1:-1:-1;;;31548:117:0;;14940:2:1;31548:117:0;;;14922:21:1;14979:2;14959:18;;;14952:30;15018:31;14998:18;;;14991:59;15067:18;;31548:117:0;14738:353:1;31548:117:0;31709:51;31718:5;31725:7;31753:6;31734:16;:25;31709:8;:51::i;:::-;31416:378;31292:502;;;:::o;43453:2369::-;-1:-1:-1;;;;;43601:25:0;;43577:21;43601:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;43630:23:0;;;;;;:19;:23;;;;;;;;43601:52;43577:76;-1:-1:-1;;;;;;43674:18:0;;43666:68;;;;-1:-1:-1;;;43666:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43753:16:0;;43745:64;;;;-1:-1:-1;;;43745:64:0;;;;;;;:::i;:::-;43826:6;43836:1;43826:11;43822:93;;43854:28;43870:4;43876:2;43880:1;43854:15;:28::i;43822:93::-;43948:14;;43927:10;;-1:-1:-1;;;;;43940:22:0;;;43948:14;;43940:22;:75;;;;-1:-1:-1;;;;;;43980:35:0;;;;;;:31;:35;;;;;;;;43979:36;43940:75;44046:14;;43927:88;;-1:-1:-1;44026:11:0;;-1:-1:-1;;;;;44040:20:0;;;44046:14;;44040:20;:75;;;;-1:-1:-1;;;;;;44078:37:0;;;;;;:31;:37;;;;;;;;44077:38;44040:75;44026:89;;44126:20;44157:7;20641:6;;-1:-1:-1;;;;;20641:6:0;;20568:87;44157:7;-1:-1:-1;;;;;44149:15:0;:4;-1:-1:-1;;;;;44149:15:0;;:32;;;-1:-1:-1;20641:6:0;;-1:-1:-1;;;;;44168:13:0;;;20641:6;;44168:13;44149:32;44126:55;-1:-1:-1;44192:12:0;-1:-1:-1;;;;;44207:16:0;;;;:41;;-1:-1:-1;;;;;;44227:21:0;;44241:6;44227:21;44207:41;44192:56;;44259:21;44283:15;:26;;;;44302:7;44283:26;:43;;;-1:-1:-1;44313:13:0;;-1:-1:-1;;;44313:13:0;;;;44283:43;44351:15;;44259:67;;-1:-1:-1;44351:15:0;;:36;;;;;44371:16;44370:17;44351:36;44347:856;;;44430:14;;;;;;;;:34;;;44448:16;44430:34;44404:118;;;;-1:-1:-1;;;44404:118:0;;16108:2:1;44404:118:0;;;16090:21:1;16147:2;16127:18;;;16120:30;-1:-1:-1;;;16166:18:1;;;16159:52;16228:18;;44404:118:0;15906:346:1;44404:118:0;44541:5;44537:655;;;44607:21;;44597:6;:31;;44567:158;;;;-1:-1:-1;;;44567:158:0;;16459:2:1;44567:158:0;;;16441:21:1;16498:2;16478:18;;;16471:30;16537:34;16517:18;;;16510:62;-1:-1:-1;;;16588:18:1;;;16581:51;16649:19;;44567:158:0;16257:417:1;44567:158:0;44800:10;;44783:13;44793:2;44783:9;:13::i;:::-;44774:22;;:6;:22;:::i;:::-;:36;;44744:129;;;;-1:-1:-1;;;44744:129:0;;16881:2:1;44744:129:0;;;16863:21:1;16920:2;16900:18;;;16893:30;-1:-1:-1;;;16939:18:1;;;16932:49;16998:18;;44744:129:0;16679:343:1;44744:129:0;44537:655;;;-1:-1:-1;;;;;44918:35:0;;;;;;:31;:35;;;;;;;;44917:36;:95;;;;-1:-1:-1;;;;;;44975:37:0;;;;;;:31;:37;;;;;;;;44974:38;44917:95;44895:297;;;45103:10;;45086:13;45096:2;45086:9;:13::i;:::-;45077:22;;:6;:22;:::i;:::-;:36;;45047:129;;;;-1:-1:-1;;;45047:129:0;;16881:2:1;45047:129:0;;;16863:21:1;16920:2;16900:18;;;16893:30;-1:-1:-1;;;16939:18:1;;;16932:49;16998:18;;45047:129:0;16679:343:1;45047:129:0;45220:13;;-1:-1:-1;;;45220:13:0;;;;45219:14;:63;;;;-1:-1:-1;;;;;;45251:31:0;;;;;;:25;:31;;;;;;;;45250:32;45219:63;:106;;;;-1:-1:-1;;;;;;45300:25:0;;;;;;:19;:25;;;;;;;;45299:26;45219:106;:147;;;;-1:-1:-1;;;;;;45343:23:0;;;;;;:19;:23;;;;;;;;45342:24;45219:147;45215:540;;;45383:28;45414:24;45432:4;45414:9;:24::i;:::-;45492:19;;45383:55;;-1:-1:-1;45468:43:0;;;45530:21;:19;:21::i;:::-;:49;;;;;45572:7;45530:49;:88;;;;;45602:16;45601:17;45530:88;45526:218;;;45639:13;:20;;-1:-1:-1;;;;45639:20:0;-1:-1:-1;;;45639:20:0;;;45678:10;:8;:10::i;:::-;45707:13;:21;;-1:-1:-1;;;;45707:21:0;;;45526:218;45368:387;;45215:540;45767:47;45782:4;45788:2;45792:6;45800;45808:5;45767:14;:47::i;:::-;43566:2256;;;;;;43453:2369;;;:::o;48466:479::-;48557:16;;;48571:1;48557:16;;;;;;;;48533:21;;48557:16;;;;;;;;;;-1:-1:-1;48557:16:0;48533:40;;48602:4;48584;48589:1;48584:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48584:23:0;;;:7;;;;;;;;;;:23;;;;48628:16;;:23;;;-1:-1:-1;;;48628:23:0;;;;:16;;;;;:21;;:23;;;;;48584:7;;48628:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48618:4;48623:1;48618:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48618:33:0;;;:7;;;;;;;;;:33;48696:16;;48664:63;;48681:4;;48696:16;48715:11;48664:8;:63::i;:::-;48740:16;;:197;;-1:-1:-1;;;48740:197:0;;-1:-1:-1;;;;;48740:16:0;;;;:67;;:197;;48822:11;;48740:16;;48864:4;;48891;;48911:15;;48740:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48522:423;48466:479;:::o;21875:191::-;21968:6;;;-1:-1:-1;;;;;21985:17:0;;;-1:-1:-1;;;;;;21985:17:0;;;;;;;22018:40;;21968:6;;;21985:17;21968:6;;22018:40;;21949:16;;22018:40;21938:128;21875:191;:::o;38753:235::-;-1:-1:-1;;;;;38836:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;38836:39:0;;;;;;;38886:38;38836:31;:39;38886:25;:38::i;3453:98::-;3511:7;3538:5;3542:1;3538;:5;:::i;:::-;3531:12;3453:98;-1:-1:-1;;;3453:98:0:o;33726:708::-;-1:-1:-1;;;;;33857:18:0;;33849:68;;;;-1:-1:-1;;;33849:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33936:16:0;;33928:64;;;;-1:-1:-1;;;33928:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34078:15:0;;34056:19;34078:15;;;;;;;;;;;34126:21;;;;34104:109;;;;-1:-1:-1;;;34104:109:0;;18346:2:1;34104:109:0;;;18328:21:1;18385:2;18365:18;;;18358:30;18424:34;18404:18;;;18397:62;-1:-1:-1;;;18475:18:1;;;18468:36;18521:19;;34104:109:0;18144:402:1;34104:109:0;-1:-1:-1;;;;;34249:15:0;;;:9;:15;;;;;;;;;;;34267:20;;;34249:38;;34309:13;;;;;;;;:23;;34281:6;;34249:9;34309:23;;34281:6;;34309:23;:::i;:::-;;;;;;;;34365:2;-1:-1:-1;;;;;34350:26:0;34359:4;-1:-1:-1;;;;;34350:26:0;;34369:6;34350:26;;;;160:25:1;;148:2;133:18;;14:177;34350:26:0;;;;;;;;34389:37;42487:410;39126:122;39180:4;39224:1;39204:17;:15;:17::i;:::-;:21;:36;;-1:-1:-1;39235:5:0;;39126:122::o;39204:36::-;-1:-1:-1;39228:4:0;;39126:122::o;48953:1794::-;48992:23;49018:24;49036:4;49018:9;:24::i;:::-;48992:50;;49053:25;49139:21;;49103:19;;49081;;:41;;;;:::i;:::-;:79;;;;:::i;:::-;49053:107;-1:-1:-1;49175:20:0;;;:46;;-1:-1:-1;49199:22:0;;49175:46;49171:59;;;49223:7;;48953:1794::o;49171:59::-;49262:19;;49244:15;:37;49240:107;;;49316:19;;49298:37;;49240:107;49357:23;49471:1;49438:17;49402:19;;49384:15;:37;;;;:::i;:::-;49383:72;;;;:::i;:::-;:89;;;;:::i;:::-;49357:115;-1:-1:-1;49483:26:0;49512:36;:15;49357:115;49512:19;:36::i;:::-;49483:65;-1:-1:-1;49587:21:0;49619:37;49483:65;49619:17;:37::i;:::-;49667:18;49688:44;:21;49714:17;49688:25;:44::i;:::-;49667:65;;49743:23;49769:82;49823:17;49769:35;49784:19;;49769:10;:14;;:35;;;;:::i;:::-;:39;;:82::i;:::-;49743:108;;49862:25;49890:84;49946:17;49890:37;49905:21;;49890:10;:14;;:37;;;;:::i;:84::-;49862:112;-1:-1:-1;49985:23:0;49862:112;50011:28;50024:15;50011:10;:28;:::i;:::-;:48;;;;:::i;:::-;49985:74;;50094:1;50076:15;:19;:42;;;;;50117:1;50099:15;:19;50076:42;50072:280;;;50135:47;50149:15;50166;50135:13;:47::i;:::-;50306:19;;50202:138;;;18753:25:1;;;18809:2;18794:18;;18787:34;;;18837:18;;;18830:34;;;;50202:138:0;;;;;;18741:2:1;50202:138:0;;;50072:280;50386:1;50364:19;:23;;;50398:19;:23;;;50432:21;:25;;;50510:15;;50502:57;;-1:-1:-1;;;;;50510:15:0;;;;50539;;50386:1;50502:57;50386:1;50502:57;50539:15;50510;50502:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50470:89;;;50578:20;50570:29;;;;;;50652:9;;50644:53;;50611:27;;-1:-1:-1;;;;;50652:9:0;;50675:17;;50611:27;50644:53;50611:27;50644:53;50675:17;50652:9;50644:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50610:87;;;50716:22;50708:31;;;;;;48981:1766;;;;;;;;;;;48953:1794::o;45830:1491::-;45992:19;46014:26;46031:4;46037:2;46014:16;:26::i;:::-;-1:-1:-1;;;;;46074:25:0;;46053:18;46074:25;;;:19;:25;;;;;;45992:48;;-1:-1:-1;46053:18:0;46074:25;;:48;;;;-1:-1:-1;;;;;;46103:19:0;;46117:4;46103:19;46074:48;46053:69;;46139:13;46135:1135;;;46169:13;46212:10;;46198:11;;46185:10;;:24;;;;:::i;:::-;:37;;;;:::i;:::-;46169:53;-1:-1:-1;46237:12:0;46253:26;46275:3;46253:17;:6;46169:53;46253:10;:17::i;:26::-;46237:42;-1:-1:-1;46299:8:0;;46296:110;;46327:20;;46311:92;;-1:-1:-1;;;;;46327:20:0;46357:4;46398;46364:31;46327:20;46364:9;:31::i;:::-;:38;;;;:::i;:::-;46311:15;:92::i;:::-;46422:14;46432:4;46422:14;;:::i;:::-;;;46154:294;;46135:1135;;;46458:14;46454:816;;;46505:10;;46550:13;;46578:137;;;;46630:11;;46617:10;;:24;;;;:::i;:::-;46609:32;;46688:11;;46672:13;;:27;;;;:::i;:::-;46660:39;;46578:137;46733:5;46729:134;;;46780:10;;46767;;:23;;;;:::i;:::-;46759:31;;46837:10;;46821:13;;:26;;;;:::i;:::-;46809:38;;46729:134;46877:12;46892:26;46914:3;46892:17;:6;46903:5;46892:10;:17::i;:26::-;46877:41;;46981:5;46964:13;;46957:4;:20;;;;:::i;:::-;46956:30;;;;:::i;:::-;46933:19;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;47045:5:0;;-1:-1:-1;47025:16:0;47032:9;47025:4;:16;:::i;:::-;47024:26;;;;:::i;:::-;47001:19;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;47098:15:0;;47117:5;;47091:22;;:4;:22;:::i;:::-;47090:32;;;;:::i;:::-;47065:21;;:57;;;;;;;:::i;:::-;;;;-1:-1:-1;;47143:8:0;;47139:91;;47172:42;47188:4;47202;47209;47172:15;:42::i;:::-;47244:14;47254:4;47244:14;;:::i;:::-;;;46474:796;;;46454:816;47280:33;47296:4;47302:2;47306:6;47280:15;:33::i;:::-;45981:1340;;45830:1491;;;;;:::o;3096:98::-;3154:7;3181:5;3185:1;3181;:5;:::i;3852:98::-;3910:7;3937:5;3941:1;3937;:5;:::i;50792:363::-;50906:16;;50874:63;;50891:4;;-1:-1:-1;;;;;50906:16:0;50925:11;50874:8;:63::i;:::-;50948:16;;-1:-1:-1;;;;;50948:16:0;:32;50988:9;51021:4;51041:11;50948:16;;51099:7;20641:6;;-1:-1:-1;;;;;20641:6:0;;20568:87;51099:7;50948:199;;;;;;-1:-1:-1;;;;;;50948:199:0;;;-1:-1:-1;;;;;19234:15:1;;;50948:199:0;;;19216:34:1;19266:18;;;19259:34;;;;19309:18;;;19302:34;;;;19352:18;;;19345:34;19416:15;;;19395:19;;;19388:44;51121:15:0;19448:19:1;;;19441:35;19150:19;;50948:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50792:363;;:::o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:316::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;-1:-1:-1;;1767:23:1;;;1837:2;1822:18;;1809:32;;-1:-1:-1;1888:2:1;1873:18;;;1860:32;;1582:316;-1:-1:-1;1582:316:1:o;1903:456::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2104:9;2091:23;2123:31;2148:5;2123:31;:::i;:::-;2173:5;-1:-1:-1;2230:2:1;2215:18;;2202:32;2243:33;2202:32;2243:33;:::i;:::-;1903:456;;2295:7;;-1:-1:-1;;;2349:2:1;2334:18;;;;2321:32;;1903:456::o;2553:160::-;2618:20;;2674:13;;2667:21;2657:32;;2647:60;;2703:1;2700;2693:12;2718:180;2774:6;2827:2;2815:9;2806:7;2802:23;2798:32;2795:52;;;2843:1;2840;2833:12;2795:52;2866:26;2882:9;2866:26;:::i;2903:247::-;2962:6;3015:2;3003:9;2994:7;2990:23;2986:32;2983:52;;;3031:1;3028;3021:12;2983:52;3070:9;3057:23;3089:31;3114:5;3089:31;:::i;3390:315::-;3455:6;3463;3516:2;3504:9;3495:7;3491:23;3487:32;3484:52;;;3532:1;3529;3522:12;3484:52;3571:9;3558:23;3590:31;3615:5;3590:31;:::i;:::-;3640:5;-1:-1:-1;3664:35:1;3695:2;3680:18;;3664:35;:::i;:::-;3654:45;;3390:315;;;;;:::o;4439:388::-;4507:6;4515;4568:2;4556:9;4547:7;4543:23;4539:32;4536:52;;;4584:1;4581;4574:12;4536:52;4623:9;4610:23;4642:31;4667:5;4642:31;:::i;:::-;4692:5;-1:-1:-1;4749:2:1;4734:18;;4721:32;4762:33;4721:32;4762:33;:::i;:::-;4814:7;4804:17;;;4439:388;;;;;:::o;4964:736::-;5050:6;5103:2;5091:9;5082:7;5078:23;5074:32;5071:52;;;5119:1;5116;5109:12;5071:52;5152:2;5146:9;5194:2;5186:6;5182:15;5263:6;5251:10;5248:22;5227:18;5215:10;5212:34;5209:62;5206:185;;;5313:10;5308:3;5304:20;5301:1;5294:31;5348:4;5345:1;5338:15;5376:4;5373:1;5366:15;5206:185;5407:2;5400:22;5446:23;;5431:39;;5520:2;5505:18;;5492:32;5533:31;5492:32;5533:31;:::i;:::-;5592:2;5580:15;;5573:30;5664:2;5649:18;;;5636:32;5619:15;;;5612:57;;;;-1:-1:-1;5584:6:1;4964:736;-1:-1:-1;4964:736:1:o;5705:380::-;5784:1;5780:12;;;;5827;;;5848:61;;5902:4;5894:6;5890:17;5880:27;;5848:61;5955:2;5947:6;5944:14;5924:18;5921:38;5918:161;;6001:10;5996:3;5992:20;5989:1;5982:31;6036:4;6033:1;6026:15;6064:4;6061:1;6054:15;5918:161;;5705:380;;;:::o;6090:356::-;6292:2;6274:21;;;6311:18;;;6304:30;6370:34;6365:2;6350:18;;6343:62;6437:2;6422:18;;6090:356::o;6451:127::-;6512:10;6507:3;6503:20;6500:1;6493:31;6543:4;6540:1;6533:15;6567:4;6564:1;6557:15;6583:168;6656:9;;;6687;;6704:15;;;6698:22;;6684:37;6674:71;;6725:18;;:::i;6756:217::-;6796:1;6822;6812:132;;6866:10;6861:3;6857:20;6854:1;6847:31;6901:4;6898:1;6891:15;6929:4;6926:1;6919:15;6812:132;-1:-1:-1;6958:9:1;;6756:217::o;7394:125::-;7459:9;;;7480:10;;;7477:36;;;7493:18;;:::i;8092:179::-;8170:13;;8223:22;8212:34;;8202:45;;8192:73;;8261:1;8258;8251:12;8276:473;8379:6;8387;8395;8403;8411;8464:3;8452:9;8443:7;8439:23;8435:33;8432:53;;;8481:1;8478;8471:12;8432:53;8504:39;8533:9;8504:39;:::i;:::-;8494:49;;8583:2;8572:9;8568:18;8562:25;8552:35;;8627:2;8616:9;8612:18;8606:25;8596:35;;8671:2;8660:9;8656:18;8650:25;8640:35;;8694:49;8738:3;8727:9;8723:19;8694:49;:::i;:::-;8684:59;;8276:473;;;;;;;;:::o;11241:251::-;11311:6;11364:2;11352:9;11343:7;11339:23;11335:32;11332:52;;;11380:1;11377;11370:12;11332:52;11412:9;11406:16;11431:31;11456:5;11431:31;:::i;11497:128::-;11564:9;;;11585:11;;;11582:37;;;11599:18;;:::i;11630:188::-;11709:13;;-1:-1:-1;;;;;11751:42:1;;11741:53;;11731:81;;11808:1;11805;11798:12;11823:450;11910:6;11918;11926;11979:2;11967:9;11958:7;11954:23;11950:32;11947:52;;;11995:1;11992;11985:12;11947:52;12018:40;12048:9;12018:40;:::i;:::-;12008:50;;12077:49;12122:2;12111:9;12107:18;12077:49;:::i;:::-;12067:59;;12169:2;12158:9;12154:18;12148:25;12213:10;12206:5;12202:22;12195:5;12192:33;12182:61;;12239:1;12236;12229:12;12182:61;12262:5;12252:15;;;11823:450;;;;;:::o;12278:273::-;12346:6;12399:2;12387:9;12378:7;12374:23;12370:32;12367:52;;;12415:1;12412;12405:12;12367:52;12447:9;12441:16;12497:4;12490:5;12486:16;12479:5;12476:27;12466:55;;12517:1;12514;12507:12;12556:422;12645:1;12688:5;12645:1;12702:270;12723:7;12713:8;12710:21;12702:270;;;12782:4;12778:1;12774:6;12770:17;12764:4;12761:27;12758:53;;;12791:18;;:::i;:::-;12841:7;12831:8;12827:22;12824:55;;;12861:16;;;;12824:55;12940:22;;;;12900:15;;;;12702:270;;;12706:3;12556:422;;;;;:::o;12983:806::-;13032:5;13062:8;13052:80;;-1:-1:-1;13103:1:1;13117:5;;13052:80;13151:4;13141:76;;-1:-1:-1;13188:1:1;13202:5;;13141:76;13233:4;13251:1;13246:59;;;;13319:1;13314:130;;;;13226:218;;13246:59;13276:1;13267:10;;13290:5;;;13314:130;13351:3;13341:8;13338:17;13335:43;;;13358:18;;:::i;:::-;-1:-1:-1;;13414:1:1;13400:16;;13429:5;;13226:218;;13528:2;13518:8;13515:16;13509:3;13503:4;13500:13;13496:36;13490:2;13480:8;13477:16;13472:2;13466:4;13463:12;13459:35;13456:77;13453:159;;;-1:-1:-1;13565:19:1;;;13597:5;;13453:159;13644:34;13669:8;13663:4;13644:34;:::i;:::-;13714:6;13710:1;13706:6;13702:19;13693:7;13690:32;13687:58;;;13725:18;;:::i;:::-;13763:20;;12983:806;-1:-1:-1;;;12983:806:1:o;13794:131::-;13854:5;13883:36;13910:8;13904:4;13883:36;:::i;15096:401::-;15298:2;15280:21;;;15337:2;15317:18;;;15310:30;15376:34;15371:2;15356:18;;15349:62;-1:-1:-1;;;15442:2:1;15427:18;;15420:35;15487:3;15472:19;;15096:401::o;15502:399::-;15704:2;15686:21;;;15743:2;15723:18;;;15716:30;15782:34;15777:2;15762:18;;15755:62;-1:-1:-1;;;15848:2:1;15833:18;;15826:33;15891:3;15876:19;;15502:399::o;17027:127::-;17088:10;17083:3;17079:20;17076:1;17069:31;17119:4;17116:1;17109:15;17143:4;17140:1;17133:15;17159:980;17421:4;17469:3;17458:9;17454:19;17500:6;17489:9;17482:25;17526:2;17564:6;17559:2;17548:9;17544:18;17537:34;17607:3;17602:2;17591:9;17587:18;17580:31;17631:6;17666;17660:13;17697:6;17689;17682:22;17735:3;17724:9;17720:19;17713:26;;17774:2;17766:6;17762:15;17748:29;;17795:1;17805:195;17819:6;17816:1;17813:13;17805:195;;;17884:13;;-1:-1:-1;;;;;17880:39:1;17868:52;;17975:15;;;;17940:12;;;;17916:1;17834:9;17805:195;;;-1:-1:-1;;;;;;;18056:32:1;;;;18051:2;18036:18;;18029:60;-1:-1:-1;;;18120:3:1;18105:19;18098:35;18017:3;17159:980;-1:-1:-1;;;17159:980:1:o;19487:306::-;19575:6;19583;19591;19644:2;19632:9;19623:7;19619:23;19615:32;19612:52;;;19660:1;19657;19650:12;19612:52;19689:9;19683:16;19673:26;;19739:2;19728:9;19724:18;19718:25;19708:35;;19783:2;19772:9;19768:18;19762:25;19752:35;;19487:306;;;;;:::o

Swarm Source

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