ETH Price: $3,175.00 (-8.52%)
Gas: 3 Gwei

Token

InazumaInu (INAINU)
 

Overview

Max Total Supply

1,000,000,000,000 INAINU

Holders

141

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
fuckmoonbirds.eth
Balance
4,400,000,000 INAINU

Value
$0.00
0x4851ae25872c530829d1677f99c429797beee736
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:
InazumaInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-29
*/

/**
  _____                                          _____             
  \_   \_ __   __ _ _____   _ _ __ ___   __ _    \_   \_ __  _   _ 
   / /\/ '_ \ / _` |_  / | | | '_ ` _ \ / _` |    / /\/ '_ \| | | |
/\/ /_ | | | | (_| |/ /| |_| | | | | | | (_| | /\/ /_ | | | | |_| |
\____/ |_| |_|\__,_/___|\__,_|_| |_| |_|\__,_| \____/ |_| |_|\__,_|
                                                                   
Our upcoming launch is based on the popular anime and game Inazuma Eleven. 
We have a well thought out plan for the PvP game as well as a P2E game to earn more $INAINU tokens!

*/                                                                     

// SPDX-License-Identifier: UNLICENSED
                                                    
pragma solidity 0.8.9;

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) 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;
}

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow. (easter egg from the genius dev @nomessages9.)
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 561 * 1 gwei; // do not allow over x gwei for launch
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("InazumaInu", "INAINU") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        maxTransactionAmount = totalSupply * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        
    	marketingWallet = address(owner()); // set as marketing wallet
    	devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function disableTrading() external onlyOwner {
        tradingActive = false;
        swapEnabled = false;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee,  uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
                
                // only use to prevent sniper buys in the first blocks.
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
       
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing +  tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= totalSupply() / 100, "Can only swap back if more than 1% of tokens stuck on contract");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff02191690831515021790555064829e34aa00600c556001600e60006101000a81548160ff021916908315150217905550348015620000a157600080fd5b506040518060400160405280600a81526020017f496e617a756d61496e75000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f494e41494e55000000000000000000000000000000000000000000000000000081525081600390805190602001906200012692919062000b7d565b5080600490805190602001906200013f92919062000b7d565b5050506000620001546200064960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200021f8160016200065160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029a57600080fd5b505afa158015620002af573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d5919062000c97565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033857600080fd5b505afa1580156200034d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000373919062000c97565b6040518363ffffffff1660e01b81526004016200039292919062000cda565b602060405180830381600087803b158015620003ad57600080fd5b505af1158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e8919062000c97565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200043060a05160016200065160201b60201c565b6200044560a05160016200074e60201b60201c565b60008060008060008060006c0c9f2c9cd04674edea4000000090506103e860058262000472919062000d40565b6200047e919062000dd0565b600881905550606460028262000495919062000d40565b620004a1919062000dd0565b600a81905550612710600582620004b9919062000d40565b620004c5919062000dd0565b60098190555086601081905550856011819055508460128190555083601481905550826015819055508160168190555062000505620007ef60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000555620007ef60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b7620005a9620007ef60201b60201c565b60016200081960201b60201c565b620005ca3060016200081960201b60201c565b620005df61dead60016200081960201b60201c565b62000601620005f3620007ef60201b60201c565b60016200065160201b60201c565b620006143060016200065160201b60201c565b6200062961dead60016200065160201b60201c565b6200063b33826200096660201b60201c565b505050505050505062001099565b600033905090565b620006616200064960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ea9062000e69565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008296200064960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b29062000e69565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095a919062000ea8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d09062000f15565b60405180910390fd5b620009ed6000838362000b1560201b60201c565b62000a098160025462000b1a60201b620026cf1790919060201c565b60028190555062000a67816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b1a60201b620026cf1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b09919062000f48565b60405180910390a35050565b505050565b600080828462000b2b919062000f65565b90508381101562000b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6a9062001012565b60405180910390fd5b8091505092915050565b82805462000b8b9062001063565b90600052602060002090601f01602090048101928262000baf576000855562000bfb565b82601f1062000bca57805160ff191683800117855562000bfb565b8280016001018555821562000bfb579182015b8281111562000bfa57825182559160200191906001019062000bdd565b5b50905062000c0a919062000c0e565b5090565b5b8082111562000c2957600081600090555060010162000c0f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c5f8262000c32565b9050919050565b62000c718162000c52565b811462000c7d57600080fd5b50565b60008151905062000c918162000c66565b92915050565b60006020828403121562000cb05762000caf62000c2d565b5b600062000cc08482850162000c80565b91505092915050565b62000cd48162000c52565b82525050565b600060408201905062000cf1600083018562000cc9565b62000d00602083018462000cc9565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d4d8262000d07565b915062000d5a8362000d07565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d965762000d9562000d11565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ddd8262000d07565b915062000dea8362000d07565b92508262000dfd5762000dfc62000da1565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e5160208362000e08565b915062000e5e8262000e19565b602082019050919050565b6000602082019050818103600083015262000e848162000e42565b9050919050565b60008115159050919050565b62000ea28162000e8b565b82525050565b600060208201905062000ebf600083018462000e97565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000efd601f8362000e08565b915062000f0a8262000ec5565b602082019050919050565b6000602082019050818103600083015262000f308162000eee565b9050919050565b62000f428162000d07565b82525050565b600060208201905062000f5f600083018462000f37565b92915050565b600062000f728262000d07565b915062000f7f8362000d07565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fb75762000fb662000d11565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000ffa601b8362000e08565b9150620010078262000fc2565b602082019050919050565b600060208201905081810360008301526200102d8162000feb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200107c57607f821691505b6020821081141562001093576200109262001034565b5b50919050565b60805160a051615605620010f7600039600081816112f601528181611ca30152612d68015260008181610efb01528181612d1001528181613dfd01528181613eed01528181613f1401528181613fb00152613fd701526156056000f3fe6080604052600436106103545760003560e01c80638a8c523c116101c6578063bbc0c742116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c55578063f2fde38b14610c80578063f637434214610ca9578063f8b45b0514610cd45761035b565b8063dd62ed3e14610bc2578063e2f4560514610bff578063e884f26014610c2a5761035b565b8063c876d0b9116100d1578063c876d0b914610b04578063c8c8ebe414610b2f578063d257b34f14610b5a578063d85ba06314610b975761035b565b8063bbc0c74214610a87578063c024666814610ab2578063c17b5b8c14610adb5761035b565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d7146109a7578063a9059cbb146109e4578063aacebbe314610a21578063b62496f514610a4a5761035b565b80639c3b4fdc146109265780639fccce3214610951578063a0d82dc51461097c5761035b565b806392136913116101a0578063921369131461087e578063924de9b7146108a957806395d89b41146108d25780639a7a23d6146108fd5761035b565b80638a8c523c146108115780638da5cb5b146108285780638ea5220f146108535761035b565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a1461076957806375f0a874146107925780637bce5a04146107bd5780638095d564146107e85761035b565b806370a08231146106ea578063715018a614610727578063751039fc1461073e5761035b565b80634fbee1931161027a5780634fbee1931461064057806351f205e41461067d5780636a486a8e146106945780636ddd1713146106bf5761035b565b806339509351146105ad57806349bd5a5e146105ea5780634a62bb65146106155761035b565b806318160ddd1161030d5780631f3fed8f116102e75780631f3fed8f146104ef57806323b872dd1461051a57806327c8f83514610557578063313ce567146105825761035b565b806318160ddd146104705780631816467f1461049b5780631a8145bb146104c45761035b565b806306fdde0314610360578063095ea7b31461038b578063106b5da1146103c857806310d5de53146103f15780631694505e1461042e57806317700f01146104595761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610cff565b6040516103829190614196565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614251565b610d91565b6040516103bf91906142ac565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906142c7565b610daf565b005b3480156103fd57600080fd5b50610418600480360381019061041391906142f4565b610ed9565b60405161042591906142ac565b60405180910390f35b34801561043a57600080fd5b50610443610ef9565b6040516104509190614380565b60405180910390f35b34801561046557600080fd5b5061046e610f1d565b005b34801561047c57600080fd5b50610485610fec565b60405161049291906143aa565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906142f4565b610ff6565b005b3480156104d057600080fd5b506104d961114d565b6040516104e691906143aa565b60405180910390f35b3480156104fb57600080fd5b50610504611153565b60405161051191906143aa565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906143c5565b611159565b60405161054e91906142ac565b60405180910390f35b34801561056357600080fd5b5061056c611232565b6040516105799190614427565b60405180910390f35b34801561058e57600080fd5b50610597611238565b6040516105a4919061445e565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614251565b611241565b6040516105e191906142ac565b60405180910390f35b3480156105f657600080fd5b506105ff6112f4565b60405161060c9190614427565b60405180910390f35b34801561062157600080fd5b5061062a611318565b60405161063791906142ac565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906142f4565b61132b565b60405161067491906142ac565b60405180910390f35b34801561068957600080fd5b50610692611381565b005b3480156106a057600080fd5b506106a96114bd565b6040516106b691906143aa565b60405180910390f35b3480156106cb57600080fd5b506106d46114c3565b6040516106e191906142ac565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c91906142f4565b6114d6565b60405161071e91906143aa565b60405180910390f35b34801561073357600080fd5b5061073c61151e565b005b34801561074a57600080fd5b50610753611676565b60405161076091906142ac565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906144a5565b611767565b005b34801561079e57600080fd5b506107a7611859565b6040516107b49190614427565b60405180910390f35b3480156107c957600080fd5b506107d261187f565b6040516107df91906143aa565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906144e5565b611885565b005b34801561081d57600080fd5b5061082661199f565b005b34801561083457600080fd5b5061083d611a6e565b60405161084a9190614427565b60405180910390f35b34801561085f57600080fd5b50610868611a98565b6040516108759190614427565b60405180910390f35b34801561088a57600080fd5b50610893611abe565b6040516108a091906143aa565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614538565b611ac4565b005b3480156108de57600080fd5b506108e7611b78565b6040516108f49190614196565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f91906144a5565b611c0a565b005b34801561093257600080fd5b5061093b611d3e565b60405161094891906143aa565b60405180910390f35b34801561095d57600080fd5b50610966611d44565b60405161097391906143aa565b60405180910390f35b34801561098857600080fd5b50610991611d4a565b60405161099e91906143aa565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614251565b611d50565b6040516109db91906142ac565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614251565b611e1d565b604051610a1891906142ac565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142f4565b611e3b565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906142f4565b611f92565b604051610a7e91906142ac565b60405180910390f35b348015610a9357600080fd5b50610a9c611fb2565b604051610aa991906142ac565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad491906144a5565b611fc5565b005b348015610ae757600080fd5b50610b026004803603810190610afd91906144e5565b612105565b005b348015610b1057600080fd5b50610b1961221f565b604051610b2691906142ac565b60405180910390f35b348015610b3b57600080fd5b50610b44612232565b604051610b5191906143aa565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c91906142c7565b612238565b604051610b8e91906142ac565b60405180910390f35b348015610ba357600080fd5b50610bac6123a8565b604051610bb991906143aa565b60405180910390f35b348015610bce57600080fd5b50610be96004803603810190610be49190614565565b6123ae565b604051610bf691906143aa565b60405180910390f35b348015610c0b57600080fd5b50610c14612435565b604051610c2191906143aa565b60405180910390f35b348015610c3657600080fd5b50610c3f61243b565b604051610c4c91906142ac565b60405180910390f35b348015610c6157600080fd5b50610c6a6124f6565b604051610c7791906143aa565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca291906142f4565b6124fc565b005b348015610cb557600080fd5b50610cbe6126c3565b604051610ccb91906143aa565b60405180910390f35b348015610ce057600080fd5b50610ce96126c9565b604051610cf691906143aa565b60405180910390f35b606060038054610d0e906145d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a906145d4565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e61272d565b8484612735565b6001905092915050565b610db761272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90614652565b60405180910390fd5b670de0b6b3a76400006103e86005610e5c610fec565b610e6691906146a1565b610e70919061472a565b610e7a919061472a565b811015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906147cd565b60405180910390fd5b670de0b6b3a764000081610ed091906146a1565b60088190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f2561272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614652565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550565b6000600254905090565b610ffe61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490614652565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b6000611166848484612900565b6112278461117261272d565b6112228560405180606001604052806028815260200161558360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111d861272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b612735565b600190509392505050565b61dead81565b60006012905090565b60006112ea61124e61272d565b846112e5856001600061125f61272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf90919063ffffffff16565b612735565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61138961272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90614652565b60405180910390fd5b6000611423306114d6565b9050606461142f610fec565b611439919061472a565b81101561147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061485f565b60405180910390fd5b61148361365c565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114b291906143aa565b60405180910390a150565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152661272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168061272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614652565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001905090565b61176f61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614652565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61188d61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390614652565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054611944919061487f565b61194e919061487f565b600f819055506063600f54111561199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190614921565b60405180910390fd5b505050565b6119a761272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614652565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611acc61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5290614652565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b87906145d4565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb3906145d4565b8015611c005780601f10611bd557610100808354040283529160200191611c00565b820191906000526020600020905b815481529060010190602001808311611be357829003601f168201915b5050505050905090565b611c1261272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890614652565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d27906149b3565b60405180910390fd5b611d3a8282613919565b5050565b60125481565b60195481565b60165481565b6000611e13611d5d61272d565b84611e0e856040518060600160405280602581526020016155ab6025913960016000611d8761272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b612735565b6001905092915050565b6000611e31611e2a61272d565b8484612900565b6001905092915050565b611e4361272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614652565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611fcd61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390614652565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120f991906142ac565b60405180910390a25050565b61210d61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390614652565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546121c4919061487f565b6121ce919061487f565b6013819055506063601354111561221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614921565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60085481565b600061224261272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614652565b60405180910390fd5b620186a060016122df610fec565b6122e991906146a1565b6122f3919061472a565b821015612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614a45565b60405180910390fd5b6103e86005612342610fec565b61234c91906146a1565b612356919061472a565b821115612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614ad7565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061244561272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614652565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61250461272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa90614b69565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b60008082846126de919061487f565b905083811015612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614bd5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279c90614c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614cf9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f391906143aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296790614d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614e1d565b60405180910390fd5b60008114156129fa576129f5838360006139ba565b6135f3565b600b60009054906101000a900460ff161561311b57612a17611a6e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a855750612a55611a6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b115750600560149054906101000a900460ff16155b1561311a57600b60019054906101000a900460ff16612c0b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0190614e89565b60405180910390fd5b5b600b60039054906101000a900460ff168015612c705750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbb57600c543a1115612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190614ef5565b60405180910390fd5b5b600e60009054906101000a900460ff1615612e8357612cd8611a6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d5f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e825743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490614fad565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f265750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fcd57600854811115612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f679061503f565b60405180910390fd5b600a54612f7c836114d6565b82612f87919061487f565b1115612fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbf906150ab565b60405180910390fd5b613119565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130705750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130bf576008548111156130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b19061513d565b60405180910390fd5b613118565b600a546130cb836114d6565b826130d6919061487f565b1115613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906150ab565b60405180910390fd5b5b5b5b5b6000613126306114d6565b90506000600954821015905080801561314b5750600b60029054906101000a900460ff165b80156131645750600560149054906101000a900460ff16155b80156131ba5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132105750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132665750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132aa576001600560146101000a81548160ff02191690831515021790555061328e61365c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133605750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336a57600090505b600081156135e357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601354115b1561349a576133fa60646133ec60135488613c4f90919063ffffffff16565b613cca90919063ffffffff16565b90506013546015548261340d91906146a1565b613417919061472a565b60186000828254613428919061487f565b925050819055506013546016548261344091906146a1565b61344a919061472a565b6019600082825461345b919061487f565b925050819055506013546014548261347391906146a1565b61347d919061472a565b6017600082825461348e919061487f565b925050819055506135bf565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134f557506000600f54115b156135be576135226064613514600f5488613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600f546011548261353591906146a1565b61353f919061472a565b60186000828254613550919061487f565b92505081905550600f546012548261356891906146a1565b613572919061472a565b60196000828254613583919061487f565b92505081905550600f546010548261359b91906146a1565b6135a5919061472a565b601760008282546135b6919061487f565b925050819055505b5b60008111156135d4576135d38730836139ba565b5b80856135e0919061515d565b94505b6135ee8787876139ba565b505050505b505050565b6000838311158290613640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136379190614196565b60405180910390fd5b506000838561364f919061515d565b9050809150509392505050565b6000613667306114d6565b9050600060195460175460185461367e919061487f565b613688919061487f565b905060008214806136995750600081145b156136a5575050613917565b6000600282601854856136b891906146a1565b6136c2919061472a565b6136cc919061472a565b905060006136e38285613d1490919063ffffffff16565b905060004790506136f382613d5e565b60006137088247613d1490919063ffffffff16565b905060006137338661372560175485613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600061375e8761375060195486613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600081838561376f919061515d565b613779919061515d565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516137db906151c2565b60006040518083038185875af1925050503d8060008114613818576040519150601f19603f3d011682016040523d82523d6000602084013e61381d565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613867906151c2565b60006040518083038185875af1925050503d80600081146138a4576040519150601f19603f3d011682016040523d82523d6000602084013e6138a9565b606091505b5050809150506000881180156138bf5750600082115b1561390c576138ce8883613faa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613903939291906151d7565b60405180910390a15b505050505050505050505b565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2190614d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190614e1d565b60405180910390fd5b613aa5838383614095565b613b108160405180606001604052806026815260200161555d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c4291906143aa565b60405180910390a3505050565b600080831415613c625760009050613cc4565b60008284613c7091906146a1565b9050828482613c7f919061472a565b14613cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb690615280565b60405180910390fd5b809150505b92915050565b6000613d0c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061409a565b905092915050565b6000613d5683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135f8565b905092915050565b6000600267ffffffffffffffff811115613d7b57613d7a6152a0565b5b604051908082528060200260200182016040528015613da95781602001602082028036833780820191505090505b5090503081600081518110613dc157613dc06152cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e6157600080fd5b505afa158015613e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e999190615313565b81600181518110613ead57613eac6152cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f12307f000000000000000000000000000000000000000000000000000000000000000084612735565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f74959493929190615439565b600060405180830381600087803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b505050505050565b613fd5307f000000000000000000000000000000000000000000000000000000000000000084612735565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161403c96959493929190615493565b6060604051808303818588803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061408e9190615509565b5050505050565b505050565b600080831182906140e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140d89190614196565b60405180910390fd5b50600083856140f0919061472a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561413757808201518184015260208101905061411c565b83811115614146576000848401525b50505050565b6000601f19601f8301169050919050565b6000614168826140fd565b6141728185614108565b9350614182818560208601614119565b61418b8161414c565b840191505092915050565b600060208201905081810360008301526141b0818461415d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141e8826141bd565b9050919050565b6141f8816141dd565b811461420357600080fd5b50565b600081359050614215816141ef565b92915050565b6000819050919050565b61422e8161421b565b811461423957600080fd5b50565b60008135905061424b81614225565b92915050565b60008060408385031215614268576142676141b8565b5b600061427685828601614206565b92505060206142878582860161423c565b9150509250929050565b60008115159050919050565b6142a681614291565b82525050565b60006020820190506142c1600083018461429d565b92915050565b6000602082840312156142dd576142dc6141b8565b5b60006142eb8482850161423c565b91505092915050565b60006020828403121561430a576143096141b8565b5b600061431884828501614206565b91505092915050565b6000819050919050565b600061434661434161433c846141bd565b614321565b6141bd565b9050919050565b60006143588261432b565b9050919050565b600061436a8261434d565b9050919050565b61437a8161435f565b82525050565b60006020820190506143956000830184614371565b92915050565b6143a48161421b565b82525050565b60006020820190506143bf600083018461439b565b92915050565b6000806000606084860312156143de576143dd6141b8565b5b60006143ec86828701614206565b93505060206143fd86828701614206565b925050604061440e8682870161423c565b9150509250925092565b614421816141dd565b82525050565b600060208201905061443c6000830184614418565b92915050565b600060ff82169050919050565b61445881614442565b82525050565b6000602082019050614473600083018461444f565b92915050565b61448281614291565b811461448d57600080fd5b50565b60008135905061449f81614479565b92915050565b600080604083850312156144bc576144bb6141b8565b5b60006144ca85828601614206565b92505060206144db85828601614490565b9150509250929050565b6000806000606084860312156144fe576144fd6141b8565b5b600061450c8682870161423c565b935050602061451d8682870161423c565b925050604061452e8682870161423c565b9150509250925092565b60006020828403121561454e5761454d6141b8565b5b600061455c84828501614490565b91505092915050565b6000806040838503121561457c5761457b6141b8565b5b600061458a85828601614206565b925050602061459b85828601614206565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ec57607f821691505b60208210811415614600576145ff6145a5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463c602083614108565b915061464782614606565b602082019050919050565b6000602082019050818103600083015261466b8161462f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146ac8261421b565b91506146b78361421b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f0576146ef614672565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147358261421b565b91506147408361421b565b9250826147505761474f6146fb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006147b7602f83614108565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060008201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000602082015250565b6000614849603e83614108565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b600061488a8261421b565b91506148958361421b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ca576148c9614672565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061490b601d83614108565b9150614916826148d5565b602082019050919050565b6000602082019050818103600083015261493a816148fe565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061499d603983614108565b91506149a882614941565b604082019050919050565b600060208201905081810360008301526149cc81614990565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a2f603583614108565b9150614a3a826149d3565b604082019050919050565b60006020820190508181036000830152614a5e81614a22565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ac1603483614108565b9150614acc82614a65565b604082019050919050565b60006020820190508181036000830152614af081614ab4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b53602683614108565b9150614b5e82614af7565b604082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614bbf601b83614108565b9150614bca82614b89565b602082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c51602483614108565b9150614c5c82614bf5565b604082019050919050565b60006020820190508181036000830152614c8081614c44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ce3602283614108565b9150614cee82614c87565b604082019050919050565b60006020820190508181036000830152614d1281614cd6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d75602583614108565b9150614d8082614d19565b604082019050919050565b60006020820190508181036000830152614da481614d68565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e07602383614108565b9150614e1282614dab565b604082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e73601683614108565b9150614e7e82614e3d565b602082019050919050565b60006020820190508181036000830152614ea281614e66565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000614edf601883614108565b9150614eea82614ea9565b602082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f97604983614108565b9150614fa282614f15565b606082019050919050565b60006020820190508181036000830152614fc681614f8a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615029603583614108565b915061503482614fcd565b604082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615095601383614108565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615127603683614108565b9150615132826150cb565b604082019050919050565b600060208201905081810360008301526151568161511a565b9050919050565b60006151688261421b565b91506151738361421b565b92508282101561518657615185614672565b5b828203905092915050565b600081905092915050565b50565b60006151ac600083615191565b91506151b78261519c565b600082019050919050565b60006151cd8261519f565b9150819050919050565b60006060820190506151ec600083018661439b565b6151f9602083018561439b565b615206604083018461439b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061526a602183614108565b91506152758261520e565b604082019050919050565b600060208201905081810360008301526152998161525d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061530d816141ef565b92915050565b600060208284031215615329576153286141b8565b5b6000615337848285016152fe565b91505092915050565b6000819050919050565b600061536561536061535b84615340565b614321565b61421b565b9050919050565b6153758161534a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153b0816141dd565b82525050565b60006153c283836153a7565b60208301905092915050565b6000602082019050919050565b60006153e68261537b565b6153f08185615386565b93506153fb83615397565b8060005b8381101561542c57815161541388826153b6565b975061541e836153ce565b9250506001810190506153ff565b5085935050505092915050565b600060a08201905061544e600083018861439b565b61545b602083018761536c565b818103604083015261546d81866153db565b905061547c6060830185614418565b615489608083018461439b565b9695505050505050565b600060c0820190506154a86000830189614418565b6154b5602083018861439b565b6154c2604083018761536c565b6154cf606083018661536c565b6154dc6080830185614418565b6154e960a083018461439b565b979650505050505050565b60008151905061550381614225565b92915050565b600080600060608486031215615522576155216141b8565b5b6000615530868287016154f4565b9350506020615541868287016154f4565b9250506040615552868287016154f4565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e8bde9fdc4f73ae1d51e3b3f7c32868a53c91cdeb1764a8eae562385c4db64264736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638a8c523c116101c6578063bbc0c742116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610c55578063f2fde38b14610c80578063f637434214610ca9578063f8b45b0514610cd45761035b565b8063dd62ed3e14610bc2578063e2f4560514610bff578063e884f26014610c2a5761035b565b8063c876d0b9116100d1578063c876d0b914610b04578063c8c8ebe414610b2f578063d257b34f14610b5a578063d85ba06314610b975761035b565b8063bbc0c74214610a87578063c024666814610ab2578063c17b5b8c14610adb5761035b565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d7146109a7578063a9059cbb146109e4578063aacebbe314610a21578063b62496f514610a4a5761035b565b80639c3b4fdc146109265780639fccce3214610951578063a0d82dc51461097c5761035b565b806392136913116101a0578063921369131461087e578063924de9b7146108a957806395d89b41146108d25780639a7a23d6146108fd5761035b565b80638a8c523c146108115780638da5cb5b146108285780638ea5220f146108535761035b565b806339509351116102a057806370a082311161023e5780637571336a116102185780637571336a1461076957806375f0a874146107925780637bce5a04146107bd5780638095d564146107e85761035b565b806370a08231146106ea578063715018a614610727578063751039fc1461073e5761035b565b80634fbee1931161027a5780634fbee1931461064057806351f205e41461067d5780636a486a8e146106945780636ddd1713146106bf5761035b565b806339509351146105ad57806349bd5a5e146105ea5780634a62bb65146106155761035b565b806318160ddd1161030d5780631f3fed8f116102e75780631f3fed8f146104ef57806323b872dd1461051a57806327c8f83514610557578063313ce567146105825761035b565b806318160ddd146104705780631816467f1461049b5780631a8145bb146104c45761035b565b806306fdde0314610360578063095ea7b31461038b578063106b5da1146103c857806310d5de53146103f15780631694505e1461042e57806317700f01146104595761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610cff565b6040516103829190614196565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614251565b610d91565b6040516103bf91906142ac565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906142c7565b610daf565b005b3480156103fd57600080fd5b50610418600480360381019061041391906142f4565b610ed9565b60405161042591906142ac565b60405180910390f35b34801561043a57600080fd5b50610443610ef9565b6040516104509190614380565b60405180910390f35b34801561046557600080fd5b5061046e610f1d565b005b34801561047c57600080fd5b50610485610fec565b60405161049291906143aa565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd91906142f4565b610ff6565b005b3480156104d057600080fd5b506104d961114d565b6040516104e691906143aa565b60405180910390f35b3480156104fb57600080fd5b50610504611153565b60405161051191906143aa565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906143c5565b611159565b60405161054e91906142ac565b60405180910390f35b34801561056357600080fd5b5061056c611232565b6040516105799190614427565b60405180910390f35b34801561058e57600080fd5b50610597611238565b6040516105a4919061445e565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614251565b611241565b6040516105e191906142ac565b60405180910390f35b3480156105f657600080fd5b506105ff6112f4565b60405161060c9190614427565b60405180910390f35b34801561062157600080fd5b5061062a611318565b60405161063791906142ac565b60405180910390f35b34801561064c57600080fd5b50610667600480360381019061066291906142f4565b61132b565b60405161067491906142ac565b60405180910390f35b34801561068957600080fd5b50610692611381565b005b3480156106a057600080fd5b506106a96114bd565b6040516106b691906143aa565b60405180910390f35b3480156106cb57600080fd5b506106d46114c3565b6040516106e191906142ac565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c91906142f4565b6114d6565b60405161071e91906143aa565b60405180910390f35b34801561073357600080fd5b5061073c61151e565b005b34801561074a57600080fd5b50610753611676565b60405161076091906142ac565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b91906144a5565b611767565b005b34801561079e57600080fd5b506107a7611859565b6040516107b49190614427565b60405180910390f35b3480156107c957600080fd5b506107d261187f565b6040516107df91906143aa565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a91906144e5565b611885565b005b34801561081d57600080fd5b5061082661199f565b005b34801561083457600080fd5b5061083d611a6e565b60405161084a9190614427565b60405180910390f35b34801561085f57600080fd5b50610868611a98565b6040516108759190614427565b60405180910390f35b34801561088a57600080fd5b50610893611abe565b6040516108a091906143aa565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190614538565b611ac4565b005b3480156108de57600080fd5b506108e7611b78565b6040516108f49190614196565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f91906144a5565b611c0a565b005b34801561093257600080fd5b5061093b611d3e565b60405161094891906143aa565b60405180910390f35b34801561095d57600080fd5b50610966611d44565b60405161097391906143aa565b60405180910390f35b34801561098857600080fd5b50610991611d4a565b60405161099e91906143aa565b60405180910390f35b3480156109b357600080fd5b506109ce60048036038101906109c99190614251565b611d50565b6040516109db91906142ac565b60405180910390f35b3480156109f057600080fd5b50610a0b6004803603810190610a069190614251565b611e1d565b604051610a1891906142ac565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906142f4565b611e3b565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906142f4565b611f92565b604051610a7e91906142ac565b60405180910390f35b348015610a9357600080fd5b50610a9c611fb2565b604051610aa991906142ac565b60405180910390f35b348015610abe57600080fd5b50610ad96004803603810190610ad491906144a5565b611fc5565b005b348015610ae757600080fd5b50610b026004803603810190610afd91906144e5565b612105565b005b348015610b1057600080fd5b50610b1961221f565b604051610b2691906142ac565b60405180910390f35b348015610b3b57600080fd5b50610b44612232565b604051610b5191906143aa565b60405180910390f35b348015610b6657600080fd5b50610b816004803603810190610b7c91906142c7565b612238565b604051610b8e91906142ac565b60405180910390f35b348015610ba357600080fd5b50610bac6123a8565b604051610bb991906143aa565b60405180910390f35b348015610bce57600080fd5b50610be96004803603810190610be49190614565565b6123ae565b604051610bf691906143aa565b60405180910390f35b348015610c0b57600080fd5b50610c14612435565b604051610c2191906143aa565b60405180910390f35b348015610c3657600080fd5b50610c3f61243b565b604051610c4c91906142ac565b60405180910390f35b348015610c6157600080fd5b50610c6a6124f6565b604051610c7791906143aa565b60405180910390f35b348015610c8c57600080fd5b50610ca76004803603810190610ca291906142f4565b6124fc565b005b348015610cb557600080fd5b50610cbe6126c3565b604051610ccb91906143aa565b60405180910390f35b348015610ce057600080fd5b50610ce96126c9565b604051610cf691906143aa565b60405180910390f35b606060038054610d0e906145d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a906145d4565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b5050505050905090565b6000610da5610d9e61272d565b8484612735565b6001905092915050565b610db761272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90614652565b60405180910390fd5b670de0b6b3a76400006103e86005610e5c610fec565b610e6691906146a1565b610e70919061472a565b610e7a919061472a565b811015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906147cd565b60405180910390fd5b670de0b6b3a764000081610ed091906146a1565b60088190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610f2561272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614652565b60405180910390fd5b6000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550565b6000600254905090565b610ffe61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461108d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108490614652565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b6000611166848484612900565b6112278461117261272d565b6112228560405180606001604052806028815260200161558360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111d861272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b612735565b600190509392505050565b61dead81565b60006012905090565b60006112ea61124e61272d565b846112e5856001600061125f61272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf90919063ffffffff16565b612735565b6001905092915050565b7f0000000000000000000000007547844fc60ea3bb2d3c92ba86da592c188780df81565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61138961272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90614652565b60405180910390fd5b6000611423306114d6565b9050606461142f610fec565b611439919061472a565b81101561147b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114729061485f565b60405180910390fd5b61148361365c565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516114b291906143aa565b60405180910390a150565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152661272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac90614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168061272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614652565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001905090565b61176f61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614652565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b61188d61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390614652565b60405180910390fd5b826010819055508160118190555080601281905550601254601154601054611944919061487f565b61194e919061487f565b600f819055506063600f54111561199a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199190614921565b60405180910390fd5b505050565b6119a761272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614652565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611acc61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5290614652565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b87906145d4565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb3906145d4565b8015611c005780601f10611bd557610100808354040283529160200191611c00565b820191906000526020600020905b815481529060010190602001808311611be357829003601f168201915b5050505050905090565b611c1261272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890614652565b60405180910390fd5b7f0000000000000000000000007547844fc60ea3bb2d3c92ba86da592c188780df73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d27906149b3565b60405180910390fd5b611d3a8282613919565b5050565b60125481565b60195481565b60165481565b6000611e13611d5d61272d565b84611e0e856040518060600160405280602581526020016155ab6025913960016000611d8761272d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b612735565b6001905092915050565b6000611e31611e2a61272d565b8484612900565b6001905092915050565b611e4361272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990614652565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611fcd61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205390614652565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120f991906142ac565b60405180910390a25050565b61210d61272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390614652565b60405180910390fd5b8260148190555081601581905550806016819055506016546015546014546121c4919061487f565b6121ce919061487f565b6013819055506063601354111561221a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221190614921565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60085481565b600061224261272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890614652565b60405180910390fd5b620186a060016122df610fec565b6122e991906146a1565b6122f3919061472a565b821015612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90614a45565b60405180910390fd5b6103e86005612342610fec565b61234c91906146a1565b612356919061472a565b821115612398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238f90614ad7565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061244561272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb90614652565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61250461272d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a90614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa90614b69565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b60008082846126de919061487f565b905083811015612723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271a90614bd5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279c90614c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614cf9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f391906143aa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296790614d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790614e1d565b60405180910390fd5b60008114156129fa576129f5838360006139ba565b6135f3565b600b60009054906101000a900460ff161561311b57612a17611a6e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a855750612a55611a6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612abe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b115750600560149054906101000a900460ff16155b1561311a57600b60019054906101000a900460ff16612c0b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0190614e89565b60405180910390fd5b5b600b60039054906101000a900460ff168015612c705750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cbb57600c543a1115612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190614ef5565b60405180910390fd5b5b600e60009054906101000a900460ff1615612e8357612cd8611a6e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612d5f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db757507f0000000000000000000000007547844fc60ea3bb2d3c92ba86da592c188780df73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612e825743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490614fad565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f265750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fcd57600854811115612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f679061503f565b60405180910390fd5b600a54612f7c836114d6565b82612f87919061487f565b1115612fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbf906150ab565b60405180910390fd5b613119565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130705750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130bf576008548111156130ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b19061513d565b60405180910390fd5b613118565b600a546130cb836114d6565b826130d6919061487f565b1115613117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310e906150ab565b60405180910390fd5b5b5b5b5b6000613126306114d6565b90506000600954821015905080801561314b5750600b60029054906101000a900460ff165b80156131645750600560149054906101000a900460ff16155b80156131ba5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132105750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132665750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132aa576001600560146101000a81548160ff02191690831515021790555061328e61365c565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133605750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561336a57600090505b600081156135e357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601354115b1561349a576133fa60646133ec60135488613c4f90919063ffffffff16565b613cca90919063ffffffff16565b90506013546015548261340d91906146a1565b613417919061472a565b60186000828254613428919061487f565b925050819055506013546016548261344091906146a1565b61344a919061472a565b6019600082825461345b919061487f565b925050819055506013546014548261347391906146a1565b61347d919061472a565b6017600082825461348e919061487f565b925050819055506135bf565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134f557506000600f54115b156135be576135226064613514600f5488613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600f546011548261353591906146a1565b61353f919061472a565b60186000828254613550919061487f565b92505081905550600f546012548261356891906146a1565b613572919061472a565b60196000828254613583919061487f565b92505081905550600f546010548261359b91906146a1565b6135a5919061472a565b601760008282546135b6919061487f565b925050819055505b5b60008111156135d4576135d38730836139ba565b5b80856135e0919061515d565b94505b6135ee8787876139ba565b505050505b505050565b6000838311158290613640576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136379190614196565b60405180910390fd5b506000838561364f919061515d565b9050809150509392505050565b6000613667306114d6565b9050600060195460175460185461367e919061487f565b613688919061487f565b905060008214806136995750600081145b156136a5575050613917565b6000600282601854856136b891906146a1565b6136c2919061472a565b6136cc919061472a565b905060006136e38285613d1490919063ffffffff16565b905060004790506136f382613d5e565b60006137088247613d1490919063ffffffff16565b905060006137338661372560175485613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600061375e8761375060195486613c4f90919063ffffffff16565b613cca90919063ffffffff16565b9050600081838561376f919061515d565b613779919061515d565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846040516137db906151c2565b60006040518083038185875af1925050503d8060008114613818576040519150601f19603f3d011682016040523d82523d6000602084013e61381d565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613867906151c2565b60006040518083038185875af1925050503d80600081146138a4576040519150601f19603f3d011682016040523d82523d6000602084013e6138a9565b606091505b5050809150506000881180156138bf5750600082115b1561390c576138ce8883613faa565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613903939291906151d7565b60405180910390a15b505050505050505050505b565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2190614d8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9190614e1d565b60405180910390fd5b613aa5838383614095565b613b108160405180606001604052806026815260200161555d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135f89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ba3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126cf90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c4291906143aa565b60405180910390a3505050565b600080831415613c625760009050613cc4565b60008284613c7091906146a1565b9050828482613c7f919061472a565b14613cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb690615280565b60405180910390fd5b809150505b92915050565b6000613d0c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061409a565b905092915050565b6000613d5683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135f8565b905092915050565b6000600267ffffffffffffffff811115613d7b57613d7a6152a0565b5b604051908082528060200260200182016040528015613da95781602001602082028036833780820191505090505b5090503081600081518110613dc157613dc06152cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e6157600080fd5b505afa158015613e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e999190615313565b81600181518110613ead57613eac6152cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f12307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612735565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f74959493929190615439565b600060405180830381600087803b158015613f8e57600080fd5b505af1158015613fa2573d6000803e3d6000fd5b505050505050565b613fd5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612735565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161403c96959493929190615493565b6060604051808303818588803b15801561405557600080fd5b505af1158015614069573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061408e9190615509565b5050505050565b505050565b600080831182906140e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140d89190614196565b60405180910390fd5b50600083856140f0919061472a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561413757808201518184015260208101905061411c565b83811115614146576000848401525b50505050565b6000601f19601f8301169050919050565b6000614168826140fd565b6141728185614108565b9350614182818560208601614119565b61418b8161414c565b840191505092915050565b600060208201905081810360008301526141b0818461415d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141e8826141bd565b9050919050565b6141f8816141dd565b811461420357600080fd5b50565b600081359050614215816141ef565b92915050565b6000819050919050565b61422e8161421b565b811461423957600080fd5b50565b60008135905061424b81614225565b92915050565b60008060408385031215614268576142676141b8565b5b600061427685828601614206565b92505060206142878582860161423c565b9150509250929050565b60008115159050919050565b6142a681614291565b82525050565b60006020820190506142c1600083018461429d565b92915050565b6000602082840312156142dd576142dc6141b8565b5b60006142eb8482850161423c565b91505092915050565b60006020828403121561430a576143096141b8565b5b600061431884828501614206565b91505092915050565b6000819050919050565b600061434661434161433c846141bd565b614321565b6141bd565b9050919050565b60006143588261432b565b9050919050565b600061436a8261434d565b9050919050565b61437a8161435f565b82525050565b60006020820190506143956000830184614371565b92915050565b6143a48161421b565b82525050565b60006020820190506143bf600083018461439b565b92915050565b6000806000606084860312156143de576143dd6141b8565b5b60006143ec86828701614206565b93505060206143fd86828701614206565b925050604061440e8682870161423c565b9150509250925092565b614421816141dd565b82525050565b600060208201905061443c6000830184614418565b92915050565b600060ff82169050919050565b61445881614442565b82525050565b6000602082019050614473600083018461444f565b92915050565b61448281614291565b811461448d57600080fd5b50565b60008135905061449f81614479565b92915050565b600080604083850312156144bc576144bb6141b8565b5b60006144ca85828601614206565b92505060206144db85828601614490565b9150509250929050565b6000806000606084860312156144fe576144fd6141b8565b5b600061450c8682870161423c565b935050602061451d8682870161423c565b925050604061452e8682870161423c565b9150509250925092565b60006020828403121561454e5761454d6141b8565b5b600061455c84828501614490565b91505092915050565b6000806040838503121561457c5761457b6141b8565b5b600061458a85828601614206565b925050602061459b85828601614206565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ec57607f821691505b60208210811415614600576145ff6145a5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463c602083614108565b915061464782614606565b602082019050919050565b6000602082019050818103600083015261466b8161462f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146ac8261421b565b91506146b78361421b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146f0576146ef614672565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147358261421b565b91506147408361421b565b9250826147505761474f6146fb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006147b7602f83614108565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b9050919050565b7f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060008201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000602082015250565b6000614849603e83614108565b9150614854826147ed565b604082019050919050565b600060208201905081810360008301526148788161483c565b9050919050565b600061488a8261421b565b91506148958361421b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ca576148c9614672565b5b828201905092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b600061490b601d83614108565b9150614916826148d5565b602082019050919050565b6000602082019050818103600083015261493a816148fe565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061499d603983614108565b91506149a882614941565b604082019050919050565b600060208201905081810360008301526149cc81614990565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614a2f603583614108565b9150614a3a826149d3565b604082019050919050565b60006020820190508181036000830152614a5e81614a22565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ac1603483614108565b9150614acc82614a65565b604082019050919050565b60006020820190508181036000830152614af081614ab4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b53602683614108565b9150614b5e82614af7565b604082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614bbf601b83614108565b9150614bca82614b89565b602082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c51602483614108565b9150614c5c82614bf5565b604082019050919050565b60006020820190508181036000830152614c8081614c44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ce3602283614108565b9150614cee82614c87565b604082019050919050565b60006020820190508181036000830152614d1281614cd6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614d75602583614108565b9150614d8082614d19565b604082019050919050565b60006020820190508181036000830152614da481614d68565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e07602383614108565b9150614e1282614dab565b604082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e73601683614108565b9150614e7e82614e3d565b602082019050919050565b60006020820190508181036000830152614ea281614e66565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000614edf601883614108565b9150614eea82614ea9565b602082019050919050565b60006020820190508181036000830152614f0e81614ed2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f97604983614108565b9150614fa282614f15565b606082019050919050565b60006020820190508181036000830152614fc681614f8a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615029603583614108565b915061503482614fcd565b604082019050919050565b600060208201905081810360008301526150588161501c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615095601383614108565b91506150a08261505f565b602082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615127603683614108565b9150615132826150cb565b604082019050919050565b600060208201905081810360008301526151568161511a565b9050919050565b60006151688261421b565b91506151738361421b565b92508282101561518657615185614672565b5b828203905092915050565b600081905092915050565b50565b60006151ac600083615191565b91506151b78261519c565b600082019050919050565b60006151cd8261519f565b9150819050919050565b60006060820190506151ec600083018661439b565b6151f9602083018561439b565b615206604083018461439b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061526a602183614108565b91506152758261520e565b604082019050919050565b600060208201905081810360008301526152998161525d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061530d816141ef565b92915050565b600060208284031215615329576153286141b8565b5b6000615337848285016152fe565b91505092915050565b6000819050919050565b600061536561536061535b84615340565b614321565b61421b565b9050919050565b6153758161534a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153b0816141dd565b82525050565b60006153c283836153a7565b60208301905092915050565b6000602082019050919050565b60006153e68261537b565b6153f08185615386565b93506153fb83615397565b8060005b8381101561542c57815161541388826153b6565b975061541e836153ce565b9250506001810190506153ff565b5085935050505092915050565b600060a08201905061544e600083018861439b565b61545b602083018761536c565b818103604083015261546d81866153db565b905061547c6060830185614418565b615489608083018461439b565b9695505050505050565b600060c0820190506154a86000830189614418565b6154b5602083018861439b565b6154c2604083018761536c565b6154cf606083018661536c565b6154dc6080830185614418565b6154e960a083018461439b565b979650505050505050565b60008151905061550381614225565b92915050565b600080600060608486031215615522576155216141b8565b5b6000615530868287016154f4565b9350506020615541868287016154f4565b9250506040615552868287016154f4565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200e8bde9fdc4f73ae1d51e3b3f7c32868a53c91cdeb1764a8eae562385c4db64264736f6c63430008090033

Deployed Bytecode Sourcemap

29964:15653:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8073:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10240:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35625:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31439:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30044:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34595:115;;;;;;;;;;;;;:::i;:::-;;9193:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37855:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31250:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10891:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30147:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9035:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11655:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30102:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30428:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38026:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45302:310;;;;;;;;;;;;;:::i;:::-;;31061:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30508:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9364:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22538:148;;;;;;;;;;;;;:::i;:::-;;34766:192;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35868:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30239:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30950;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36225:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34475:112;;;;;;;;;;;;;:::i;:::-;;21896:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30276:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31096:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36112:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8292:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37183:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31024:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31290:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31172:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12376:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9704:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37635:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31661:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30468:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36993:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36606:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30868:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30313:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35232:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30916:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9942:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30355:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35023:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30987:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22841:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31134:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30395:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8073:100;8127:13;8160:5;8153:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8073:100;:::o;10240:169::-;10323:4;10340:39;10349:12;:10;:12::i;:::-;10363:7;10372:6;10340:8;:39::i;:::-;10397:4;10390:11;;10240:169;;;;:::o;35625:231::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35741:4:::1;35735;35731:1;35715:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35714:31;;;;:::i;:::-;35704:6;:41;;35696:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35841:6;35831;:17;;;;:::i;:::-;35808:20;:40;;;;35625:231:::0;:::o;31439:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30044:51::-;;;:::o;34595:115::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:5:::1;34651:13;;:21;;;;;;;;;;;;;;;;;;34697:5;34683:11;;:19;;;;;;;;;;;;;;;;;;34595:115::o:0;9193:108::-;9254:7;9281:12;;9274:19;;9193:108;:::o;37855:157::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37962:9:::1;;;;;;;;;;;37934:38;;37951:9;37934:38;;;;;;;;;;;;37995:9;37983;;:21;;;;;;;;;;;;;;;;;;37855:157:::0;:::o;31250:33::-;;;;:::o;31210:::-;;;;:::o;10891:355::-;11031:4;11048:36;11058:6;11066:9;11077:6;11048:9;:36::i;:::-;11095:121;11104:6;11112:12;:10;:12::i;:::-;11126:89;11164:6;11126:89;;;;;;;;;;;;;;;;;:11;:19;11138:6;11126:19;;;;;;;;;;;;;;;:33;11146:12;:10;:12::i;:::-;11126:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11095:8;:121::i;:::-;11234:4;11227:11;;10891:355;;;;;:::o;30147:53::-;30193:6;30147:53;:::o;9035:93::-;9093:5;9118:2;9111:9;;9035:93;:::o;11655:218::-;11743:4;11760:83;11769:12;:10;:12::i;:::-;11783:7;11792:50;11831:10;11792:11;:25;11804:12;:10;:12::i;:::-;11792:25;;;;;;;;;;;;;;;:34;11818:7;11792:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11760:8;:83::i;:::-;11861:4;11854:11;;11655:218;;;;:::o;30102:38::-;;;:::o;30428:33::-;;;;;;;;;;;;;:::o;38026:125::-;38091:4;38115:19;:28;38135:7;38115:28;;;;;;;;;;;;;;;;;;;;;;;;;38108:35;;38026:125;;;:::o;45302:310::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45357:23:::1;45383:24;45401:4;45383:9;:24::i;:::-;45357:50;;45461:3;45445:13;:11;:13::i;:::-;:19;;;;:::i;:::-;45426:15;:38;;45418:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;45542:10;:8;:10::i;:::-;45568:36;45588:15;45568:36;;;;;;:::i;:::-;;;;;;;;45346:266;45302:310::o:0;31061:28::-;;;;:::o;30508:31::-;;;;;;;;;;;;;:::o;9364:127::-;9438:7;9465:9;:18;9475:7;9465:18;;;;;;;;;;;;;;;;9458:25;;9364:127;;;:::o;22538:148::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22645:1:::1;22608:40;;22629:6;;;;;;;;;;;22608:40;;;;;;;;;;;;22676:1;22659:6;;:19;;;;;;;;;;;;;;;;;;22538:148::o:0;34766:192::-;34818:4;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34851:5:::1;34834:14;;:22;;;;;;;;;;;;;;;;;;34884:5;34867:14;;:22;;;;;;;;;;;;;;;;;;34923:5;34900:20;;:28;;;;;;;;;;;;;;;;;;34946:4;34939:11;;34766:192:::0;:::o;35868:144::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:4:::1;35958:31;:39;35990:6;35958:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35868:144:::0;;:::o;30239:30::-;;;;;;;;;;;;;:::o;30950:::-;;;;:::o;36225:369::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36359:13:::1;36341:15;:31;;;;36401:13;36383:15;:31;;;;36437:7;36425:9;:19;;;;36506:9;;36488:15;;36470;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36455:12;:60;;;;36550:2;36534:12;;:18;;36526:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36225:369:::0;;;:::o;34475:112::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34546:4:::1;34530:13;;:20;;;;;;;;;;;;;;;;;;34575:4;34561:11;;:18;;;;;;;;;;;;;;;;;;34475:112::o:0;21896:79::-;21934:7;21961:6;;;;;;;;;;;21954:13;;21896:79;:::o;30276:24::-;;;;;;;;;;;;;:::o;31096:31::-;;;;:::o;36112:101::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36198:7:::1;36184:11;;:21;;;;;;;;;;;;;;;;;;36112:101:::0;:::o;8292:104::-;8348:13;8381:7;8374:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8292:104;:::o;37183:244::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37290:13:::1;37282:21;;:4;:21;;;;37274:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37378:41;37407:4;37413:5;37378:28;:41::i;:::-;37183:244:::0;;:::o;31024:24::-;;;;:::o;31290:27::-;;;;:::o;31172:25::-;;;;:::o;12376:269::-;12469:4;12486:129;12495:12;:10;:12::i;:::-;12509:7;12518:96;12557:15;12518:96;;;;;;;;;;;;;;;;;:11;:25;12530:12;:10;:12::i;:::-;12518:25;;;;;;;;;;;;;;;:34;12544:7;12518:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12486:8;:129::i;:::-;12633:4;12626:11;;12376:269;;;;:::o;9704:175::-;9790:4;9807:42;9817:12;:10;:12::i;:::-;9831:9;9842:6;9807:9;:42::i;:::-;9867:4;9860:11;;9704:175;;;;:::o;37635:208::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37772:15:::1;;;;;;;;;;;37729:59;;37752:18;37729:59;;;;;;;;;;;;37817:18;37799:15;;:36;;;;;;;;;;;;;;;;;;37635:208:::0;:::o;31661:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30468:33::-;;;;;;;;;;;;;:::o;36993:182::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37109:8:::1;37078:19;:28;37098:7;37078:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37149:7;37133:34;;;37158:8;37133:34;;;;;;:::i;:::-;;;;;;;;36993:182:::0;;:::o;36606:379::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36743:13:::1;36724:16;:32;;;;36786:13;36767:16;:32;;;;36823:7;36810:10;:20;;;;36895:10;;36876:16;;36857;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;36841:13;:64;;;;36941:2;36924:13;;:19;;36916:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36606:379:::0;;;:::o;30868:39::-;;;;;;;;;;;;;:::o;30313:35::-;;;;:::o;35232:381::-;35313:4;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35369:6:::1;35365:1;35349:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35336:9;:39;;35328:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35484:4;35480:1;35464:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35451:9;:37;;35443:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35576:9;35555:18;:30;;;;35602:4;35595:11;;35232:381:::0;;;:::o;30916:27::-;;;;:::o;9942:151::-;10031:7;10058:11;:18;10070:5;10058:18;;;;;;;;;;;;;;;:27;10077:7;10058:27;;;;;;;;;;;;;;;;10051:34;;9942:151;;;;:::o;30355:33::-;;;;:::o;35023:134::-;35083:4;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35122:5:::1;35099:20;;:28;;;;;;;;;;;;;;;;;;35145:4;35138:11;;35023:134:::0;:::o;30987:30::-;;;;:::o;22841:244::-;22118:12;:10;:12::i;:::-;22108:22;;:6;;;;;;;;;;;:22;;;22100:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22950:1:::1;22930:22;;:8;:22;;;;22922:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23040:8;23011:38;;23032:6;;;;;;;;;;;23011:38;;;;;;;;;;;;23069:8;23060:6;;:17;;;;;;;;;;;;;;;;;;22841:244:::0;:::o;31134:31::-;;;;:::o;30395:24::-;;;;:::o;16940:181::-;16998:7;17018:9;17034:1;17030;:5;;;;:::i;:::-;17018:17;;17059:1;17054;:6;;17046:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:1;17105:8;;;16940:181;;;;:::o;827:98::-;880:7;907:10;900:17;;827:98;:::o;15562:380::-;15715:1;15698:19;;:5;:19;;;;15690:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15796:1;15777:21;;:7;:21;;;;15769:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15880:6;15850:11;:18;15862:5;15850:18;;;;;;;;;;;;;;;:27;15869:7;15850:27;;;;;;;;;;;;;;;:36;;;;15918:7;15902:32;;15911:5;15902:32;;;15927:6;15902:32;;;;;;:::i;:::-;;;;;;;;15562:380;;;:::o;38213:4353::-;38361:1;38345:18;;:4;:18;;;;38337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38438:1;38424:16;;:2;:16;;;;38416:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38515:1;38505:6;:11;38502:92;;;38533:28;38549:4;38555:2;38559:1;38533:15;:28::i;:::-;38576:7;;38502:92;38617:14;;;;;;;;;;;38614:2073;;;38677:7;:5;:7::i;:::-;38669:15;;:4;:15;;;;:49;;;;;38711:7;:5;:7::i;:::-;38705:13;;:2;:13;;;;38669:49;:86;;;;;38753:1;38739:16;;:2;:16;;;;38669:86;:128;;;;;38790:6;38776:21;;:2;:21;;;;38669:128;:158;;;;;38819:8;;;;;;;;;;;38818:9;38669:158;38647:2029;;;38865:13;;;;;;;;;;;38861:148;;38910:19;:25;38930:4;38910:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38939:19;:23;38959:2;38939:23;;;;;;;;;;;;;;;;;;;;;;;;;38910:52;38902:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38861:148;39122:14;;;;;;;;;;;:49;;;;;39140:25;:31;39166:4;39140:31;;;;;;;;;;;;;;;;;;;;;;;;;39122:49;39118:163;;;39219:13;;39204:11;:28;;39196:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39118:163;39439:20;;;;;;;;;;;39435:423;;;39493:7;:5;:7::i;:::-;39487:13;;:2;:13;;;;:47;;;;;39518:15;39504:30;;:2;:30;;;;39487:47;:79;;;;;39552:13;39538:28;;:2;:28;;;;39487:79;39483:356;;;39644:12;39602:28;:39;39631:9;39602:39;;;;;;;;;;;;;;;;:54;39594:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39803:12;39761:28;:39;39790:9;39761:39;;;;;;;;;;;;;;;:54;;;;39483:356;39435:423;39927:25;:31;39953:4;39927:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39963:31;:35;39995:2;39963:35;;;;;;;;;;;;;;;;;;;;;;;;;39962:36;39927:71;39923:738;;;40045:20;;40035:6;:30;;40027:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40184:9;;40167:13;40177:2;40167:9;:13::i;:::-;40158:6;:22;;;;:::i;:::-;:35;;40150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39923:738;;;40311:25;:29;40337:2;40311:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40345:31;:37;40377:4;40345:37;;;;;;;;;;;;;;;;;;;;;;;;;40344:38;40311:71;40307:354;;;40429:20;;40419:6;:30;;40411:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40307:354;;;40608:9;;40591:13;40601:2;40591:9;:13::i;:::-;40582:6;:22;;;;:::i;:::-;:35;;40574:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40307:354;39923:738;38647:2029;38614:2073;40700:28;40731:24;40749:4;40731:9;:24::i;:::-;40700:55;;40776:12;40815:18;;40791:20;:42;;40776:57;;40864:7;:35;;;;;40888:11;;;;;;;;;;;40864:35;:61;;;;;40917:8;;;;;;;;;;;40916:9;40864:61;:110;;;;;40943:25;:31;40969:4;40943:31;;;;;;;;;;;;;;;;;;;;;;;;;40942:32;40864:110;:153;;;;;40992:19;:25;41012:4;40992:25;;;;;;;;;;;;;;;;;;;;;;;;;40991:26;40864:153;:194;;;;;41035:19;:23;41055:2;41035:23;;;;;;;;;;;;;;;;;;;;;;;;;41034:24;40864:194;40846:338;;;41096:4;41085:8;;:15;;;;;;;;;;;;;;;;;;41129:10;:8;:10::i;:::-;41167:5;41156:8;;:16;;;;;;;;;;;;;;;;;;40846:338;41204:12;41220:8;;;;;;;;;;;41219:9;41204:24;;41329:19;:25;41349:4;41329:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41358:19;:23;41378:2;41358:23;;;;;;;;;;;;;;;;;;;;;;;;;41329:52;41326:99;;;41408:5;41398:15;;41326:99;41445:12;41549:7;41546:967;;;41600:25;:29;41626:2;41600:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41649:1;41633:13;;:17;41600:50;41596:748;;;41677:34;41707:3;41677:25;41688:13;;41677:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41670:41;;41778:13;;41759:16;;41752:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41730:18;;:61;;;;;;;:::i;:::-;;;;;;;;41846:13;;41833:10;;41826:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41810:12;;:49;;;;;;;:::i;:::-;;;;;;;;41926:13;;41907:16;;41900:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41878:18;;:61;;;;;;;:::i;:::-;;;;;;;;41596:748;;;42000:25;:31;42026:4;42000:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42050:1;42035:12;;:16;42000:51;41997:347;;;42076:33;42105:3;42076:24;42087:12;;42076:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42069:40;;42172:12;;42154:15;;42147:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42125:18;;:59;;;;;;;:::i;:::-;;;;;;;;42238:12;;42226:9;;42219:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42203:12;;:47;;;;;;;:::i;:::-;;;;;;;;42316:12;;42298:15;;42291:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42269:18;;:59;;;;;;;:::i;:::-;;;;;;;;41997:347;41596:748;42382:1;42375:4;:8;42372:93;;;42407:42;42423:4;42437;42444;42407:15;:42::i;:::-;42372:93;42497:4;42487:14;;;;;:::i;:::-;;;41546:967;42525:33;42541:4;42547:2;42551:6;42525:15;:33::i;:::-;38326:4240;;;;38213:4353;;;;:::o;17843:192::-;17929:7;17962:1;17957;:6;;17965:12;17949:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17989:9;18005:1;18001;:5;;;;:::i;:::-;17989:17;;18026:1;18019:8;;;17843:192;;;;;:::o;43712:1520::-;43751:23;43777:24;43795:4;43777:9;:24::i;:::-;43751:50;;43812:25;43883:12;;43861:18;;43840;;:39;;;;:::i;:::-;:55;;;;:::i;:::-;43812:83;;43938:1;43919:15;:20;:46;;;;43964:1;43943:17;:22;43919:46;43916:60;;;43968:7;;;;43916:60;44045:23;44130:1;44110:17;44089:18;;44071:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44045:86;;44142:26;44171:36;44191:15;44171;:19;;:36;;;;:::i;:::-;44142:65;;44228:25;44256:21;44228:49;;44290:36;44307:18;44290:16;:36::i;:::-;44348:18;44369:44;44395:17;44369:21;:25;;:44;;;;:::i;:::-;44348:65;;44434:23;44460:57;44499:17;44460:34;44475:18;;44460:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44434:83;;44528:17;44548:51;44581:17;44548:28;44563:12;;44548:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44528:71;;44630:23;44687:9;44669:15;44656:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44630:66;;44748:1;44727:18;:22;;;;44781:1;44760:18;:22;;;;44808:1;44793:12;:16;;;;44831:12;44856:15;;;;;;;;;;;44848:29;;44885:15;44848:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44830:75;;;44937:9;;;;;;;;;;;44929:23;;44960:9;44929:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44916:58;;;;;45016:1;44998:15;:19;:42;;;;;45039:1;45021:15;:19;44998:42;44995:210;;;45056:46;45069:15;45086;45056:12;:46::i;:::-;45122:71;45137:18;45157:15;45174:18;;45122:71;;;;;;;;:::i;:::-;;;;;;;;44995:210;43740:1492;;;;;;;;;;43712:1520;:::o;37439:188::-;37556:5;37522:25;:31;37548:4;37522:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37613:5;37579:40;;37607:4;37579:40;;;;;;;;;;;;37439:188;;:::o;13135:573::-;13293:1;13275:20;;:6;:20;;;;13267:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13377:1;13356:23;;:9;:23;;;;13348:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13432:47;13453:6;13461:9;13472:6;13432:20;:47::i;:::-;13512:71;13534:6;13512:71;;;;;;;;;;;;;;;;;:9;:17;13522:6;13512:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13492:9;:17;13502:6;13492:17;;;;;;;;;;;;;;;:91;;;;13617:32;13642:6;13617:9;:20;13627:9;13617:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13594:9;:20;13604:9;13594:20;;;;;;;;;;;;;;;:55;;;;13682:9;13665:35;;13674:6;13665:35;;;13693:6;13665:35;;;;;;:::i;:::-;;;;;;;;13135:573;;;:::o;18294:471::-;18352:7;18602:1;18597;:6;18593:47;;;18627:1;18620:8;;;;18593:47;18652:9;18668:1;18664;:5;;;;:::i;:::-;18652:17;;18697:1;18692;18688;:5;;;;:::i;:::-;:10;18680:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18756:1;18749:8;;;18294:471;;;;;:::o;19241:132::-;19299:7;19326:39;19330:1;19333;19326:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19319:46;;19241:132;;;;:::o;17404:136::-;17462:7;17489:43;17493:1;17496;17489:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17482:50;;17404:136;;;;:::o;42574:601::-;42702:21;42740:1;42726:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42702:40;;42771:4;42753;42758:1;42753:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42797:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42787:4;42792:1;42787:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42832:62;42849:4;42864:15;42882:11;42832:8;:62::i;:::-;42933:15;:66;;;43014:11;43040:1;43084:4;43111;43131:15;42933:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42629:546;42574:601;:::o;43187:517::-;43335:62;43352:4;43367:15;43385:11;43335:8;:62::i;:::-;43440:15;:31;;;43479:9;43512:4;43532:11;43558:1;43601;30193:6;43670:15;43440:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43187:517;;:::o;16545:125::-;;;;:::o;19869:278::-;19955:7;19987:1;19983;:5;19990:12;19975:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20014:9;20030:1;20026;:5;;;;:::i;:::-;20014:17;;20138:1;20131:8;;;19869:278;;;;;:::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:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:249::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:32;12725:2;12717:6;12713:15;12706:57;12521:249;:::o;12776:366::-;12918:3;12939:67;13003:2;12998:3;12939:67;:::i;:::-;12932:74;;13015:93;13104:3;13015:93;:::i;:::-;13133:2;13128:3;13124:12;13117:19;;12776:366;;;:::o;13148:419::-;13314:4;13352:2;13341:9;13337:18;13329:26;;13401:9;13395:4;13391:20;13387:1;13376:9;13372:17;13365:47;13429:131;13555:4;13429:131;:::i;:::-;13421:139;;13148:419;;;:::o;13573:305::-;13613:3;13632:20;13650:1;13632:20;:::i;:::-;13627:25;;13666:20;13684:1;13666:20;:::i;:::-;13661:25;;13820:1;13752:66;13748:74;13745:1;13742:81;13739:107;;;13826:18;;:::i;:::-;13739:107;13870:1;13867;13863:9;13856:16;;13573:305;;;;:::o;13884:179::-;14024:31;14020:1;14012:6;14008:14;14001:55;13884:179;:::o;14069:366::-;14211:3;14232:67;14296:2;14291:3;14232:67;:::i;:::-;14225:74;;14308:93;14397:3;14308:93;:::i;:::-;14426:2;14421:3;14417:12;14410:19;;14069:366;;;:::o;14441:419::-;14607:4;14645:2;14634:9;14630:18;14622:26;;14694:9;14688:4;14684:20;14680:1;14669:9;14665:17;14658:47;14722:131;14848:4;14722:131;:::i;:::-;14714:139;;14441:419;;;:::o;14866:244::-;15006:34;15002:1;14994:6;14990:14;14983:58;15075:27;15070:2;15062:6;15058:15;15051:52;14866:244;:::o;15116:366::-;15258:3;15279:67;15343:2;15338:3;15279:67;:::i;:::-;15272:74;;15355:93;15444:3;15355:93;:::i;:::-;15473:2;15468:3;15464:12;15457:19;;15116:366;;;:::o;15488:419::-;15654:4;15692:2;15681:9;15677:18;15669:26;;15741:9;15735:4;15731:20;15727:1;15716:9;15712:17;15705:47;15769:131;15895:4;15769:131;:::i;:::-;15761:139;;15488:419;;;:::o;15913:240::-;16053:34;16049:1;16041:6;16037:14;16030:58;16122:23;16117:2;16109:6;16105:15;16098:48;15913:240;:::o;16159:366::-;16301:3;16322:67;16386:2;16381:3;16322:67;:::i;:::-;16315:74;;16398:93;16487:3;16398:93;:::i;:::-;16516:2;16511:3;16507:12;16500:19;;16159:366;;;:::o;16531:419::-;16697:4;16735:2;16724:9;16720:18;16712:26;;16784:9;16778:4;16774:20;16770:1;16759:9;16755:17;16748:47;16812:131;16938:4;16812:131;:::i;:::-;16804:139;;16531:419;;;:::o;16956:239::-;17096:34;17092:1;17084:6;17080:14;17073:58;17165:22;17160:2;17152:6;17148:15;17141:47;16956:239;:::o;17201:366::-;17343:3;17364:67;17428:2;17423:3;17364:67;:::i;:::-;17357:74;;17440:93;17529:3;17440:93;:::i;:::-;17558:2;17553:3;17549:12;17542:19;;17201:366;;;:::o;17573:419::-;17739:4;17777:2;17766:9;17762:18;17754:26;;17826:9;17820:4;17816:20;17812:1;17801:9;17797:17;17790:47;17854:131;17980:4;17854:131;:::i;:::-;17846:139;;17573:419;;;:::o;17998:225::-;18138:34;18134:1;18126:6;18122:14;18115:58;18207:8;18202:2;18194:6;18190:15;18183:33;17998:225;:::o;18229:366::-;18371:3;18392:67;18456:2;18451:3;18392:67;:::i;:::-;18385:74;;18468:93;18557:3;18468:93;:::i;:::-;18586:2;18581:3;18577:12;18570:19;;18229:366;;;:::o;18601:419::-;18767:4;18805:2;18794:9;18790:18;18782:26;;18854:9;18848:4;18844:20;18840:1;18829:9;18825:17;18818:47;18882:131;19008:4;18882:131;:::i;:::-;18874:139;;18601:419;;;:::o;19026:177::-;19166:29;19162:1;19154:6;19150:14;19143:53;19026:177;:::o;19209:366::-;19351:3;19372:67;19436:2;19431:3;19372:67;:::i;:::-;19365:74;;19448:93;19537:3;19448:93;:::i;:::-;19566:2;19561:3;19557:12;19550:19;;19209:366;;;:::o;19581:419::-;19747:4;19785:2;19774:9;19770:18;19762:26;;19834:9;19828:4;19824:20;19820:1;19809:9;19805:17;19798:47;19862:131;19988:4;19862:131;:::i;:::-;19854:139;;19581:419;;;:::o;20006:223::-;20146:34;20142:1;20134:6;20130:14;20123:58;20215:6;20210:2;20202:6;20198:15;20191:31;20006:223;:::o;20235:366::-;20377:3;20398:67;20462:2;20457:3;20398:67;:::i;:::-;20391:74;;20474:93;20563:3;20474:93;:::i;:::-;20592:2;20587:3;20583:12;20576:19;;20235:366;;;:::o;20607:419::-;20773:4;20811:2;20800:9;20796:18;20788:26;;20860:9;20854:4;20850:20;20846:1;20835:9;20831:17;20824:47;20888:131;21014:4;20888:131;:::i;:::-;20880:139;;20607:419;;;:::o;21032:221::-;21172:34;21168:1;21160:6;21156:14;21149:58;21241:4;21236:2;21228:6;21224:15;21217:29;21032:221;:::o;21259:366::-;21401:3;21422:67;21486:2;21481:3;21422:67;:::i;:::-;21415:74;;21498:93;21587:3;21498:93;:::i;:::-;21616:2;21611:3;21607:12;21600:19;;21259:366;;;:::o;21631:419::-;21797:4;21835:2;21824:9;21820:18;21812:26;;21884:9;21878:4;21874:20;21870:1;21859:9;21855:17;21848:47;21912:131;22038:4;21912:131;:::i;:::-;21904:139;;21631:419;;;:::o;22056:224::-;22196:34;22192:1;22184:6;22180:14;22173:58;22265:7;22260:2;22252:6;22248:15;22241:32;22056:224;:::o;22286:366::-;22428:3;22449:67;22513:2;22508:3;22449:67;:::i;:::-;22442:74;;22525:93;22614:3;22525:93;:::i;:::-;22643:2;22638:3;22634:12;22627:19;;22286:366;;;:::o;22658:419::-;22824:4;22862:2;22851:9;22847:18;22839:26;;22911:9;22905:4;22901:20;22897:1;22886:9;22882:17;22875:47;22939:131;23065:4;22939:131;:::i;:::-;22931:139;;22658:419;;;:::o;23083:222::-;23223:34;23219:1;23211:6;23207:14;23200:58;23292:5;23287:2;23279:6;23275:15;23268:30;23083:222;:::o;23311:366::-;23453:3;23474:67;23538:2;23533:3;23474:67;:::i;:::-;23467:74;;23550:93;23639:3;23550:93;:::i;:::-;23668:2;23663:3;23659:12;23652:19;;23311:366;;;:::o;23683:419::-;23849:4;23887:2;23876:9;23872:18;23864:26;;23936:9;23930:4;23926:20;23922:1;23911:9;23907:17;23900:47;23964:131;24090:4;23964:131;:::i;:::-;23956:139;;23683:419;;;:::o;24108:172::-;24248:24;24244:1;24236:6;24232:14;24225:48;24108:172;:::o;24286:366::-;24428:3;24449:67;24513:2;24508:3;24449:67;:::i;:::-;24442:74;;24525:93;24614:3;24525:93;:::i;:::-;24643:2;24638:3;24634:12;24627:19;;24286:366;;;:::o;24658:419::-;24824:4;24862:2;24851:9;24847:18;24839:26;;24911:9;24905:4;24901:20;24897:1;24886:9;24882:17;24875:47;24939:131;25065:4;24939:131;:::i;:::-;24931:139;;24658:419;;;:::o;25083:174::-;25223:26;25219:1;25211:6;25207:14;25200:50;25083:174;:::o;25263:366::-;25405:3;25426:67;25490:2;25485:3;25426:67;:::i;:::-;25419:74;;25502:93;25591:3;25502:93;:::i;:::-;25620:2;25615:3;25611:12;25604:19;;25263:366;;;:::o;25635:419::-;25801:4;25839:2;25828:9;25824:18;25816:26;;25888:9;25882:4;25878:20;25874:1;25863:9;25859:17;25852:47;25916:131;26042:4;25916:131;:::i;:::-;25908:139;;25635:419;;;:::o;26060:297::-;26200:34;26196:1;26188:6;26184:14;26177:58;26269:34;26264:2;26256:6;26252:15;26245:59;26338:11;26333:2;26325:6;26321:15;26314:36;26060:297;:::o;26363:366::-;26505:3;26526:67;26590:2;26585:3;26526:67;:::i;:::-;26519:74;;26602:93;26691:3;26602:93;:::i;:::-;26720:2;26715:3;26711:12;26704:19;;26363:366;;;:::o;26735:419::-;26901:4;26939:2;26928:9;26924:18;26916:26;;26988:9;26982:4;26978:20;26974:1;26963:9;26959:17;26952:47;27016:131;27142:4;27016:131;:::i;:::-;27008:139;;26735:419;;;:::o;27160:240::-;27300:34;27296:1;27288:6;27284:14;27277:58;27369:23;27364:2;27356:6;27352:15;27345:48;27160:240;:::o;27406:366::-;27548:3;27569:67;27633:2;27628:3;27569:67;:::i;:::-;27562:74;;27645:93;27734:3;27645:93;:::i;:::-;27763:2;27758:3;27754:12;27747:19;;27406:366;;;:::o;27778:419::-;27944:4;27982:2;27971:9;27967:18;27959:26;;28031:9;28025:4;28021:20;28017:1;28006:9;28002:17;27995:47;28059:131;28185:4;28059:131;:::i;:::-;28051:139;;27778:419;;;:::o;28203:169::-;28343:21;28339:1;28331:6;28327:14;28320:45;28203:169;:::o;28378:366::-;28520:3;28541:67;28605:2;28600:3;28541:67;:::i;:::-;28534:74;;28617:93;28706:3;28617:93;:::i;:::-;28735:2;28730:3;28726:12;28719:19;;28378:366;;;:::o;28750:419::-;28916:4;28954:2;28943:9;28939:18;28931:26;;29003:9;28997:4;28993:20;28989:1;28978:9;28974:17;28967:47;29031:131;29157:4;29031:131;:::i;:::-;29023:139;;28750:419;;;:::o;29175:241::-;29315:34;29311:1;29303:6;29299:14;29292:58;29384:24;29379:2;29371:6;29367:15;29360:49;29175:241;:::o;29422:366::-;29564:3;29585:67;29649:2;29644:3;29585:67;:::i;:::-;29578:74;;29661:93;29750:3;29661:93;:::i;:::-;29779:2;29774:3;29770:12;29763:19;;29422:366;;;:::o;29794:419::-;29960:4;29998:2;29987:9;29983:18;29975:26;;30047:9;30041:4;30037:20;30033:1;30022:9;30018:17;30011:47;30075:131;30201:4;30075:131;:::i;:::-;30067:139;;29794:419;;;:::o;30219:191::-;30259:4;30279:20;30297:1;30279:20;:::i;:::-;30274:25;;30313:20;30331:1;30313:20;:::i;:::-;30308:25;;30352:1;30349;30346:8;30343:34;;;30357:18;;:::i;:::-;30343:34;30402:1;30399;30395:9;30387:17;;30219:191;;;;:::o;30416:147::-;30517:11;30554:3;30539:18;;30416:147;;;;:::o;30569:114::-;;:::o;30689:398::-;30848:3;30869:83;30950:1;30945:3;30869:83;:::i;:::-;30862:90;;30961:93;31050:3;30961:93;:::i;:::-;31079:1;31074:3;31070:11;31063:18;;30689:398;;;:::o;31093:379::-;31277:3;31299:147;31442:3;31299:147;:::i;:::-;31292:154;;31463:3;31456:10;;31093:379;;;:::o;31478:442::-;31627:4;31665:2;31654:9;31650:18;31642:26;;31678:71;31746:1;31735:9;31731:17;31722:6;31678:71;:::i;:::-;31759:72;31827:2;31816:9;31812:18;31803:6;31759:72;:::i;:::-;31841;31909:2;31898:9;31894:18;31885:6;31841:72;:::i;:::-;31478:442;;;;;;:::o;31926:220::-;32066:34;32062:1;32054:6;32050:14;32043:58;32135:3;32130:2;32122:6;32118:15;32111:28;31926:220;:::o;32152:366::-;32294:3;32315:67;32379:2;32374:3;32315:67;:::i;:::-;32308:74;;32391:93;32480:3;32391:93;:::i;:::-;32509:2;32504:3;32500:12;32493:19;;32152:366;;;:::o;32524:419::-;32690:4;32728:2;32717:9;32713:18;32705:26;;32777:9;32771:4;32767:20;32763:1;32752:9;32748:17;32741:47;32805:131;32931:4;32805:131;:::i;:::-;32797:139;;32524:419;;;:::o;32949:180::-;32997:77;32994:1;32987:88;33094:4;33091:1;33084:15;33118:4;33115:1;33108:15;33135:180;33183:77;33180:1;33173:88;33280:4;33277:1;33270:15;33304:4;33301:1;33294:15;33321:143;33378:5;33409:6;33403:13;33394:22;;33425:33;33452:5;33425:33;:::i;:::-;33321:143;;;;:::o;33470:351::-;33540:6;33589:2;33577:9;33568:7;33564:23;33560:32;33557:119;;;33595:79;;:::i;:::-;33557:119;33715:1;33740:64;33796:7;33787:6;33776:9;33772:22;33740:64;:::i;:::-;33730:74;;33686:128;33470:351;;;;:::o;33827:85::-;33872:7;33901:5;33890:16;;33827:85;;;:::o;33918:158::-;33976:9;34009:61;34027:42;34036:32;34062:5;34036:32;:::i;:::-;34027:42;:::i;:::-;34009:61;:::i;:::-;33996:74;;33918:158;;;:::o;34082:147::-;34177:45;34216:5;34177:45;:::i;:::-;34172:3;34165:58;34082:147;;:::o;34235:114::-;34302:6;34336:5;34330:12;34320:22;;34235:114;;;:::o;34355:184::-;34454:11;34488:6;34483:3;34476:19;34528:4;34523:3;34519:14;34504:29;;34355:184;;;;:::o;34545:132::-;34612:4;34635:3;34627:11;;34665:4;34660:3;34656:14;34648:22;;34545:132;;;:::o;34683:108::-;34760:24;34778:5;34760:24;:::i;:::-;34755:3;34748:37;34683:108;;:::o;34797:179::-;34866:10;34887:46;34929:3;34921:6;34887:46;:::i;:::-;34965:4;34960:3;34956:14;34942:28;;34797:179;;;;:::o;34982:113::-;35052:4;35084;35079:3;35075:14;35067:22;;34982:113;;;:::o;35131:732::-;35250:3;35279:54;35327:5;35279:54;:::i;:::-;35349:86;35428:6;35423:3;35349:86;:::i;:::-;35342:93;;35459:56;35509:5;35459:56;:::i;:::-;35538:7;35569:1;35554:284;35579:6;35576:1;35573:13;35554:284;;;35655:6;35649:13;35682:63;35741:3;35726:13;35682:63;:::i;:::-;35675:70;;35768:60;35821:6;35768:60;:::i;:::-;35758:70;;35614:224;35601:1;35598;35594:9;35589:14;;35554:284;;;35558:14;35854:3;35847:10;;35255:608;;;35131:732;;;;:::o;35869:831::-;36132:4;36170:3;36159:9;36155:19;36147:27;;36184:71;36252:1;36241:9;36237:17;36228:6;36184:71;:::i;:::-;36265:80;36341:2;36330:9;36326:18;36317:6;36265:80;:::i;:::-;36392:9;36386:4;36382:20;36377:2;36366:9;36362:18;36355:48;36420:108;36523:4;36514:6;36420:108;:::i;:::-;36412:116;;36538:72;36606:2;36595:9;36591:18;36582:6;36538:72;:::i;:::-;36620:73;36688:3;36677:9;36673:19;36664:6;36620:73;:::i;:::-;35869:831;;;;;;;;:::o;36706:807::-;36955:4;36993:3;36982:9;36978:19;36970:27;;37007:71;37075:1;37064:9;37060:17;37051:6;37007:71;:::i;:::-;37088:72;37156:2;37145:9;37141:18;37132:6;37088:72;:::i;:::-;37170:80;37246:2;37235:9;37231:18;37222:6;37170:80;:::i;:::-;37260;37336:2;37325:9;37321:18;37312:6;37260:80;:::i;:::-;37350:73;37418:3;37407:9;37403:19;37394:6;37350:73;:::i;:::-;37433;37501:3;37490:9;37486:19;37477:6;37433:73;:::i;:::-;36706:807;;;;;;;;;:::o;37519:143::-;37576:5;37607:6;37601:13;37592:22;;37623:33;37650:5;37623:33;:::i;:::-;37519:143;;;;:::o;37668:663::-;37756:6;37764;37772;37821:2;37809:9;37800:7;37796:23;37792:32;37789:119;;;37827:79;;:::i;:::-;37789:119;37947:1;37972:64;38028:7;38019:6;38008:9;38004:22;37972:64;:::i;:::-;37962:74;;37918:128;38085:2;38111:64;38167:7;38158:6;38147:9;38143:22;38111:64;:::i;:::-;38101:74;;38056:129;38224:2;38250:64;38306:7;38297:6;38286:9;38282:22;38250:64;:::i;:::-;38240:74;;38195:129;37668:663;;;;;:::o

Swarm Source

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