ETH Price: $2,273.94 (-3.80%)
Gas: 6.34 Gwei

Token

Ryu (RYU)
 

Overview

Max Total Supply

100,000,000 RYU

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 RYU

Value
$0.00
0x44209d34292a77da647b525221000358aa389db0
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:
Ryu

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.15;


/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. 
 *
 * This contract is only required for intermediate, library-like contracts.
 */

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

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

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

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

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

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

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

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

    bool public swapAndLiquifyEnabled = true;
    bool private inSwapAndLiquify;


    bool public cooldownEnabled = true;
    uint256 public cooldownTimerInterval = 60 seconds;
    mapping (address => uint) private cooldownTimer;
    mapping (address => bool) public isTimelockExempt;

    uint256 public maxTransactionAmount = 1000000 * (10**18);
    uint256 public swapTokensAtAmount = 30000 * (10**18);
    uint256 public maxWalletToken = 2000000 * (10**18); 

    uint256 public liquidityFee = 2;
    uint256 public marketingFee = 3;
    address payable public marketingWallet = payable(0xD81e7DC0B52C263Aa2234923864c63755950DB34);

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

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

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

    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapETHForTokens(uint256 amountIn, address[] path);
    event ExcludeFromFees(address indexed account, bool isExcluded);

    constructor() ERC20("Ryu", "RYU") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // uniswap v2 router address
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        // exclude from paying fees and max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);

        isTimelockExempt[owner()] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[0x000000000000000000000000000000000000dEaD] = true;
        
        /*
          an internal function that is only called here, and CANNOT be called ever again
        */
        _createSupply(owner(), 100000000 * (10**18));
    }

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

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

        if(cooldownEnabled && from == uniswapV2Pair && !isTimelockExempt[from]){
            require(cooldownTimer[from] < block.timestamp, "Please wait for cooldown between buys");
            cooldownTimer[from] = block.timestamp + cooldownTimerInterval;
        }

        bool excludedAccount = _isExcludedFromFees[from] || _isExcludedFromFees[to];

         if(!excludedAccount){
            require(amount <= maxTransactionAmount, "amount exceeds the maxTransactionAmount.");
        }
        
        if (from == uniswapV2Pair && !excludedAccount) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }
        
    	uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;
       
        if(overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled) {
            contractTokenBalance = swapTokensAtAmount;
            swapAndLiquify(contractTokenBalance);

        }

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!excludedAccount) {
            uint256 fees;
            if(from == uniswapV2Pair || to == uniswapV2Pair) {
              fees  = amount.mul(liquidityFee.add(marketingFee)).div(100);
            }

        	amount = amount.sub(fees);
            super._transfer(from, address(this), fees); 
        }

        super._transfer(from, to, amount);

    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 tokensForLiquidity = contractTokenBalance.mul(liquidityFee).div(liquidityFee.add(marketingFee));
        // split the Liquidity token balance into halves
        uint256 half = tokensForLiquidity.div(2);
        uint256 otherHalf = tokensForLiquidity.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        // swap and Send eth to team wallet
        swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity));
        marketingWallet.transfer(address(this).balance);
        
        emit SwapAndLiquify(half, newBalance); 
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

    function setMaxTxAmount(uint256 _maxTx) public onlyOwner {
        maxTransactionAmount = _maxTx;
        require(maxTransactionAmount >= totalSupply().div(100), "value is too low");
    }

    function setFee(uint256 _liquidityFee, uint256 _marketingFee) public onlyOwner {
        require(_liquidityFee.add(_marketingFee) <= 5, "tax too hugh");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
    }

    function setMaxWalletToken(uint256 _maxToken) external onlyOwner {
  	    maxWalletToken = _maxToken;
        require(maxWalletToken >= totalSupply().div(100), "value is too low");
  	}

    function setSwapTokensAtAmouunt(uint256 _newAmount) public onlyOwner {
        swapTokensAtAmount = _newAmount;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

     function setIsTimelockExempt(address holder, bool _trueFalse) external onlyOwner {
        isTimelockExempt[holder] = _trueFalse;
    }

    // enable cooldown between trades
    function changeCooldownSettings(bool newStatus, uint256 newInterval) external onlyOwner {
        cooldownEnabled = newStatus;
        cooldownTimerInterval = newInterval;
    }

     receive() external payable {

    }
  
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"},{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"changeCooldownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTimelockExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"_trueFalse","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxToken","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmouunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600560146101000a81548160ff0219169083151502179055506001600560166101000a81548160ff021916908315150217905550603c60065569d3c21bcecceda100000060095569065a4da25d3016c00000600a556a01a784379d99db42000000600b556002600c556003600d5573d81e7dc0b52c263aa2234923864c63755950db34600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d657600080fd5b506040518060400160405280600381526020017f52797500000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5259550000000000000000000000000000000000000000000000000000000000815250816003908162000154919062000bfa565b50806004908162000166919062000bfa565b505050620001896200017d6200053760201b60201c565b6200053f60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000d4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a4919062000d4b565b6040518363ffffffff1660e01b8152600401620002c392919062000d8e565b6020604051808303816000875af1158015620002e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000309919062000d4b565b905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003a2620003946200060560201b60201c565b60016200062f60201b60201c565b620003d7600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200062f60201b60201c565b620003ea3060016200062f60201b60201c565b600160086000620004006200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200052f620005176200060560201b60201c565b6a52b7d2dcc80cd2e4000000620007fe60201b60201c565b50506200103c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200063f6200053760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006656200060560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b59062000e1c565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062000eb4565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f2919062000ef3565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008679062000f60565b60405180910390fd5b62000884600083836200097660201b60201c565b806002600082825462000898919062000fb1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008ef919062000fb1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200095691906200101f565b60405180910390a362000972600083836200097b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a0257607f821691505b60208210810362000a185762000a17620009ba565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a43565b62000a8e868362000a43565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000adb62000ad562000acf8462000aa6565b62000ab0565b62000aa6565b9050919050565b6000819050919050565b62000af78362000aba565b62000b0f62000b068262000ae2565b84845462000a50565b825550505050565b600090565b62000b2662000b17565b62000b3381848462000aec565b505050565b5b8181101562000b5b5762000b4f60008262000b1c565b60018101905062000b39565b5050565b601f82111562000baa5762000b748162000a1e565b62000b7f8462000a33565b8101602085101562000b8f578190505b62000ba762000b9e8562000a33565b83018262000b38565b50505b505050565b600082821c905092915050565b600062000bcf6000198460080262000baf565b1980831691505092915050565b600062000bea838362000bbc565b9150826002028217905092915050565b62000c058262000980565b67ffffffffffffffff81111562000c215762000c206200098b565b5b62000c2d8254620009e9565b62000c3a82828562000b5f565b600060209050601f83116001811462000c72576000841562000c5d578287015190505b62000c69858262000bdc565b86555062000cd9565b601f19841662000c828662000a1e565b60005b8281101562000cac5784890151825560018201915060208501945060208101905062000c85565b8683101562000ccc578489015162000cc8601f89168262000bbc565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d138262000ce6565b9050919050565b62000d258162000d06565b811462000d3157600080fd5b50565b60008151905062000d458162000d1a565b92915050565b60006020828403121562000d645762000d6362000ce1565b5b600062000d748482850162000d34565b91505092915050565b62000d888162000d06565b82525050565b600060408201905062000da5600083018562000d7d565b62000db4602083018462000d7d565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0460208362000dbb565b915062000e118262000dcc565b602082019050919050565b6000602082019050818103600083015262000e378162000df5565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062000e9c602a8362000dbb565b915062000ea98262000e3e565b604082019050919050565b6000602082019050818103600083015262000ecf8162000e8d565b9050919050565b60008115159050919050565b62000eed8162000ed6565b82525050565b600060208201905062000f0a600083018462000ee2565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f48601f8362000dbb565b915062000f558262000f10565b602082019050919050565b6000602082019050818103600083015262000f7b8162000f39565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fbe8262000aa6565b915062000fcb8362000aa6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001003576200100262000f82565b5b828201905092915050565b620010198162000aa6565b82525050565b60006020820190506200103660008301846200100e565b92915050565b6080516139bf6200107b60003960008181610ba101528181611a2f01528181611c9d01528181611d9201528181611e150152611e6a01526139bf6000f3fe6080604052600436106102085760003560e01c8063722b62ad11610118578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e1461078c578063e2f45605146107c9578063e6c75f71146107f4578063ec28438a1461081f578063f2fde38b146108485761020f565b8063a985ceef146106e4578063c02466681461070f578063c49b9a8014610738578063c8c8ebe4146107615761020f565b806391d55f41116100e757806391d55f41146105eb57806395d89b411461061457806398118cb41461063f578063a457c2d71461066a578063a9059cbb146106a75761020f565b8063722b62ad14610541578063750c11b61461056c57806375f0a874146105955780638da5cb5b146105c05761020f565b806349bd5a5e1161019b57806350db71fb1161016a57806350db71fb1461047057806352f7c988146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b806349bd5a5e146103a05780634a74bb02146103cb5780634fbee193146103f657806350af449e146104335761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630d45c0e31461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610871565b604051610236919061283d565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128f8565b610903565b6040516102739190612953565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061299a565b610921565b005b3480156102b157600080fd5b506102ba6109c2565b6040516102c79190612a39565b60405180910390f35b3480156102dc57600080fd5b506102e56109e8565b6040516102f29190612a63565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612a7e565b6109f2565b60405161032f9190612953565b60405180910390f35b34801561034457600080fd5b5061034d610aea565b60405161035a9190612aed565b60405180910390f35b34801561036f57600080fd5b5061038a600480360381019061038591906128f8565b610af3565b6040516103979190612953565b60405180910390f35b3480156103ac57600080fd5b506103b5610b9f565b6040516103c29190612b17565b60405180910390f35b3480156103d757600080fd5b506103e0610bc3565b6040516103ed9190612953565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612b32565b610bd6565b60405161042a9190612953565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612b32565b610c2c565b6040516104679190612953565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b5f565b610c4c565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9f565b610d23565b005b3480156104ce57600080fd5b506104d7610e07565b6040516104e49190612a63565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612b32565b610e0d565b6040516105219190612a63565b60405180910390f35b34801561053657600080fd5b5061053f610e55565b005b34801561054d57600080fd5b50610556610edd565b6040516105639190612a63565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612bdf565b610ee3565b005b3480156105a157600080fd5b506105aa610f69565b6040516105b79190612c2d565b60405180910390f35b3480156105cc57600080fd5b506105d5610f8f565b6040516105e29190612b17565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612bdf565b610fb9565b005b34801561062057600080fd5b5061062961109e565b604051610636919061283d565b60405180910390f35b34801561064b57600080fd5b50610654611130565b6040516106619190612a63565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906128f8565b611136565b60405161069e9190612953565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906128f8565b611221565b6040516106db9190612953565b60405180910390f35b3480156106f057600080fd5b506106f961123f565b6040516107069190612953565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612b5f565b611252565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612c48565b611409565b005b34801561076d57600080fd5b506107766114d9565b6040516107839190612a63565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612c75565b6114df565b6040516107c09190612a63565b60405180910390f35b3480156107d557600080fd5b506107de611566565b6040516107eb9190612a63565b60405180910390f35b34801561080057600080fd5b5061080961156c565b6040516108169190612a63565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190612bdf565b611572565b005b34801561085457600080fd5b5061086f600480360381019061086a9190612b32565b611657565b005b60606003805461088090612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90612ce4565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061091761091061174e565b8484611756565b6001905092915050565b61092961174e565b73ffffffffffffffffffffffffffffffffffffffff16610947610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490612d61565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109ff84848461191f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4a61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612df3565b60405180910390fd5b610ade85610ad661174e565b858403611756565b60019150509392505050565b60006012905090565b6000610b95610b0061174e565b848460016000610b0e61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b909190612e42565b611756565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600560149054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610c5461174e565b73ffffffffffffffffffffffffffffffffffffffff16610c72610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612d61565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d2b61174e565b73ffffffffffffffffffffffffffffffffffffffff16610d49610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690612d61565b60405180910390fd5b6005610db48284611f3290919063ffffffff16565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612ee4565b60405180910390fd5b81600c8190555080600d819055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5d61174e565b73ffffffffffffffffffffffffffffffffffffffff16610e7b610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612d61565b60405180910390fd5b610edb6000611f48565b565b60065481565b610eeb61174e565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690612d61565b60405180910390fd5b80600a8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc161174e565b73ffffffffffffffffffffffffffffffffffffffff16610fdf610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90612d61565b60405180910390fd5b80600b8190555061105760646110496109e8565b61200e90919063ffffffff16565b600b54101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612f50565b60405180910390fd5b50565b6060600480546110ad90612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990612ce4565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600c5481565b6000806001600061114561174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612fe2565b60405180910390fd5b61121661120d61174e565b85858403611756565b600191505092915050565b600061123561122e61174e565b848461191f565b6001905092915050565b600560169054906101000a900460ff1681565b61125a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611278610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612d61565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613074565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113fd9190612953565b60405180910390a25050565b61141161174e565b73ffffffffffffffffffffffffffffffffffffffff1661142f610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612d61565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114ce9190612953565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600b5481565b61157a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611598610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590612d61565b60405180910390fd5b8060098190555061161060646116026109e8565b61200e90919063ffffffff16565b6009541015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90612f50565b60405180910390fd5b50565b61165f61174e565b73ffffffffffffffffffffffffffffffffffffffff1661167d610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612d61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613106565b60405180910390fd5b61174b81611f48565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90613198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061322a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119129190612a63565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061334e565b60405180910390fd5b60008103611a1657611a1183836000612024565b611f2d565b600560169054906101000a900460ff168015611a7d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611ad35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bab5742600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906133e0565b60405180910390fd5b60065442611b679190612e42565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c4e5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611c9b57600954821115611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190613472565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cf4575080155b15611d58576000611d0484610e0d565b9050600b548382611d159190612e42565b1115611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613504565b60405180910390fd5b505b6000611d6330610e0d565b90506000600a548210159050808015611d895750600560159054906101000a900460ff16155b8015611de057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611df85750600560149054906101000a900460ff165b15611e0c57600a549150611e0b826122a3565b5b82611f1e5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611eb857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611efc57611ef96064611eeb611edc600d54600c54611f3290919063ffffffff16565b8861243d90919063ffffffff16565b61200e90919063ffffffff16565b90505b611f0f818661245390919063ffffffff16565b9450611f1c873083612024565b505b611f29868686612024565b5050505b505050565b60008183611f409190612e42565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361201c9190613553565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f99061334e565b60405180910390fd5b61210d838383612469565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906135f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122269190612e42565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161228a9190612a63565b60405180910390a361229d84848461246e565b50505050565b6001600560156101000a81548160ff02191690831515021790555060006122fd6122da600d54600c54611f3290919063ffffffff16565b6122ef600c548561243d90919063ffffffff16565b61200e90919063ffffffff16565b9050600061231560028361200e90919063ffffffff16565b9050600061232c828461245390919063ffffffff16565b9050600047905061233c83612473565b6000612351824761245390919063ffffffff16565b905061235d83826126ec565b612378612373868861245390919063ffffffff16565b612473565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156123e0573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612412929190613616565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361244b919061363f565b905092915050565b600081836124619190613699565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124905761248f6136cd565b5b6040519080825280602002602001820160405280156124be5781602001602082028036833780820191505090505b50905030816000815181106124d6576124d56136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613740565b816001815181106125b5576125b46136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161261c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114df565b10156126525761265130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611756565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126b6959493929190613866565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612738610f8f565b426040518863ffffffff1660e01b815260040161275a969594939291906138c0565b60606040518083038185885af1158015612778573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061279d9190613936565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127de5780820151818401526020810190506127c3565b838111156127ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061280f826127a4565b61281981856127af565b93506128298185602086016127c0565b612832816127f3565b840191505092915050565b600060208201905081810360008301526128578184612804565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061288f82612864565b9050919050565b61289f81612884565b81146128aa57600080fd5b50565b6000813590506128bc81612896565b92915050565b6000819050919050565b6128d5816128c2565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e61285f565b5b600061291d858286016128ad565b925050602061292e858286016128e3565b9150509250929050565b60008115159050919050565b61294d81612938565b82525050565b60006020820190506129686000830184612944565b92915050565b61297781612938565b811461298257600080fd5b50565b6000813590506129948161296e565b92915050565b600080604083850312156129b1576129b061285f565b5b60006129bf85828601612985565b92505060206129d0858286016128e3565b9150509250929050565b6000819050919050565b60006129ff6129fa6129f584612864565b6129da565b612864565b9050919050565b6000612a11826129e4565b9050919050565b6000612a2382612a06565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b612a5d816128c2565b82525050565b6000602082019050612a786000830184612a54565b92915050565b600080600060608486031215612a9757612a9661285f565b5b6000612aa5868287016128ad565b9350506020612ab6868287016128ad565b9250506040612ac7868287016128e3565b9150509250925092565b600060ff82169050919050565b612ae781612ad1565b82525050565b6000602082019050612b026000830184612ade565b92915050565b612b1181612884565b82525050565b6000602082019050612b2c6000830184612b08565b92915050565b600060208284031215612b4857612b4761285f565b5b6000612b56848285016128ad565b91505092915050565b60008060408385031215612b7657612b7561285f565b5b6000612b84858286016128ad565b9250506020612b9585828601612985565b9150509250929050565b60008060408385031215612bb657612bb561285f565b5b6000612bc4858286016128e3565b9250506020612bd5858286016128e3565b9150509250929050565b600060208284031215612bf557612bf461285f565b5b6000612c03848285016128e3565b91505092915050565b6000612c1782612864565b9050919050565b612c2781612c0c565b82525050565b6000602082019050612c426000830184612c1e565b92915050565b600060208284031215612c5e57612c5d61285f565b5b6000612c6c84828501612985565b91505092915050565b60008060408385031215612c8c57612c8b61285f565b5b6000612c9a858286016128ad565b9250506020612cab858286016128ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cfc57607f821691505b602082108103612d0f57612d0e612cb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d4b6020836127af565b9150612d5682612d15565b602082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ddd6028836127af565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4d826128c2565b9150612e58836128c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8d57612e8c612e13565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612ece600c836127af565b9150612ed982612e98565b602082019050919050565b60006020820190508181036000830152612efd81612ec1565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612f3a6010836127af565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcc6025836127af565b9150612fd782612f70565b604082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061305e602a836127af565b915061306982613002565b604082019050919050565b6000602082019050818103600083015261308d81613051565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130f06026836127af565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131826024836127af565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132146022836127af565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a66025836127af565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133386023836127af565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006133ca6025836127af565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061345c6028836127af565b915061346782613400565b604082019050919050565b6000602082019050818103600083015261348b8161344f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134ee6024836127af565b91506134f982613492565b604082019050919050565b6000602082019050818103600083015261351d816134e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e826128c2565b9150613569836128c2565b92508261357957613578613524565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135e06026836127af565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b600060408201905061362b6000830185612a54565b6136386020830184612a54565b9392505050565b600061364a826128c2565b9150613655836128c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368e5761368d612e13565b5b828202905092915050565b60006136a4826128c2565b91506136af836128c2565b9250828210156136c2576136c1612e13565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061373a81612896565b92915050565b6000602082840312156137565761375561285f565b5b60006137648482850161372b565b91505092915050565b6000819050919050565b600061379261378d6137888461376d565b6129da565b6128c2565b9050919050565b6137a281613777565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137dd81612884565b82525050565b60006137ef83836137d4565b60208301905092915050565b6000602082019050919050565b6000613813826137a8565b61381d81856137b3565b9350613828836137c4565b8060005b8381101561385957815161384088826137e3565b975061384b836137fb565b92505060018101905061382c565b5085935050505092915050565b600060a08201905061387b6000830188612a54565b6138886020830187613799565b818103604083015261389a8186613808565b90506138a96060830185612b08565b6138b66080830184612a54565b9695505050505050565b600060c0820190506138d56000830189612b08565b6138e26020830188612a54565b6138ef6040830187613799565b6138fc6060830186613799565b6139096080830185612b08565b61391660a0830184612a54565b979650505050505050565b600081519050613930816128cc565b92915050565b60008060006060848603121561394f5761394e61285f565b5b600061395d86828701613921565b935050602061396e86828701613921565b925050604061397f86828701613921565b915050925092509256fea2646970667358221220cd4d484a3e3218355cf0e4940c346a81e200b315bf2902d63fc77766d64a970464736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063722b62ad11610118578063a985ceef116100a0578063dd62ed3e1161006f578063dd62ed3e1461078c578063e2f45605146107c9578063e6c75f71146107f4578063ec28438a1461081f578063f2fde38b146108485761020f565b8063a985ceef146106e4578063c02466681461070f578063c49b9a8014610738578063c8c8ebe4146107615761020f565b806391d55f41116100e757806391d55f41146105eb57806395d89b411461061457806398118cb41461063f578063a457c2d71461066a578063a9059cbb146106a75761020f565b8063722b62ad14610541578063750c11b61461056c57806375f0a874146105955780638da5cb5b146105c05761020f565b806349bd5a5e1161019b57806350db71fb1161016a57806350db71fb1461047057806352f7c988146104995780636b67c4df146104c257806370a08231146104ed578063715018a61461052a5761020f565b806349bd5a5e146103a05780634a74bb02146103cb5780634fbee193146103f657806350af449e146104335761020f565b806318160ddd116101d757806318160ddd146102d057806323b872dd146102fb578063313ce5671461033857806339509351146103635761020f565b806306fdde0314610214578063095ea7b31461023f5780630d45c0e31461027c5780631694505e146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610871565b604051610236919061283d565b60405180910390f35b34801561024b57600080fd5b50610266600480360381019061026191906128f8565b610903565b6040516102739190612953565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e919061299a565b610921565b005b3480156102b157600080fd5b506102ba6109c2565b6040516102c79190612a39565b60405180910390f35b3480156102dc57600080fd5b506102e56109e8565b6040516102f29190612a63565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612a7e565b6109f2565b60405161032f9190612953565b60405180910390f35b34801561034457600080fd5b5061034d610aea565b60405161035a9190612aed565b60405180910390f35b34801561036f57600080fd5b5061038a600480360381019061038591906128f8565b610af3565b6040516103979190612953565b60405180910390f35b3480156103ac57600080fd5b506103b5610b9f565b6040516103c29190612b17565b60405180910390f35b3480156103d757600080fd5b506103e0610bc3565b6040516103ed9190612953565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612b32565b610bd6565b60405161042a9190612953565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612b32565b610c2c565b6040516104679190612953565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190612b5f565b610c4c565b005b3480156104a557600080fd5b506104c060048036038101906104bb9190612b9f565b610d23565b005b3480156104ce57600080fd5b506104d7610e07565b6040516104e49190612a63565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612b32565b610e0d565b6040516105219190612a63565b60405180910390f35b34801561053657600080fd5b5061053f610e55565b005b34801561054d57600080fd5b50610556610edd565b6040516105639190612a63565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190612bdf565b610ee3565b005b3480156105a157600080fd5b506105aa610f69565b6040516105b79190612c2d565b60405180910390f35b3480156105cc57600080fd5b506105d5610f8f565b6040516105e29190612b17565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190612bdf565b610fb9565b005b34801561062057600080fd5b5061062961109e565b604051610636919061283d565b60405180910390f35b34801561064b57600080fd5b50610654611130565b6040516106619190612a63565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906128f8565b611136565b60405161069e9190612953565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c991906128f8565b611221565b6040516106db9190612953565b60405180910390f35b3480156106f057600080fd5b506106f961123f565b6040516107069190612953565b60405180910390f35b34801561071b57600080fd5b5061073660048036038101906107319190612b5f565b611252565b005b34801561074457600080fd5b5061075f600480360381019061075a9190612c48565b611409565b005b34801561076d57600080fd5b506107766114d9565b6040516107839190612a63565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190612c75565b6114df565b6040516107c09190612a63565b60405180910390f35b3480156107d557600080fd5b506107de611566565b6040516107eb9190612a63565b60405180910390f35b34801561080057600080fd5b5061080961156c565b6040516108169190612a63565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190612bdf565b611572565b005b34801561085457600080fd5b5061086f600480360381019061086a9190612b32565b611657565b005b60606003805461088090612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac90612ce4565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b5050505050905090565b600061091761091061174e565b8484611756565b6001905092915050565b61092961174e565b73ffffffffffffffffffffffffffffffffffffffff16610947610f8f565b73ffffffffffffffffffffffffffffffffffffffff161461099d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099490612d61565b60405180910390fd5b81600560166101000a81548160ff021916908315150217905550806006819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60006109ff84848461191f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a4a61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612df3565b60405180910390fd5b610ade85610ad661174e565b858403611756565b60019150509392505050565b60006012905090565b6000610b95610b0061174e565b848460016000610b0e61174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b909190612e42565b611756565b6001905092915050565b7f000000000000000000000000061ca01779d64763f18cca811e39190951fa441581565b600560149054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60086020528060005260406000206000915054906101000a900460ff1681565b610c5461174e565b73ffffffffffffffffffffffffffffffffffffffff16610c72610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbf90612d61565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610d2b61174e565b73ffffffffffffffffffffffffffffffffffffffff16610d49610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690612d61565b60405180910390fd5b6005610db48284611f3290919063ffffffff16565b1115610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec90612ee4565b60405180910390fd5b81600c8190555080600d819055505050565b600d5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e5d61174e565b73ffffffffffffffffffffffffffffffffffffffff16610e7b610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890612d61565b60405180910390fd5b610edb6000611f48565b565b60065481565b610eeb61174e565b73ffffffffffffffffffffffffffffffffffffffff16610f09610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690612d61565b60405180910390fd5b80600a8190555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fc161174e565b73ffffffffffffffffffffffffffffffffffffffff16610fdf610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102c90612d61565b60405180910390fd5b80600b8190555061105760646110496109e8565b61200e90919063ffffffff16565b600b54101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612f50565b60405180910390fd5b50565b6060600480546110ad90612ce4565b80601f01602080910402602001604051908101604052809291908181526020018280546110d990612ce4565b80156111265780601f106110fb57610100808354040283529160200191611126565b820191906000526020600020905b81548152906001019060200180831161110957829003601f168201915b5050505050905090565b600c5481565b6000806001600061114561174e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990612fe2565b60405180910390fd5b61121661120d61174e565b85858403611756565b600191505092915050565b600061123561122e61174e565b848461191f565b6001905092915050565b600560169054906101000a900460ff1681565b61125a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611278610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590612d61565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790613074565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516113fd9190612953565b60405180910390a25050565b61141161174e565b73ffffffffffffffffffffffffffffffffffffffff1661142f610f8f565b73ffffffffffffffffffffffffffffffffffffffff1614611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612d61565b60405180910390fd5b80600560146101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516114ce9190612953565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b600b5481565b61157a61174e565b73ffffffffffffffffffffffffffffffffffffffff16611598610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590612d61565b60405180910390fd5b8060098190555061161060646116026109e8565b61200e90919063ffffffff16565b6009541015611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90612f50565b60405180910390fd5b50565b61165f61174e565b73ffffffffffffffffffffffffffffffffffffffff1661167d610f8f565b73ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612d61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613106565b60405180910390fd5b61174b81611f48565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90613198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b9061322a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119129190612a63565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361198e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611985906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f49061334e565b60405180910390fd5b60008103611a1657611a1183836000612024565b611f2d565b600560169054906101000a900460ff168015611a7d57507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611ad35750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bab5742600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906133e0565b60405180910390fd5b60065442611b679190612e42565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c4e5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905080611c9b57600954821115611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9190613472565b60405180910390fd5b5b7f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611cf4575080155b15611d58576000611d0484610e0d565b9050600b548382611d159190612e42565b1115611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613504565b60405180910390fd5b505b6000611d6330610e0d565b90506000600a548210159050808015611d895750600560159054906101000a900460ff16155b8015611de057507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015611df85750600560149054906101000a900460ff165b15611e0c57600a549150611e0b826122a3565b5b82611f1e5760007f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611eb857507f000000000000000000000000061ca01779d64763f18cca811e39190951fa441573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b15611efc57611ef96064611eeb611edc600d54600c54611f3290919063ffffffff16565b8861243d90919063ffffffff16565b61200e90919063ffffffff16565b90505b611f0f818661245390919063ffffffff16565b9450611f1c873083612024565b505b611f29868686612024565b5050505b505050565b60008183611f409190612e42565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361201c9190613553565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f99061334e565b60405180910390fd5b61210d838383612469565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906135f6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122269190612e42565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161228a9190612a63565b60405180910390a361229d84848461246e565b50505050565b6001600560156101000a81548160ff02191690831515021790555060006122fd6122da600d54600c54611f3290919063ffffffff16565b6122ef600c548561243d90919063ffffffff16565b61200e90919063ffffffff16565b9050600061231560028361200e90919063ffffffff16565b9050600061232c828461245390919063ffffffff16565b9050600047905061233c83612473565b6000612351824761245390919063ffffffff16565b905061235d83826126ec565b612378612373868861245390919063ffffffff16565b612473565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156123e0573d6000803e3d6000fd5b507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868482604051612412929190613616565b60405180910390a150505050506000600560156101000a81548160ff02191690831515021790555050565b6000818361244b919061363f565b905092915050565b600081836124619190613699565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156124905761248f6136cd565b5b6040519080825280602002602001820160405280156124be5781602001602082028036833780820191505090505b50905030816000815181106124d6576124d56136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613740565b816001815181106125b5576125b46136fc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508161261c30600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114df565b10156126525761265130600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611756565b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126b6959493929190613866565b600060405180830381600087803b1580156126d057600080fd5b505af11580156126e4573d6000803e3d6000fd5b505050505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612738610f8f565b426040518863ffffffff1660e01b815260040161275a969594939291906138c0565b60606040518083038185885af1158015612778573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061279d9190613936565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127de5780820151818401526020810190506127c3565b838111156127ed576000848401525b50505050565b6000601f19601f8301169050919050565b600061280f826127a4565b61281981856127af565b93506128298185602086016127c0565b612832816127f3565b840191505092915050565b600060208201905081810360008301526128578184612804565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061288f82612864565b9050919050565b61289f81612884565b81146128aa57600080fd5b50565b6000813590506128bc81612896565b92915050565b6000819050919050565b6128d5816128c2565b81146128e057600080fd5b50565b6000813590506128f2816128cc565b92915050565b6000806040838503121561290f5761290e61285f565b5b600061291d858286016128ad565b925050602061292e858286016128e3565b9150509250929050565b60008115159050919050565b61294d81612938565b82525050565b60006020820190506129686000830184612944565b92915050565b61297781612938565b811461298257600080fd5b50565b6000813590506129948161296e565b92915050565b600080604083850312156129b1576129b061285f565b5b60006129bf85828601612985565b92505060206129d0858286016128e3565b9150509250929050565b6000819050919050565b60006129ff6129fa6129f584612864565b6129da565b612864565b9050919050565b6000612a11826129e4565b9050919050565b6000612a2382612a06565b9050919050565b612a3381612a18565b82525050565b6000602082019050612a4e6000830184612a2a565b92915050565b612a5d816128c2565b82525050565b6000602082019050612a786000830184612a54565b92915050565b600080600060608486031215612a9757612a9661285f565b5b6000612aa5868287016128ad565b9350506020612ab6868287016128ad565b9250506040612ac7868287016128e3565b9150509250925092565b600060ff82169050919050565b612ae781612ad1565b82525050565b6000602082019050612b026000830184612ade565b92915050565b612b1181612884565b82525050565b6000602082019050612b2c6000830184612b08565b92915050565b600060208284031215612b4857612b4761285f565b5b6000612b56848285016128ad565b91505092915050565b60008060408385031215612b7657612b7561285f565b5b6000612b84858286016128ad565b9250506020612b9585828601612985565b9150509250929050565b60008060408385031215612bb657612bb561285f565b5b6000612bc4858286016128e3565b9250506020612bd5858286016128e3565b9150509250929050565b600060208284031215612bf557612bf461285f565b5b6000612c03848285016128e3565b91505092915050565b6000612c1782612864565b9050919050565b612c2781612c0c565b82525050565b6000602082019050612c426000830184612c1e565b92915050565b600060208284031215612c5e57612c5d61285f565b5b6000612c6c84828501612985565b91505092915050565b60008060408385031215612c8c57612c8b61285f565b5b6000612c9a858286016128ad565b9250506020612cab858286016128ad565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cfc57607f821691505b602082108103612d0f57612d0e612cb5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d4b6020836127af565b9150612d5682612d15565b602082019050919050565b60006020820190508181036000830152612d7a81612d3e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612ddd6028836127af565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e4d826128c2565b9150612e58836128c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e8d57612e8c612e13565b5b828201905092915050565b7f74617820746f6f20687567680000000000000000000000000000000000000000600082015250565b6000612ece600c836127af565b9150612ed982612e98565b602082019050919050565b60006020820190508181036000830152612efd81612ec1565b9050919050565b7f76616c756520697320746f6f206c6f7700000000000000000000000000000000600082015250565b6000612f3a6010836127af565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612fcc6025836127af565b9150612fd782612f70565b604082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600061305e602a836127af565b915061306982613002565b604082019050919050565b6000602082019050818103600083015261308d81613051565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130f06026836127af565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131826024836127af565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132146022836127af565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132a66025836127af565b91506132b18261324a565b604082019050919050565b600060208201905081810360008301526132d581613299565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133386023836127af565b9150613343826132dc565b604082019050919050565b600060208201905081810360008301526133678161332b565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b60006133ca6025836127af565b91506133d58261336e565b604082019050919050565b600060208201905081810360008301526133f9816133bd565b9050919050565b7f616d6f756e74206578636565647320746865206d61785472616e73616374696f60008201527f6e416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061345c6028836127af565b915061346782613400565b604082019050919050565b6000602082019050818103600083015261348b8161344f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006134ee6024836127af565b91506134f982613492565b604082019050919050565b6000602082019050818103600083015261351d816134e1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355e826128c2565b9150613569836128c2565b92508261357957613578613524565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006135e06026836127af565b91506135eb82613584565b604082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b600060408201905061362b6000830185612a54565b6136386020830184612a54565b9392505050565b600061364a826128c2565b9150613655836128c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368e5761368d612e13565b5b828202905092915050565b60006136a4826128c2565b91506136af836128c2565b9250828210156136c2576136c1612e13565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061373a81612896565b92915050565b6000602082840312156137565761375561285f565b5b60006137648482850161372b565b91505092915050565b6000819050919050565b600061379261378d6137888461376d565b6129da565b6128c2565b9050919050565b6137a281613777565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137dd81612884565b82525050565b60006137ef83836137d4565b60208301905092915050565b6000602082019050919050565b6000613813826137a8565b61381d81856137b3565b9350613828836137c4565b8060005b8381101561385957815161384088826137e3565b975061384b836137fb565b92505060018101905061382c565b5085935050505092915050565b600060a08201905061387b6000830188612a54565b6138886020830187613799565b818103604083015261389a8186613808565b90506138a96060830185612b08565b6138b66080830184612a54565b9695505050505050565b600060c0820190506138d56000830189612b08565b6138e26020830188612a54565b6138ef6040830187613799565b6138fc6060830186613799565b6139096080830185612b08565b61391660a0830184612a54565b979650505050505050565b600081519050613930816128cc565b92915050565b60008060006060848603121561394f5761394e61285f565b5b600061395d86828701613921565b935050602061396e86828701613921565b925050604061397f86828701613921565b915050925092509256fea2646970667358221220cd4d484a3e3218355cf0e4940c346a81e200b315bf2902d63fc77766d64a970464736f6c634300080f0033

Deployed Bytecode Sourcemap

39939:8516:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7969:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48222:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40667:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6922:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8620:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6764:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9521:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40715:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40012:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46957:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40250:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48038:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47289:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40528:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7093:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17332:94;;;;;;;;;;;;;:::i;:::-;;40140:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47731:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40566:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16681:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47535:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6021:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40490:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10239:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7433:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40099:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46661:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47858:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40308:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7671:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40371:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40430:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47090:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17581:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5802:100;5856:13;5889:5;5882:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5802:100;:::o;7969:169::-;8052:4;8069:39;8078:12;:10;:12::i;:::-;8092:7;8101:6;8069:8;:39::i;:::-;8126:4;8119:11;;7969:169;;;;:::o;48222:180::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48339:9:::1;48321:15;;:27;;;;;;;;;;;;;;;;;;48383:11;48359:21;:35;;;;48222:180:::0;;:::o;40667:41::-;;;;;;;;;;;;;:::o;6922:108::-;6983:7;7010:12;;7003:19;;6922:108;:::o;8620:492::-;8760:4;8777:36;8787:6;8795:9;8806:6;8777:9;:36::i;:::-;8826:24;8853:11;:19;8865:6;8853:19;;;;;;;;;;;;;;;:33;8873:12;:10;:12::i;:::-;8853:33;;;;;;;;;;;;;;;;8826:60;;8925:6;8905:16;:26;;8897:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9012:57;9021:6;9029:12;:10;:12::i;:::-;9062:6;9043:16;:25;9012:8;:57::i;:::-;9100:4;9093:11;;;8620:492;;;;;:::o;6764:93::-;6822:5;6847:2;6840:9;;6764:93;:::o;9521:215::-;9609:4;9626:80;9635:12;:10;:12::i;:::-;9649:7;9695:10;9658:11;:25;9670:12;:10;:12::i;:::-;9658:25;;;;;;;;;;;;;;;:34;9684:7;9658:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9626:8;:80::i;:::-;9724:4;9717:11;;9521:215;;;;:::o;40715:38::-;;;:::o;40012:40::-;;;;;;;;;;;;;:::o;46957:125::-;47022:4;47046:19;:28;47066:7;47046:28;;;;;;;;;;;;;;;;;;;;;;;;;47039:35;;46957:125;;;:::o;40250:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;48038:137::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48157:10:::1;48130:16;:24;48147:6;48130:24;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;48038:137:::0;;:::o;47289:238::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47423:1:::1;47387:32;47405:13;47387;:17;;:32;;;;:::i;:::-;:37;;47379:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47467:13;47452:12;:28;;;;47506:13;47491:12;:28;;;;47289:238:::0;;:::o;40528:31::-;;;;:::o;7093:127::-;7167:7;7194:9;:18;7204:7;7194:18;;;;;;;;;;;;;;;;7187:25;;7093:127;;;:::o;17332:94::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17397:21:::1;17415:1;17397:9;:21::i;:::-;17332:94::o:0;40140:49::-;;;;:::o;47731:119::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47832:10:::1;47811:18;:31;;;;47731:119:::0;:::o;40566:92::-;;;;;;;;;;;;;:::o;16681:87::-;16727:7;16754:6;;;;;;;;;;;16747:13;;16681:87;:::o;47535:188::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47627:9:::1;47610:14;:26;;;;47673:22;47691:3;47673:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47655:14;;:40;;47647:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;47535:188:::0;:::o;6021:104::-;6077:13;6110:7;6103:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6021:104;:::o;40490:31::-;;;;:::o;10239:413::-;10332:4;10349:24;10376:11;:25;10388:12;:10;:12::i;:::-;10376:25;;;;;;;;;;;;;;;:34;10402:7;10376:34;;;;;;;;;;;;;;;;10349:61;;10449:15;10429:16;:35;;10421:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10542:67;10551:12;:10;:12::i;:::-;10565:7;10593:15;10574:16;:34;10542:8;:67::i;:::-;10640:4;10633:11;;;10239:413;;;;:::o;7433:175::-;7519:4;7536:42;7546:12;:10;:12::i;:::-;7560:9;7571:6;7536:9;:42::i;:::-;7596:4;7589:11;;7433:175;;;;:::o;40099:34::-;;;;;;;;;;;;;:::o;46661:288::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46786:8:::1;46754:40;;:19;:28;46774:7;46754:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46746:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46883:8;46852:19;:28;46872:7;46852:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46923:7;46907:34;;;46932:8;46907:34;;;;;;:::i;:::-;;;;;;;;46661:288:::0;;:::o;47858:171::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47959:8:::1;47935:21;;:32;;;;;;;;;;;;;;;;;;47983:38;48012:8;47983:38;;;;;;:::i;:::-;;;;;;;;47858:171:::0;:::o;40308:56::-;;;;:::o;7671:151::-;7760:7;7787:11;:18;7799:5;7787:18;;;;;;;;;;;;;;;:27;7806:7;7787:27;;;;;;;;;;;;;;;;7780:34;;7671:151;;;;:::o;40371:52::-;;;;:::o;40430:50::-;;;;:::o;47090:191::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47181:6:::1;47158:20;:29;;;;47230:22;47248:3;47230:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;47206:20;;:46;;47198:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;47090:191:::0;:::o;17581:192::-;16912:12;:10;:12::i;:::-;16901:23;;:7;:5;:7::i;:::-;:23;;;16893:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17690:1:::1;17670:22;;:8;:22;;::::0;17662:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17746:19;17756:8;17746:9;:19::i;:::-;17581:192:::0;:::o;323:98::-;376:7;403:10;396:17;;323:98;:::o;13931:380::-;14084:1;14067:19;;:5;:19;;;14059:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14165:1;14146:21;;:7;:21;;;14138:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:6;14219:11;:18;14231:5;14219:18;;;;;;;;;;;;;;;:27;14238:7;14219:27;;;;;;;;;;;;;;;:36;;;;14287:7;14271:32;;14280:5;14271:32;;;14296:6;14271:32;;;;;;:::i;:::-;;;;;;;;13931:380;;;:::o;42291:1994::-;42439:1;42423:18;;:4;:18;;;42415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42516:1;42502:16;;:2;:16;;;42494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42584:1;42574:6;:11;42571:92;;42602:28;42618:4;42624:2;42628:1;42602:15;:28::i;:::-;42645:7;;42571:92;42678:15;;;;;;;;;;;:40;;;;;42705:13;42697:21;;:4;:21;;;42678:40;:67;;;;;42723:16;:22;42740:4;42723:22;;;;;;;;;;;;;;;;;;;;;;;;;42722:23;42678:67;42675:261;;;42791:15;42769:13;:19;42783:4;42769:19;;;;;;;;;;;;;;;;:37;42761:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42903:21;;42885:15;:39;;;;:::i;:::-;42863:13;:19;42877:4;42863:19;;;;;;;;;;;;;;;:61;;;;42675:261;42948:20;42971:19;:25;42991:4;42971:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43000:19;:23;43020:2;43000:23;;;;;;;;;;;;;;;;;;;;;;;;;42971:52;42948:75;;43041:15;43037:130;;43090:20;;43080:6;:30;;43072:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;43037:130;43199:13;43191:21;;:4;:21;;;:41;;;;;43217:15;43216:16;43191:41;43187:237;;;43249:32;43284:13;43294:2;43284:9;:13::i;:::-;43249:48;;43357:14;;43347:6;43320:24;:33;;;;:::i;:::-;:51;;43312:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;43234:190;43187:237;43441:28;43472:24;43490:4;43472:9;:24::i;:::-;43441:55;;43517:24;43568:18;;43544:20;:42;;43517:69;;43609:19;:40;;;;;43633:16;;;;;;;;;;;43632:17;43609:40;:63;;;;;43659:13;43653:19;;:2;:19;;;43609:63;:88;;;;;43676:21;;;;;;;;;;;43609:88;43606:214;;;43737:18;;43714:41;;43770:36;43785:20;43770:14;:36::i;:::-;43606:214;43922:15;43918:312;;43954:12;43992:13;43984:21;;:4;:21;;;:44;;;;44015:13;44009:19;;:2;:19;;;43984:44;43981:141;;;44055:51;44102:3;44055:42;44066:30;44083:12;;44066;;:16;;:30;;;;:::i;:::-;44055:6;:10;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;44047:59;;43981:141;44144:16;44155:4;44144:6;:10;;:16;;;;:::i;:::-;44135:25;;44175:42;44191:4;44205;44212;44175:15;:42::i;:::-;43939:291;43918:312;44242:33;44258:4;44264:2;44268:6;44242:15;:33::i;:::-;42404:1881;;;42291:1994;;;;:::o;27835:98::-;27893:7;27924:1;27920;:5;;;;:::i;:::-;27913:12;;27835:98;;;;:::o;17781:173::-;17837:16;17856:6;;;;;;;;;;;17837:25;;17882:8;17873:6;;:17;;;;;;;;;;;;;;;;;;17937:8;17906:40;;17927:8;17906:40;;;;;;;;;;;;17826:128;17781:173;:::o;28972:98::-;29030:7;29061:1;29057;:5;;;;:::i;:::-;29050:12;;28972:98;;;;:::o;11142:733::-;11300:1;11282:20;;:6;:20;;;11274:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11384:1;11363:23;;:9;:23;;;11355:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11439:47;11460:6;11468:9;11479:6;11439:20;:47::i;:::-;11499:21;11523:9;:17;11533:6;11523:17;;;;;;;;;;;;;;;;11499:41;;11576:6;11559:13;:23;;11551:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11697:6;11681:13;:22;11661:9;:17;11671:6;11661:17;;;;;;;;;;;;;;;:42;;;;11749:6;11725:9;:20;11735:9;11725:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11790:9;11773:35;;11782:6;11773:35;;;11801:6;11773:35;;;;;;:::i;:::-;;;;;;;;11821:46;11841:6;11849:9;11860:6;11821:19;:46::i;:::-;11263:612;11142:733;;;:::o;44294:1270::-;40929:4;40910:16;;:23;;;;;;;;;;;;;;;;;;44379:26:::1;44408:74;44451:30;44468:12;;44451;;:16;;:30;;;;:::i;:::-;44408:38;44433:12;;44408:20;:24;;:38;;;;:::i;:::-;:42;;:74;;;;:::i;:::-;44379:103;;44551:12;44566:25;44589:1;44566:18;:22;;:25;;;;:::i;:::-;44551:40;;44602:17;44622:28;44645:4;44622:18;:22;;:28;;;;:::i;:::-;44602:48;;44928:22;44953:21;44928:46;;45019:22;45036:4;45019:16;:22::i;:::-;45172:18;45193:41;45219:14;45193:21;:25;;:41;;;;:::i;:::-;45172:62;;45284:35;45297:9;45308:10;45284:12;:35::i;:::-;45377:62;45394:44;45419:18;45394:20;:24;;:44;;;;:::i;:::-;45377:16;:62::i;:::-;45450:15;;;;;;;;;;;:24;;:47;45475:21;45450:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45523:32;45538:4;45544:10;45523:32;;;;;;;:::i;:::-;;;;;;;;44368:1196;;;;;40975:5:::0;40956:16;;:24;;;;;;;;;;;;;;;;;;44294:1270;:::o;28573:98::-;28631:7;28662:1;28658;:5;;;;:::i;:::-;28651:12;;28573:98;;;;:::o;28216:::-;28274:7;28305:1;28301;:5;;;;:::i;:::-;28294:12;;28216:98;;;;:::o;14911:125::-;;;;:::o;15640:124::-;;;;:::o;45572:692::-;45698:21;45736:1;45722:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45698:40;;45767:4;45749;45754:1;45749:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45793:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45783:4;45788:1;45783:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45884:11;45831:50;45849:4;45864:15;;;;;;;;;;;45831:9;:50::i;:::-;:64;45828:156;;;45910:62;45927:4;45942:15;;;;;;;;;;;45969:1;45960:11;45910:8;:62::i;:::-;45828:156;46022:15;;;;;;;;;;;:66;;;46103:11;46129:1;46173:4;46200;46220:15;46022:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45627:637;45572:692;:::o;46272:381::-;46383:15;;;;;;;;;;;:31;;;46422:9;46455:4;46475:11;46501:1;46544;46587:7;:5;:7::i;:::-;46609:15;46383:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46272:381;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:116::-;3564:21;3579:5;3564:21;:::i;:::-;3557:5;3554:32;3544:60;;3600:1;3597;3590:12;3544:60;3494:116;:::o;3616:133::-;3659:5;3697:6;3684:20;3675:29;;3713:30;3737:5;3713:30;:::i;:::-;3616:133;;;;:::o;3755:468::-;3820:6;3828;3877:2;3865:9;3856:7;3852:23;3848:32;3845:119;;;3883:79;;:::i;:::-;3845:119;4003:1;4028:50;4070:7;4061:6;4050:9;4046:22;4028:50;:::i;:::-;4018:60;;3974:114;4127:2;4153:53;4198:7;4189:6;4178:9;4174:22;4153:53;:::i;:::-;4143:63;;4098:118;3755:468;;;;;:::o;4229:60::-;4257:3;4278:5;4271:12;;4229:60;;;:::o;4295:142::-;4345:9;4378:53;4396:34;4405:24;4423:5;4405:24;:::i;:::-;4396:34;:::i;:::-;4378:53;:::i;:::-;4365:66;;4295:142;;;:::o;4443:126::-;4493:9;4526:37;4557:5;4526:37;:::i;:::-;4513:50;;4443:126;;;:::o;4575:153::-;4652:9;4685:37;4716:5;4685:37;:::i;:::-;4672:50;;4575:153;;;:::o;4734:185::-;4848:64;4906:5;4848:64;:::i;:::-;4843:3;4836:77;4734:185;;:::o;4925:276::-;5045:4;5083:2;5072:9;5068:18;5060:26;;5096:98;5191:1;5180:9;5176:17;5167:6;5096:98;:::i;:::-;4925:276;;;;:::o;5207:118::-;5294:24;5312:5;5294:24;:::i;:::-;5289:3;5282:37;5207:118;;:::o;5331:222::-;5424:4;5462:2;5451:9;5447:18;5439:26;;5475:71;5543:1;5532:9;5528:17;5519:6;5475:71;:::i;:::-;5331:222;;;;:::o;5559:619::-;5636:6;5644;5652;5701:2;5689:9;5680:7;5676:23;5672:32;5669:119;;;5707:79;;:::i;:::-;5669:119;5827:1;5852:53;5897:7;5888:6;5877:9;5873:22;5852:53;:::i;:::-;5842:63;;5798:117;5954:2;5980:53;6025:7;6016:6;6005:9;6001:22;5980:53;:::i;:::-;5970:63;;5925:118;6082:2;6108:53;6153:7;6144:6;6133:9;6129:22;6108:53;:::i;:::-;6098:63;;6053:118;5559:619;;;;;:::o;6184:86::-;6219:7;6259:4;6252:5;6248:16;6237:27;;6184:86;;;:::o;6276:112::-;6359:22;6375:5;6359:22;:::i;:::-;6354:3;6347:35;6276:112;;:::o;6394:214::-;6483:4;6521:2;6510:9;6506:18;6498:26;;6534:67;6598:1;6587:9;6583:17;6574:6;6534:67;:::i;:::-;6394:214;;;;:::o;6614:118::-;6701:24;6719:5;6701:24;:::i;:::-;6696:3;6689:37;6614:118;;:::o;6738:222::-;6831:4;6869:2;6858:9;6854:18;6846:26;;6882:71;6950:1;6939:9;6935:17;6926:6;6882:71;:::i;:::-;6738:222;;;;:::o;6966:329::-;7025:6;7074:2;7062:9;7053:7;7049:23;7045:32;7042:119;;;7080:79;;:::i;:::-;7042:119;7200:1;7225:53;7270:7;7261:6;7250:9;7246:22;7225:53;:::i;:::-;7215:63;;7171:117;6966:329;;;;:::o;7301:468::-;7366:6;7374;7423:2;7411:9;7402:7;7398:23;7394:32;7391:119;;;7429:79;;:::i;:::-;7391:119;7549:1;7574:53;7619:7;7610:6;7599:9;7595:22;7574:53;:::i;:::-;7564:63;;7520:117;7676:2;7702:50;7744:7;7735:6;7724:9;7720:22;7702:50;:::i;:::-;7692:60;;7647:115;7301:468;;;;;:::o;7775:474::-;7843:6;7851;7900:2;7888:9;7879:7;7875:23;7871:32;7868:119;;;7906:79;;:::i;:::-;7868:119;8026:1;8051:53;8096:7;8087:6;8076:9;8072:22;8051:53;:::i;:::-;8041:63;;7997:117;8153:2;8179:53;8224:7;8215:6;8204:9;8200:22;8179:53;:::i;:::-;8169:63;;8124:118;7775:474;;;;;:::o;8255:329::-;8314:6;8363:2;8351:9;8342:7;8338:23;8334:32;8331:119;;;8369:79;;:::i;:::-;8331:119;8489:1;8514:53;8559:7;8550:6;8539:9;8535:22;8514:53;:::i;:::-;8504:63;;8460:117;8255:329;;;;:::o;8590:104::-;8635:7;8664:24;8682:5;8664:24;:::i;:::-;8653:35;;8590:104;;;:::o;8700:142::-;8803:32;8829:5;8803:32;:::i;:::-;8798:3;8791:45;8700:142;;:::o;8848:254::-;8957:4;8995:2;8984:9;8980:18;8972:26;;9008:87;9092:1;9081:9;9077:17;9068:6;9008:87;:::i;:::-;8848:254;;;;:::o;9108:323::-;9164:6;9213:2;9201:9;9192:7;9188:23;9184:32;9181:119;;;9219:79;;:::i;:::-;9181:119;9339:1;9364:50;9406:7;9397:6;9386:9;9382:22;9364:50;:::i;:::-;9354:60;;9310:114;9108:323;;;;:::o;9437:474::-;9505:6;9513;9562:2;9550:9;9541:7;9537:23;9533:32;9530:119;;;9568:79;;:::i;:::-;9530:119;9688:1;9713:53;9758:7;9749:6;9738:9;9734:22;9713:53;:::i;:::-;9703:63;;9659:117;9815:2;9841:53;9886:7;9877:6;9866:9;9862:22;9841:53;:::i;:::-;9831:63;;9786:118;9437:474;;;;;:::o;9917:180::-;9965:77;9962:1;9955:88;10062:4;10059:1;10052:15;10086:4;10083:1;10076:15;10103:320;10147:6;10184:1;10178:4;10174:12;10164:22;;10231:1;10225:4;10221:12;10252:18;10242:81;;10308:4;10300:6;10296:17;10286:27;;10242:81;10370:2;10362:6;10359:14;10339:18;10336:38;10333:84;;10389:18;;:::i;:::-;10333:84;10154:269;10103:320;;;:::o;10429:182::-;10569:34;10565:1;10557:6;10553:14;10546:58;10429:182;:::o;10617:366::-;10759:3;10780:67;10844:2;10839:3;10780:67;:::i;:::-;10773:74;;10856:93;10945:3;10856:93;:::i;:::-;10974:2;10969:3;10965:12;10958:19;;10617:366;;;:::o;10989:419::-;11155:4;11193:2;11182:9;11178:18;11170:26;;11242:9;11236:4;11232:20;11228:1;11217:9;11213:17;11206:47;11270:131;11396:4;11270:131;:::i;:::-;11262:139;;10989:419;;;:::o;11414:227::-;11554:34;11550:1;11542:6;11538:14;11531:58;11623:10;11618:2;11610:6;11606:15;11599:35;11414:227;:::o;11647:366::-;11789:3;11810:67;11874:2;11869:3;11810:67;:::i;:::-;11803:74;;11886:93;11975:3;11886:93;:::i;:::-;12004:2;11999:3;11995:12;11988:19;;11647:366;;;:::o;12019:419::-;12185:4;12223:2;12212:9;12208:18;12200:26;;12272:9;12266:4;12262:20;12258:1;12247:9;12243:17;12236:47;12300:131;12426:4;12300:131;:::i;:::-;12292:139;;12019:419;;;:::o;12444:180::-;12492:77;12489:1;12482:88;12589:4;12586:1;12579:15;12613:4;12610:1;12603:15;12630:305;12670:3;12689:20;12707:1;12689:20;:::i;:::-;12684:25;;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12877:1;12809:66;12805:74;12802:1;12799:81;12796:107;;;12883:18;;:::i;:::-;12796:107;12927:1;12924;12920:9;12913:16;;12630:305;;;;:::o;12941:162::-;13081:14;13077:1;13069:6;13065:14;13058:38;12941:162;:::o;13109:366::-;13251:3;13272:67;13336:2;13331:3;13272:67;:::i;:::-;13265:74;;13348:93;13437:3;13348:93;:::i;:::-;13466:2;13461:3;13457:12;13450:19;;13109:366;;;:::o;13481:419::-;13647:4;13685:2;13674:9;13670:18;13662:26;;13734:9;13728:4;13724:20;13720:1;13709:9;13705:17;13698:47;13762:131;13888:4;13762:131;:::i;:::-;13754:139;;13481:419;;;:::o;13906:166::-;14046:18;14042:1;14034:6;14030:14;14023:42;13906:166;:::o;14078:366::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:419::-;14616:4;14654:2;14643:9;14639:18;14631:26;;14703:9;14697:4;14693:20;14689:1;14678:9;14674:17;14667:47;14731:131;14857:4;14731:131;:::i;:::-;14723:139;;14450:419;;;:::o;14875:224::-;15015:34;15011:1;15003:6;14999:14;14992:58;15084:7;15079:2;15071:6;15067:15;15060:32;14875:224;:::o;15105:366::-;15247:3;15268:67;15332:2;15327:3;15268:67;:::i;:::-;15261:74;;15344:93;15433:3;15344:93;:::i;:::-;15462:2;15457:3;15453:12;15446:19;;15105:366;;;:::o;15477:419::-;15643:4;15681:2;15670:9;15666:18;15658:26;;15730:9;15724:4;15720:20;15716:1;15705:9;15701:17;15694:47;15758:131;15884:4;15758:131;:::i;:::-;15750:139;;15477:419;;;:::o;15902:229::-;16042:34;16038:1;16030:6;16026:14;16019:58;16111:12;16106:2;16098:6;16094:15;16087:37;15902:229;:::o;16137:366::-;16279:3;16300:67;16364:2;16359:3;16300:67;:::i;:::-;16293:74;;16376:93;16465:3;16376:93;:::i;:::-;16494:2;16489:3;16485:12;16478:19;;16137:366;;;:::o;16509:419::-;16675:4;16713:2;16702:9;16698:18;16690:26;;16762:9;16756:4;16752:20;16748:1;16737:9;16733:17;16726:47;16790:131;16916:4;16790:131;:::i;:::-;16782:139;;16509:419;;;:::o;16934:225::-;17074:34;17070:1;17062:6;17058:14;17051:58;17143:8;17138:2;17130:6;17126:15;17119:33;16934:225;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17165:366;;;:::o;17537:419::-;17703:4;17741:2;17730:9;17726:18;17718:26;;17790:9;17784:4;17780:20;17776:1;17765:9;17761:17;17754:47;17818:131;17944:4;17818:131;:::i;:::-;17810:139;;17537:419;;;:::o;17962:223::-;18102:34;18098:1;18090:6;18086:14;18079:58;18171:6;18166:2;18158:6;18154:15;18147:31;17962:223;:::o;18191:366::-;18333:3;18354:67;18418:2;18413:3;18354:67;:::i;:::-;18347:74;;18430:93;18519:3;18430:93;:::i;:::-;18548:2;18543:3;18539:12;18532:19;;18191:366;;;:::o;18563:419::-;18729:4;18767:2;18756:9;18752:18;18744:26;;18816:9;18810:4;18806:20;18802:1;18791:9;18787:17;18780:47;18844:131;18970:4;18844:131;:::i;:::-;18836:139;;18563:419;;;:::o;18988:221::-;19128:34;19124:1;19116:6;19112:14;19105:58;19197:4;19192:2;19184:6;19180:15;19173:29;18988:221;:::o;19215:366::-;19357:3;19378:67;19442:2;19437:3;19378:67;:::i;:::-;19371:74;;19454:93;19543:3;19454:93;:::i;:::-;19572:2;19567:3;19563:12;19556:19;;19215:366;;;:::o;19587:419::-;19753:4;19791:2;19780:9;19776:18;19768:26;;19840:9;19834:4;19830:20;19826:1;19815:9;19811:17;19804:47;19868:131;19994:4;19868:131;:::i;:::-;19860:139;;19587:419;;;:::o;20012:224::-;20152:34;20148:1;20140:6;20136:14;20129:58;20221:7;20216:2;20208:6;20204:15;20197:32;20012:224;:::o;20242:366::-;20384:3;20405:67;20469:2;20464:3;20405:67;:::i;:::-;20398:74;;20481:93;20570:3;20481:93;:::i;:::-;20599:2;20594:3;20590:12;20583:19;;20242:366;;;:::o;20614:419::-;20780:4;20818:2;20807:9;20803:18;20795:26;;20867:9;20861:4;20857:20;20853:1;20842:9;20838:17;20831:47;20895:131;21021:4;20895:131;:::i;:::-;20887:139;;20614:419;;;:::o;21039:222::-;21179:34;21175:1;21167:6;21163:14;21156:58;21248:5;21243:2;21235:6;21231:15;21224:30;21039:222;:::o;21267:366::-;21409:3;21430:67;21494:2;21489:3;21430:67;:::i;:::-;21423:74;;21506:93;21595:3;21506:93;:::i;:::-;21624:2;21619:3;21615:12;21608:19;;21267:366;;;:::o;21639:419::-;21805:4;21843:2;21832:9;21828:18;21820:26;;21892:9;21886:4;21882:20;21878:1;21867:9;21863:17;21856:47;21920:131;22046:4;21920:131;:::i;:::-;21912:139;;21639:419;;;:::o;22064:224::-;22204:34;22200:1;22192:6;22188:14;22181:58;22273:7;22268:2;22260:6;22256:15;22249:32;22064:224;:::o;22294:366::-;22436:3;22457:67;22521:2;22516:3;22457:67;:::i;:::-;22450:74;;22533:93;22622:3;22533:93;:::i;:::-;22651:2;22646:3;22642:12;22635:19;;22294:366;;;:::o;22666:419::-;22832:4;22870:2;22859:9;22855:18;22847:26;;22919:9;22913:4;22909:20;22905:1;22894:9;22890:17;22883:47;22947:131;23073:4;22947:131;:::i;:::-;22939:139;;22666:419;;;:::o;23091:227::-;23231:34;23227:1;23219:6;23215:14;23208:58;23300:10;23295:2;23287:6;23283:15;23276:35;23091:227;:::o;23324:366::-;23466:3;23487:67;23551:2;23546:3;23487:67;:::i;:::-;23480:74;;23563:93;23652:3;23563:93;:::i;:::-;23681:2;23676:3;23672:12;23665:19;;23324:366;;;:::o;23696:419::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:131;24103:4;23977:131;:::i;:::-;23969:139;;23696:419;;;:::o;24121:223::-;24261:34;24257:1;24249:6;24245:14;24238:58;24330:6;24325:2;24317:6;24313:15;24306:31;24121:223;:::o;24350:366::-;24492:3;24513:67;24577:2;24572:3;24513:67;:::i;:::-;24506:74;;24589:93;24678:3;24589:93;:::i;:::-;24707:2;24702:3;24698:12;24691:19;;24350:366;;;:::o;24722:419::-;24888:4;24926:2;24915:9;24911:18;24903:26;;24975:9;24969:4;24965:20;24961:1;24950:9;24946:17;24939:47;25003:131;25129:4;25003:131;:::i;:::-;24995:139;;24722:419;;;:::o;25147:180::-;25195:77;25192:1;25185:88;25292:4;25289:1;25282:15;25316:4;25313:1;25306:15;25333:185;25373:1;25390:20;25408:1;25390:20;:::i;:::-;25385:25;;25424:20;25442:1;25424:20;:::i;:::-;25419:25;;25463:1;25453:35;;25468:18;;:::i;:::-;25453:35;25510:1;25507;25503:9;25498:14;;25333:185;;;;:::o;25524:225::-;25664:34;25660:1;25652:6;25648:14;25641:58;25733:8;25728:2;25720:6;25716:15;25709:33;25524:225;:::o;25755:366::-;25897:3;25918:67;25982:2;25977:3;25918:67;:::i;:::-;25911:74;;25994:93;26083:3;25994:93;:::i;:::-;26112:2;26107:3;26103:12;26096:19;;25755:366;;;:::o;26127:419::-;26293:4;26331:2;26320:9;26316:18;26308:26;;26380:9;26374:4;26370:20;26366:1;26355:9;26351:17;26344:47;26408:131;26534:4;26408:131;:::i;:::-;26400:139;;26127:419;;;:::o;26552:332::-;26673:4;26711:2;26700:9;26696:18;26688:26;;26724:71;26792:1;26781:9;26777:17;26768:6;26724:71;:::i;:::-;26805:72;26873:2;26862:9;26858:18;26849:6;26805:72;:::i;:::-;26552:332;;;;;:::o;26890:348::-;26930:7;26953:20;26971:1;26953:20;:::i;:::-;26948:25;;26987:20;27005:1;26987:20;:::i;:::-;26982:25;;27175:1;27107:66;27103:74;27100:1;27097:81;27092:1;27085:9;27078:17;27074:105;27071:131;;;27182:18;;:::i;:::-;27071:131;27230:1;27227;27223:9;27212:20;;26890:348;;;;:::o;27244:191::-;27284:4;27304:20;27322:1;27304:20;:::i;:::-;27299:25;;27338:20;27356:1;27338:20;:::i;:::-;27333:25;;27377:1;27374;27371:8;27368:34;;;27382:18;;:::i;:::-;27368:34;27427:1;27424;27420:9;27412:17;;27244:191;;;;:::o;27441:180::-;27489:77;27486:1;27479:88;27586:4;27583:1;27576:15;27610:4;27607:1;27600:15;27627:180;27675:77;27672:1;27665:88;27772:4;27769:1;27762:15;27796:4;27793:1;27786:15;27813:143;27870:5;27901:6;27895:13;27886:22;;27917:33;27944:5;27917:33;:::i;:::-;27813:143;;;;:::o;27962:351::-;28032:6;28081:2;28069:9;28060:7;28056:23;28052:32;28049:119;;;28087:79;;:::i;:::-;28049:119;28207:1;28232:64;28288:7;28279:6;28268:9;28264:22;28232:64;:::i;:::-;28222:74;;28178:128;27962:351;;;;:::o;28319:85::-;28364:7;28393:5;28382:16;;28319:85;;;:::o;28410:158::-;28468:9;28501:61;28519:42;28528:32;28554:5;28528:32;:::i;:::-;28519:42;:::i;:::-;28501:61;:::i;:::-;28488:74;;28410:158;;;:::o;28574:147::-;28669:45;28708:5;28669:45;:::i;:::-;28664:3;28657:58;28574:147;;:::o;28727:114::-;28794:6;28828:5;28822:12;28812:22;;28727:114;;;:::o;28847:184::-;28946:11;28980:6;28975:3;28968:19;29020:4;29015:3;29011:14;28996:29;;28847:184;;;;:::o;29037:132::-;29104:4;29127:3;29119:11;;29157:4;29152:3;29148:14;29140:22;;29037:132;;;:::o;29175:108::-;29252:24;29270:5;29252:24;:::i;:::-;29247:3;29240:37;29175:108;;:::o;29289:179::-;29358:10;29379:46;29421:3;29413:6;29379:46;:::i;:::-;29457:4;29452:3;29448:14;29434:28;;29289:179;;;;:::o;29474:113::-;29544:4;29576;29571:3;29567:14;29559:22;;29474:113;;;:::o;29623:732::-;29742:3;29771:54;29819:5;29771:54;:::i;:::-;29841:86;29920:6;29915:3;29841:86;:::i;:::-;29834:93;;29951:56;30001:5;29951:56;:::i;:::-;30030:7;30061:1;30046:284;30071:6;30068:1;30065:13;30046:284;;;30147:6;30141:13;30174:63;30233:3;30218:13;30174:63;:::i;:::-;30167:70;;30260:60;30313:6;30260:60;:::i;:::-;30250:70;;30106:224;30093:1;30090;30086:9;30081:14;;30046:284;;;30050:14;30346:3;30339:10;;29747:608;;;29623:732;;;;:::o;30361:831::-;30624:4;30662:3;30651:9;30647:19;30639:27;;30676:71;30744:1;30733:9;30729:17;30720:6;30676:71;:::i;:::-;30757:80;30833:2;30822:9;30818:18;30809:6;30757:80;:::i;:::-;30884:9;30878:4;30874:20;30869:2;30858:9;30854:18;30847:48;30912:108;31015:4;31006:6;30912:108;:::i;:::-;30904:116;;31030:72;31098:2;31087:9;31083:18;31074:6;31030:72;:::i;:::-;31112:73;31180:3;31169:9;31165:19;31156:6;31112:73;:::i;:::-;30361:831;;;;;;;;:::o;31198:807::-;31447:4;31485:3;31474:9;31470:19;31462:27;;31499:71;31567:1;31556:9;31552:17;31543:6;31499:71;:::i;:::-;31580:72;31648:2;31637:9;31633:18;31624:6;31580:72;:::i;:::-;31662:80;31738:2;31727:9;31723:18;31714:6;31662:80;:::i;:::-;31752;31828:2;31817:9;31813:18;31804:6;31752:80;:::i;:::-;31842:73;31910:3;31899:9;31895:19;31886:6;31842:73;:::i;:::-;31925;31993:3;31982:9;31978:19;31969:6;31925:73;:::i;:::-;31198:807;;;;;;;;;:::o;32011:143::-;32068:5;32099:6;32093:13;32084:22;;32115:33;32142:5;32115:33;:::i;:::-;32011:143;;;;:::o;32160:663::-;32248:6;32256;32264;32313:2;32301:9;32292:7;32288:23;32284:32;32281:119;;;32319:79;;:::i;:::-;32281:119;32439:1;32464:64;32520:7;32511:6;32500:9;32496:22;32464:64;:::i;:::-;32454:74;;32410:128;32577:2;32603:64;32659:7;32650:6;32639:9;32635:22;32603:64;:::i;:::-;32593:74;;32548:129;32716:2;32742:64;32798:7;32789:6;32778:9;32774:22;32742:64;:::i;:::-;32732:74;;32687:129;32160:663;;;;;:::o

Swarm Source

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