ETH Price: $3,399.93 (+2.04%)

Token

BOTTLE OF WATER (WATA)
 

Overview

Max Total Supply

1,000,000 WATA

Holders

29

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*⬛️nigga⬛️.eth
Balance
0.000000000000406251 WATA

Value
$0.00
0xd2d7cfcd0b4c6dc48a059b0b7dd5819075c36345
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:
Token

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 2023-09-01
*/

/**
* TIRED OF LOSING SO MUCH MONEY ON CRYPTO? A HOLE BURNING IN YER POCKET??
BUY BOTTLE OF WATER COIN!! NO MATTER HOW MUCH YOU INVEST YOU WILL HAVE ENOUGH TO BUY A BOTTLE OF WATER!
 *Submitted for verification at Etherscan.io on 2023-07-23
*/

// https://t.me/bottleofwatercoin
// SPDX-License-Identifier: MIT
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; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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.
     */
    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 Token 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;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // 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 sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    uint256 public earlyBuyFee;
    uint256 public earlySellFee;
    uint256 public extraFeeBlocks;
    
    /******************/

    // 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 AutoNukeLP();
    
    event ManualNukeLP();

    constructor() ERC20("BOTTLE OF WATER", "WATA") {
        
        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 = 20;
        uint256 _buyLiquidityFee = 0;

        uint256 _sellMarketingFee = 25;
        uint256 _sellLiquidityFee = 0;

        uint256 totalSupply = 1 * 1e6 * 1e18;
        
        maxTransactionAmount = totalSupply * 1 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
        marketingWallet = address(0xc142b87015A172453dface230f91c26435738B83); // set as marketing 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 {

  	}

    // once enabled, can never be turned off
    function enableTrading(uint256 _taxBlocks, uint256 _earlyBuyFee, uint256 _earlySellFee) external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        earlyBuyFee = _earlyBuyFee;
        earlySellFee = _earlySellFee;
        extraFeeBlocks = block.number + _taxBlocks;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = 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 updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = 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) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;

        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% 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 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.");
                }

                // 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 if(!_isExcludedMaxTransactionAmount[to]){
                    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){
            uint256 extraFee = 0;
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                if(block.number < extraFeeBlocks) { extraFee = earlySellFee;}
                fees = amount.mul(sellTotalFees + extraFee).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                if(block.number < extraFeeBlocks) { extraFee = earlySellFee;}
        	    fees = amount.mul(buyTotalFees + extraFee).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / 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
            marketingWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // 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 ethForLiquidity = ethBalance - ethForMarketing;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
                
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
    
}

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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBlocks","type":"uint256"},{"internalType":"uint256","name":"_earlyBuyFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellFee","type":"uint256"}],"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":"extraFeeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":"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"}],"name":"updateBuyFees","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":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","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"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f424f54544c45204f4620574154455200000000000000000000000000000000008152506040518060400160405280600481526020017f574154410000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000b2f565b5080600490805190602001906200011b92919062000b2f565b505050600062000130620005fb60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200060360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000c49565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000c49565b6040518363ffffffff1660e01b81526004016200036e92919062000c8c565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000c49565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200060360201b60201c565b6200042160a05160016200070060201b60201c565b6000601490506000806019905060008069d3c21bcecceda1000000905060646001826200044f919062000cf2565b6200045b919062000d82565b600781905550606460028262000472919062000cf2565b6200047e919062000d82565b60098190555061271060058262000496919062000cf2565b620004a2919062000d82565b60088190555084600e8190555083600f81905550600f54600e54620004c8919062000dba565b600d819055508260118190555081601281905550601254601154620004ee919062000dba565b60108190555073c142b87015a172453dface230f91c26435738b83600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200056b6200055d620007a160201b60201c565b6001620007cb60201b60201c565b6200057e306001620007cb60201b60201c565b6200059361dead6001620007cb60201b60201c565b620005b5620005a7620007a160201b60201c565b60016200060360201b60201c565b620005c83060016200060360201b60201c565b620005dd61dead60016200060360201b60201c565b620005ef33826200091860201b60201c565b5050505050506200104b565b600033905090565b62000613620005fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069c9062000e78565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007db620005fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200086d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008649062000e78565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200090c919062000eb7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200098b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009829062000f24565b60405180910390fd5b6200099f6000838362000ac760201b60201c565b620009bb8160025462000acc60201b6200239c1790919060201c565b60028190555062000a19816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000acc60201b6200239c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000abb919062000f57565b60405180910390a35050565b505050565b600080828462000add919062000dba565b90508381101562000b25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b1c9062000fc4565b60405180910390fd5b8091505092915050565b82805462000b3d9062001015565b90600052602060002090601f01602090048101928262000b61576000855562000bad565b82601f1062000b7c57805160ff191683800117855562000bad565b8280016001018555821562000bad579182015b8281111562000bac57825182559160200191906001019062000b8f565b5b50905062000bbc919062000bc0565b5090565b5b8082111562000bdb57600081600090555060010162000bc1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c118262000be4565b9050919050565b62000c238162000c04565b811462000c2f57600080fd5b50565b60008151905062000c438162000c18565b92915050565b60006020828403121562000c625762000c6162000bdf565b5b600062000c728482850162000c32565b91505092915050565b62000c868162000c04565b82525050565b600060408201905062000ca3600083018562000c7b565b62000cb2602083018462000c7b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cff8262000cb9565b915062000d0c8362000cb9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d485762000d4762000cc3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d8f8262000cb9565b915062000d9c8362000cb9565b92508262000daf5762000dae62000d53565b5b828204905092915050565b600062000dc78262000cb9565b915062000dd48362000cb9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e0c5762000e0b62000cc3565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e6060208362000e17565b915062000e6d8262000e28565b602082019050919050565b6000602082019050818103600083015262000e938162000e51565b9050919050565b60008115159050919050565b62000eb18162000e9a565b82525050565b600060208201905062000ece600083018462000ea6565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f0c601f8362000e17565b915062000f198262000ed4565b602082019050919050565b6000602082019050818103600083015262000f3f8162000efd565b9050919050565b62000f518162000cb9565b82525050565b600060208201905062000f6e600083018462000f46565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fac601b8362000e17565b915062000fb98262000f74565b602082019050919050565b6000602082019050818103600083015262000fdf8162000f9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200102e57607f821691505b6020821081141562001045576200104462000fe6565b5b50919050565b60805160a0516151f7620010a960003960008181611143015281816118740152612985015260008181610e3e0152818161292d0152818161399401528181613a8401528181613aab01528181613b470152613b6e01526151f76000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063c18bc195116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbd578063f2fde38b14610be8578063f637434214610c11578063f8b45b0514610c3c5761030a565b8063dd62ed3e14610b2a578063e2f4560514610b67578063e884f26014610b925761030a565b8063c18bc19514610a1a578063c876d0b914610a43578063c8c8ebe414610a6e578063cfdbe82314610a99578063d257b34f14610ac2578063d85ba06314610aff5761030a565b8063a46e2ee811610149578063ae0a687511610123578063ae0a68751461095e578063b62496f514610989578063bbc0c742146109c6578063c0246668146109f15761030a565b8063a46e2ee8146108cd578063a9059cbb146108f8578063aacebbe3146109355761030a565b80638da5cb5b146107bd57806392136913146107e8578063924de9b71461081357806395d89b411461083c5780639a7a23d614610867578063a457c2d7146108905761030a565b8063395093511161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146107135780637571336a1461073e57806375f0a874146107675780637bce5a04146107925761030a565b80636ddd17131461069457806370a08231146106bf578063715018a6146106fc5761030a565b8063395093511461057057806349bd5a5e146105ad5780634a62bb65146105d85780634fbee1931461060357806366ca9b83146106405780636a486a8e146106695761030a565b80631a8145bb116102bc578063231786a411610296578063231786a4146104b257806323b872dd146104dd57806327c8f8351461051a578063313ce567146105455761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b31461036357806310d5de53146103a05780631694505e146103dd57806318160ddd146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613cea565b610c67565b005b34801561034457600080fd5b5061034d610d6c565b60405161035a9190613dc3565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613e43565b610dfe565b6040516103979190613e9e565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613eb9565b610e1c565b6040516103d49190613e9e565b60405180910390f35b3480156103e957600080fd5b506103f2610e3c565b6040516103ff9190613f45565b60405180910390f35b34801561041457600080fd5b5061041d610e60565b60405161042a9190613f6f565b60405180910390f35b34801561043f57600080fd5b50610448610e6a565b6040516104559190613f6f565b60405180910390f35b34801561046a57600080fd5b50610473610e70565b6040516104809190613f6f565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613f8a565b610e76565b005b3480156104be57600080fd5b506104c7610fa0565b6040516104d49190613f6f565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613fb7565b610fa6565b6040516105119190613e9e565b60405180910390f35b34801561052657600080fd5b5061052f61107f565b60405161053c9190614019565b60405180910390f35b34801561055157600080fd5b5061055a611085565b6040516105679190614050565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190613e43565b61108e565b6040516105a49190613e9e565b60405180910390f35b3480156105b957600080fd5b506105c2611141565b6040516105cf9190614019565b60405180910390f35b3480156105e457600080fd5b506105ed611165565b6040516105fa9190613e9e565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613eb9565b611178565b6040516106379190613e9e565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190613cea565b6111ce565b005b34801561067557600080fd5b5061067e6112d3565b60405161068b9190613f6f565b60405180910390f35b3480156106a057600080fd5b506106a96112d9565b6040516106b69190613e9e565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613eb9565b6112ec565b6040516106f39190613f6f565b60405180910390f35b34801561070857600080fd5b50610711611334565b005b34801561071f57600080fd5b5061072861148c565b6040516107359190613e9e565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614097565b611547565b005b34801561077357600080fd5b5061077c611639565b6040516107899190614019565b60405180910390f35b34801561079e57600080fd5b506107a761165f565b6040516107b49190613f6f565b60405180910390f35b3480156107c957600080fd5b506107d2611665565b6040516107df9190614019565b60405180910390f35b3480156107f457600080fd5b506107fd61168f565b60405161080a9190613f6f565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906140d7565b611695565b005b34801561084857600080fd5b50610851611749565b60405161085e9190613dc3565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190614097565b6117db565b005b34801561089c57600080fd5b506108b760048036038101906108b29190613e43565b61190f565b6040516108c49190613e9e565b60405180910390f35b3480156108d957600080fd5b506108e26119dc565b6040516108ef9190613f6f565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613e43565b6119e2565b60405161092c9190613e9e565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190613eb9565b611a00565b005b34801561096a57600080fd5b50610973611b57565b6040516109809190613f6f565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613eb9565b611b5d565b6040516109bd9190613e9e565b60405180910390f35b3480156109d257600080fd5b506109db611b7d565b6040516109e89190613e9e565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190614097565b611b90565b005b348015610a2657600080fd5b50610a416004803603810190610a3c9190613f8a565b611cd0565b005b348015610a4f57600080fd5b50610a58611dfa565b604051610a659190613e9e565b60405180910390f35b348015610a7a57600080fd5b50610a83611e0d565b604051610a909190613f6f565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb9190614104565b611e13565b005b348015610ace57600080fd5b50610ae96004803603810190610ae49190613f8a565b611f05565b604051610af69190613e9e565b60405180910390f35b348015610b0b57600080fd5b50610b14612075565b604051610b219190613f6f565b60405180910390f35b348015610b3657600080fd5b50610b516004803603810190610b4c9190614157565b61207b565b604051610b5e9190613f6f565b60405180910390f35b348015610b7357600080fd5b50610b7c612102565b604051610b899190613f6f565b60405180910390f35b348015610b9e57600080fd5b50610ba7612108565b604051610bb49190613e9e565b60405180910390f35b348015610bc957600080fd5b50610bd26121c3565b604051610bdf9190613f6f565b60405180910390f35b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190613eb9565b6121c9565b005b348015610c1d57600080fd5b50610c26612390565b604051610c339190613f6f565b60405180910390f35b348015610c4857600080fd5b50610c51612396565b604051610c5e9190613f6f565b60405180910390f35b610c6f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf5906141e3565b60405180910390fd5b8160118190555080601281905550601254601154610d1c9190614232565b60108190555060196010541115610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906142d4565b60405180910390fd5b5050565b606060038054610d7b90614323565b80601f0160208091040260200160405190810160405280929190818152602001828054610da790614323565b8015610df45780601f10610dc957610100808354040283529160200191610df4565b820191906000526020600020905b815481529060010190602001808311610dd757829003601f168201915b5050505050905090565b6000610e12610e0b6123fa565b8484612402565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b60135481565b610e7e6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906141e3565b60405180910390fd5b670de0b6b3a76400006103e86001610f23610e60565b610f2d9190614355565b610f3791906143de565b610f4191906143de565b811015610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90614481565b60405180910390fd5b670de0b6b3a764000081610f979190614355565b60078190555050565b60175481565b6000610fb38484846125cd565b61107484610fbf6123fa565b61106f8560405180606001604052806028815260200161517560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110256123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b612402565b600190509392505050565b61dead81565b60006012905090565b600061113761109b6123fa565b8461113285600160006110ac6123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c90919063ffffffff16565b612402565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111d66123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c906141e3565b60405180910390fd5b81600e8190555080600f81905550600f54600e546112839190614232565b600d819055506014600d5411156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c6906144ed565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133c6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906141e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114966123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c906141e3565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61154f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d5906141e3565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61169d6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906141e3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461175890614323565b80601f016020809104026020016040519081016040528092919081815260200182805461178490614323565b80156117d15780601f106117a6576101008083540402835291602001916117d1565b820191906000526020600020905b8154815290600101906020018083116117b457829003601f168201915b5050505050905090565b6117e36123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611869906141e3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f89061457f565b60405180910390fd5b61190b828261329e565b5050565b60006119d261191c6123fa565b846119cd8560405180606001604052806025815260200161519d60259139600160006119466123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b612402565b6001905092915050565b60155481565b60006119f66119ef6123fa565b84846125cd565b6001905092915050565b611a086123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e906141e3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611b986123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906141e3565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cc49190613e9e565b60405180910390a25050565b611cd86123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e906141e3565b60405180910390fd5b670de0b6b3a76400006103e86005611d7d610e60565b611d879190614355565b611d9191906143de565b611d9b91906143de565b811015611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614611565b60405180910390fd5b670de0b6b3a764000081611df19190614355565b60098190555050565b600c60009054906101000a900460ff1681565b60075481565b611e1b6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea1906141e3565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555081601581905550806016819055508243611efa9190614232565b601781905550505050565b6000611f0f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f95906141e3565b60405180910390fd5b620186a06001611fac610e60565b611fb69190614355565b611fc091906143de565b821015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff9906146a3565b60405180910390fd5b6103e8600561200f610e60565b6120199190614355565b61202391906143de565b821115612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90614735565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60006121126123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906141e3565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b6121d16123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612257906141e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c7906147c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b60008082846123ab9190614232565b9050838110156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614833565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614957565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c09190613f6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906149e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614a7b565b60405180910390fd5b60008114156126c7576126c28383600061333f565b613235565b600a60009054906101000a900460ff1615612d8a576126e4611665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127525750612722611665565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127de5750600560149054906101000a900460ff16155b15612d8957600a60019054906101000a900460ff166128d857601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128985750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ce90614ae7565b60405180910390fd5b5b600c60009054906101000a900460ff1615612aa0576128f5611665565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561297c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a9f5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614b9f565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b435750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bea57600754811115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614c31565b60405180910390fd5b600954612b99836112ec565b82612ba49190614232565b1115612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614c9d565b60405180910390fd5b612d88565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdc57600754811115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614d2f565b60405180910390fd5b612d87565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d8657600954612d39836112ec565b82612d449190614232565b1115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614c9d565b60405180910390fd5b5b5b5b5b5b6000612d95306112ec565b905060006008548210159050808015612dba5750600a60029054906101000a900460ff165b8015612dd35750600560149054906101000a900460ff16155b8015612e295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e7f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed55750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f19576001600560146101000a81548160ff021916908315150217905550612efd6135d4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fcf5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd957600090505b60008115613225576000601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303e57506000601054115b156130f3576017544310156130535760165490505b6130866064613078836010546130699190614232565b896137e190919063ffffffff16565b61385c90919063ffffffff16565b9150601054601254836130999190614355565b6130a391906143de565b601460008282546130b49190614232565b92505081905550601054601154836130cc9190614355565b6130d691906143de565b601360008282546130e79190614232565b92505081905550613200565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314e57506000600d54115b156131ff576017544310156131635760165490505b613196606461318883600d546131799190614232565b896137e190919063ffffffff16565b61385c90919063ffffffff16565b9150600d54600f54836131a99190614355565b6131b391906143de565b601460008282546131c49190614232565b92505081905550600d54600e54836131dc9190614355565b6131e691906143de565b601360008282546131f79190614232565b925050819055505b5b60008211156132155761321488308461333f565b5b81866132219190614d4f565b9550505b61323087878761333f565b505050505b505050565b6000838311158290613282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132799190613dc3565b60405180910390fd5b50600083856132919190614d4f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a6906149e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341690614a7b565b60405180910390fd5b61342a8383836138a6565b6134958160405180606001604052806026815260200161514f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613528816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c79190613f6f565b60405180910390a3505050565b60006135df306112ec565b905060006013546014546135f39190614232565b90506000808314806136055750600082145b15613612575050506137df565b60146008546136219190614355565b83111561363a5760146008546136379190614355565b92505b60006002836014548661364d9190614355565b61365791906143de565b61366191906143de565b9050600061367882866138ab90919063ffffffff16565b90506000479050613688826138f5565b600061369d82476138ab90919063ffffffff16565b905060006136c8876136ba601354856137e190919063ffffffff16565b61385c90919063ffffffff16565b9050600081836136d89190614d4f565b9050600060148190555060006013819055506000861180156136fa5750600081115b15613747576137098682613b41565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260145460405161373e93929190614d83565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161378d90614deb565b60006040518083038185875af1925050503d80600081146137ca576040519150601f19603f3d011682016040523d82523d6000602084013e6137cf565b606091505b5050809750505050505050505050505b565b6000808314156137f45760009050613856565b600082846138029190614355565b905082848261381191906143de565b14613851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384890614e72565b60405180910390fd5b809150505b92915050565b600061389e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c4c565b905092915050565b505050565b60006138ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061323a565b905092915050565b6000600267ffffffffffffffff81111561391257613911614e92565b5b6040519080825280602002602001820160405280156139405781602001602082028036833780820191505090505b509050308160008151811061395857613957614ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139f857600080fd5b505afa158015613a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a309190614f05565b81600181518110613a4457613a43614ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa9307f000000000000000000000000000000000000000000000000000000000000000084612402565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0b95949392919061502b565b600060405180830381600087803b158015613b2557600080fd5b505af1158015613b39573d6000803e3d6000fd5b505050505050565b613b6c307f000000000000000000000000000000000000000000000000000000000000000084612402565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bf396959493929190615085565b6060604051808303818588803b158015613c0c57600080fd5b505af1158015613c20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c4591906150fb565b5050505050565b60008083118290613c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8a9190613dc3565b60405180910390fd5b5060008385613ca291906143de565b9050809150509392505050565b600080fd5b6000819050919050565b613cc781613cb4565b8114613cd257600080fd5b50565b600081359050613ce481613cbe565b92915050565b60008060408385031215613d0157613d00613caf565b5b6000613d0f85828601613cd5565b9250506020613d2085828601613cd5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d64578082015181840152602081019050613d49565b83811115613d73576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d9582613d2a565b613d9f8185613d35565b9350613daf818560208601613d46565b613db881613d79565b840191505092915050565b60006020820190508181036000830152613ddd8184613d8a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b8114613e2b57600080fd5b50565b600081359050613e3d81613e17565b92915050565b60008060408385031215613e5a57613e59613caf565b5b6000613e6885828601613e2e565b9250506020613e7985828601613cd5565b9150509250929050565b60008115159050919050565b613e9881613e83565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b600060208284031215613ecf57613ece613caf565b5b6000613edd84828501613e2e565b91505092915050565b6000819050919050565b6000613f0b613f06613f0184613de5565b613ee6565b613de5565b9050919050565b6000613f1d82613ef0565b9050919050565b6000613f2f82613f12565b9050919050565b613f3f81613f24565b82525050565b6000602082019050613f5a6000830184613f36565b92915050565b613f6981613cb4565b82525050565b6000602082019050613f846000830184613f60565b92915050565b600060208284031215613fa057613f9f613caf565b5b6000613fae84828501613cd5565b91505092915050565b600080600060608486031215613fd057613fcf613caf565b5b6000613fde86828701613e2e565b9350506020613fef86828701613e2e565b925050604061400086828701613cd5565b9150509250925092565b61401381613e05565b82525050565b600060208201905061402e600083018461400a565b92915050565b600060ff82169050919050565b61404a81614034565b82525050565b60006020820190506140656000830184614041565b92915050565b61407481613e83565b811461407f57600080fd5b50565b6000813590506140918161406b565b92915050565b600080604083850312156140ae576140ad613caf565b5b60006140bc85828601613e2e565b92505060206140cd85828601614082565b9150509250929050565b6000602082840312156140ed576140ec613caf565b5b60006140fb84828501614082565b91505092915050565b60008060006060848603121561411d5761411c613caf565b5b600061412b86828701613cd5565b935050602061413c86828701613cd5565b925050604061414d86828701613cd5565b9150509250925092565b6000806040838503121561416e5761416d613caf565b5b600061417c85828601613e2e565b925050602061418d85828601613e2e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141cd602083613d35565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061423d82613cb4565b915061424883613cb4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427d5761427c614203565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006142be601d83613d35565b91506142c982614288565b602082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061433b57607f821691505b6020821081141561434f5761434e6142f4565b5b50919050565b600061436082613cb4565b915061436b83613cb4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a4576143a3614203565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143e982613cb4565b91506143f483613cb4565b925082614404576144036143af565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061446b602f83613d35565b91506144768261440f565b604082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006144d7601d83613d35565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614569603983613d35565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145fb602483613d35565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061468d603583613d35565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061471f603483613d35565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b1602683613d35565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061481d601b83613d35565b9150614828826147e7565b602082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148af602483613d35565b91506148ba82614853565b604082019050919050565b600060208201905081810360008301526148de816148a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614941602283613d35565b915061494c826148e5565b604082019050919050565b6000602082019050818103600083015261497081614934565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149d3602583613d35565b91506149de82614977565b604082019050919050565b60006020820190508181036000830152614a02816149c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a65602383613d35565b9150614a7082614a09565b604082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ad1601683613d35565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b89604983613d35565b9150614b9482614b07565b606082019050919050565b60006020820190508181036000830152614bb881614b7c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614c1b603583613d35565b9150614c2682614bbf565b604082019050919050565b60006020820190508181036000830152614c4a81614c0e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c87601383613d35565b9150614c9282614c51565b602082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614d19603683613d35565b9150614d2482614cbd565b604082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b6000614d5a82613cb4565b9150614d6583613cb4565b925082821015614d7857614d77614203565b5b828203905092915050565b6000606082019050614d986000830186613f60565b614da56020830185613f60565b614db26040830184613f60565b949350505050565b600081905092915050565b50565b6000614dd5600083614dba565b9150614de082614dc5565b600082019050919050565b6000614df682614dc8565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e5c602183613d35565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614eff81613e17565b92915050565b600060208284031215614f1b57614f1a613caf565b5b6000614f2984828501614ef0565b91505092915050565b6000819050919050565b6000614f57614f52614f4d84614f32565b613ee6565b613cb4565b9050919050565b614f6781614f3c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614fa281613e05565b82525050565b6000614fb48383614f99565b60208301905092915050565b6000602082019050919050565b6000614fd882614f6d565b614fe28185614f78565b9350614fed83614f89565b8060005b8381101561501e5781516150058882614fa8565b975061501083614fc0565b925050600181019050614ff1565b5085935050505092915050565b600060a0820190506150406000830188613f60565b61504d6020830187614f5e565b818103604083015261505f8186614fcd565b905061506e606083018561400a565b61507b6080830184613f60565b9695505050505050565b600060c08201905061509a600083018961400a565b6150a76020830188613f60565b6150b46040830187614f5e565b6150c16060830186614f5e565b6150ce608083018561400a565b6150db60a0830184613f60565b979650505050505050565b6000815190506150f581613cbe565b92915050565b60008060006060848603121561511457615113613caf565b5b6000615122868287016150e6565b9350506020615133868287016150e6565b9250506040615144868287016150e6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207ba289ad83d80684a28be1ec15f5897c2626d5207640daf43986aae5f66bb34f64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80638da5cb5b11610190578063c18bc195116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbd578063f2fde38b14610be8578063f637434214610c11578063f8b45b0514610c3c5761030a565b8063dd62ed3e14610b2a578063e2f4560514610b67578063e884f26014610b925761030a565b8063c18bc19514610a1a578063c876d0b914610a43578063c8c8ebe414610a6e578063cfdbe82314610a99578063d257b34f14610ac2578063d85ba06314610aff5761030a565b8063a46e2ee811610149578063ae0a687511610123578063ae0a68751461095e578063b62496f514610989578063bbc0c742146109c6578063c0246668146109f15761030a565b8063a46e2ee8146108cd578063a9059cbb146108f8578063aacebbe3146109355761030a565b80638da5cb5b146107bd57806392136913146107e8578063924de9b71461081357806395d89b411461083c5780639a7a23d614610867578063a457c2d7146108905761030a565b8063395093511161024f5780636ddd171311610208578063751039fc116101e2578063751039fc146107135780637571336a1461073e57806375f0a874146107675780637bce5a04146107925761030a565b80636ddd17131461069457806370a08231146106bf578063715018a6146106fc5761030a565b8063395093511461057057806349bd5a5e146105ad5780634a62bb65146105d85780634fbee1931461060357806366ca9b83146106405780636a486a8e146106695761030a565b80631a8145bb116102bc578063231786a411610296578063231786a4146104b257806323b872dd146104dd57806327c8f8351461051a578063313ce567146105455761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806302dbd8f81461030f57806306fdde0314610338578063095ea7b31461036357806310d5de53146103a05780631694505e146103dd57806318160ddd146104085761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b5061033660048036038101906103319190613cea565b610c67565b005b34801561034457600080fd5b5061034d610d6c565b60405161035a9190613dc3565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190613e43565b610dfe565b6040516103979190613e9e565b60405180910390f35b3480156103ac57600080fd5b506103c760048036038101906103c29190613eb9565b610e1c565b6040516103d49190613e9e565b60405180910390f35b3480156103e957600080fd5b506103f2610e3c565b6040516103ff9190613f45565b60405180910390f35b34801561041457600080fd5b5061041d610e60565b60405161042a9190613f6f565b60405180910390f35b34801561043f57600080fd5b50610448610e6a565b6040516104559190613f6f565b60405180910390f35b34801561046a57600080fd5b50610473610e70565b6040516104809190613f6f565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab9190613f8a565b610e76565b005b3480156104be57600080fd5b506104c7610fa0565b6040516104d49190613f6f565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190613fb7565b610fa6565b6040516105119190613e9e565b60405180910390f35b34801561052657600080fd5b5061052f61107f565b60405161053c9190614019565b60405180910390f35b34801561055157600080fd5b5061055a611085565b6040516105679190614050565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190613e43565b61108e565b6040516105a49190613e9e565b60405180910390f35b3480156105b957600080fd5b506105c2611141565b6040516105cf9190614019565b60405180910390f35b3480156105e457600080fd5b506105ed611165565b6040516105fa9190613e9e565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190613eb9565b611178565b6040516106379190613e9e565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190613cea565b6111ce565b005b34801561067557600080fd5b5061067e6112d3565b60405161068b9190613f6f565b60405180910390f35b3480156106a057600080fd5b506106a96112d9565b6040516106b69190613e9e565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613eb9565b6112ec565b6040516106f39190613f6f565b60405180910390f35b34801561070857600080fd5b50610711611334565b005b34801561071f57600080fd5b5061072861148c565b6040516107359190613e9e565b60405180910390f35b34801561074a57600080fd5b5061076560048036038101906107609190614097565b611547565b005b34801561077357600080fd5b5061077c611639565b6040516107899190614019565b60405180910390f35b34801561079e57600080fd5b506107a761165f565b6040516107b49190613f6f565b60405180910390f35b3480156107c957600080fd5b506107d2611665565b6040516107df9190614019565b60405180910390f35b3480156107f457600080fd5b506107fd61168f565b60405161080a9190613f6f565b60405180910390f35b34801561081f57600080fd5b5061083a600480360381019061083591906140d7565b611695565b005b34801561084857600080fd5b50610851611749565b60405161085e9190613dc3565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190614097565b6117db565b005b34801561089c57600080fd5b506108b760048036038101906108b29190613e43565b61190f565b6040516108c49190613e9e565b60405180910390f35b3480156108d957600080fd5b506108e26119dc565b6040516108ef9190613f6f565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a9190613e43565b6119e2565b60405161092c9190613e9e565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190613eb9565b611a00565b005b34801561096a57600080fd5b50610973611b57565b6040516109809190613f6f565b60405180910390f35b34801561099557600080fd5b506109b060048036038101906109ab9190613eb9565b611b5d565b6040516109bd9190613e9e565b60405180910390f35b3480156109d257600080fd5b506109db611b7d565b6040516109e89190613e9e565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190614097565b611b90565b005b348015610a2657600080fd5b50610a416004803603810190610a3c9190613f8a565b611cd0565b005b348015610a4f57600080fd5b50610a58611dfa565b604051610a659190613e9e565b60405180910390f35b348015610a7a57600080fd5b50610a83611e0d565b604051610a909190613f6f565b60405180910390f35b348015610aa557600080fd5b50610ac06004803603810190610abb9190614104565b611e13565b005b348015610ace57600080fd5b50610ae96004803603810190610ae49190613f8a565b611f05565b604051610af69190613e9e565b60405180910390f35b348015610b0b57600080fd5b50610b14612075565b604051610b219190613f6f565b60405180910390f35b348015610b3657600080fd5b50610b516004803603810190610b4c9190614157565b61207b565b604051610b5e9190613f6f565b60405180910390f35b348015610b7357600080fd5b50610b7c612102565b604051610b899190613f6f565b60405180910390f35b348015610b9e57600080fd5b50610ba7612108565b604051610bb49190613e9e565b60405180910390f35b348015610bc957600080fd5b50610bd26121c3565b604051610bdf9190613f6f565b60405180910390f35b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190613eb9565b6121c9565b005b348015610c1d57600080fd5b50610c26612390565b604051610c339190613f6f565b60405180910390f35b348015610c4857600080fd5b50610c51612396565b604051610c5e9190613f6f565b60405180910390f35b610c6f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf5906141e3565b60405180910390fd5b8160118190555080601281905550601254601154610d1c9190614232565b60108190555060196010541115610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906142d4565b60405180910390fd5b5050565b606060038054610d7b90614323565b80601f0160208091040260200160405190810160405280929190818152602001828054610da790614323565b8015610df45780601f10610dc957610100808354040283529160200191610df4565b820191906000526020600020905b815481529060010190602001808311610dd757829003601f168201915b5050505050905090565b6000610e12610e0b6123fa565b8484612402565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b60135481565b610e7e6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906141e3565b60405180910390fd5b670de0b6b3a76400006103e86001610f23610e60565b610f2d9190614355565b610f3791906143de565b610f4191906143de565b811015610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a90614481565b60405180910390fd5b670de0b6b3a764000081610f979190614355565b60078190555050565b60175481565b6000610fb38484846125cd565b61107484610fbf6123fa565b61106f8560405180606001604052806028815260200161517560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110256123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b612402565b600190509392505050565b61dead81565b60006012905090565b600061113761109b6123fa565b8461113285600160006110ac6123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c90919063ffffffff16565b612402565b6001905092915050565b7f000000000000000000000000e7d18f48e494ea93bd12624076cf0d18efc6c10081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111d66123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c906141e3565b60405180910390fd5b81600e8190555080600f81905550600f54600e546112839190614232565b600d819055506014600d5411156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c6906144ed565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61133c6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906141e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006114966123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151c906141e3565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61154f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d5906141e3565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61169d6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611723906141e3565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461175890614323565b80601f016020809104026020016040519081016040528092919081815260200182805461178490614323565b80156117d15780601f106117a6576101008083540402835291602001916117d1565b820191906000526020600020905b8154815290600101906020018083116117b457829003601f168201915b5050505050905090565b6117e36123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611869906141e3565b60405180910390fd5b7f000000000000000000000000e7d18f48e494ea93bd12624076cf0d18efc6c10073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f89061457f565b60405180910390fd5b61190b828261329e565b5050565b60006119d261191c6123fa565b846119cd8560405180606001604052806025815260200161519d60259139600160006119466123fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b612402565b6001905092915050565b60155481565b60006119f66119ef6123fa565b84846125cd565b6001905092915050565b611a086123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8e906141e3565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611b986123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e906141e3565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cc49190613e9e565b60405180910390a25050565b611cd86123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e906141e3565b60405180910390fd5b670de0b6b3a76400006103e86005611d7d610e60565b611d879190614355565b611d9191906143de565b611d9b91906143de565b811015611ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd490614611565b60405180910390fd5b670de0b6b3a764000081611df19190614355565b60098190555050565b600c60009054906101000a900460ff1681565b60075481565b611e1b6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea1906141e3565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555081601581905550806016819055508243611efa9190614232565b601781905550505050565b6000611f0f6123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f95906141e3565b60405180910390fd5b620186a06001611fac610e60565b611fb69190614355565b611fc091906143de565b821015612002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff9906146a3565b60405180910390fd5b6103e8600561200f610e60565b6120199190614355565b61202391906143de565b821115612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c90614735565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b60006121126123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906141e3565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600f5481565b6121d16123fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612257906141e3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c7906147c7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b60008082846123ab9190614232565b9050838110156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614833565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612472576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612469906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d990614957565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125c09190613f6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906149e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614a7b565b60405180910390fd5b60008114156126c7576126c28383600061333f565b613235565b600a60009054906101000a900460ff1615612d8a576126e4611665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127525750612722611665565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561278b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127c5575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127de5750600560149054906101000a900460ff16155b15612d8957600a60019054906101000a900460ff166128d857601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128985750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ce90614ae7565b60405180910390fd5b5b600c60009054906101000a900460ff1615612aa0576128f5611665565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561297c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d457507f000000000000000000000000e7d18f48e494ea93bd12624076cf0d18efc6c10073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612a9f5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5190614b9f565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b435750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bea57600754811115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8490614c31565b60405180910390fd5b600954612b99836112ec565b82612ba49190614232565b1115612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614c9d565b60405180910390fd5b612d88565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8d5750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdc57600754811115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614d2f565b60405180910390fd5b612d87565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d8657600954612d39836112ec565b82612d449190614232565b1115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614c9d565b60405180910390fd5b5b5b5b5b5b6000612d95306112ec565b905060006008548210159050808015612dba5750600a60029054906101000a900460ff165b8015612dd35750600560149054906101000a900460ff16155b8015612e295750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e7f5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ed55750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f19576001600560146101000a81548160ff021916908315150217905550612efd6135d4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fcf5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd957600090505b60008115613225576000601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303e57506000601054115b156130f3576017544310156130535760165490505b6130866064613078836010546130699190614232565b896137e190919063ffffffff16565b61385c90919063ffffffff16565b9150601054601254836130999190614355565b6130a391906143de565b601460008282546130b49190614232565b92505081905550601054601154836130cc9190614355565b6130d691906143de565b601360008282546130e79190614232565b92505081905550613200565b601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314e57506000600d54115b156131ff576017544310156131635760165490505b613196606461318883600d546131799190614232565b896137e190919063ffffffff16565b61385c90919063ffffffff16565b9150600d54600f54836131a99190614355565b6131b391906143de565b601460008282546131c49190614232565b92505081905550600d54600e54836131dc9190614355565b6131e691906143de565b601360008282546131f79190614232565b925050819055505b5b60008211156132155761321488308461333f565b5b81866132219190614d4f565b9550505b61323087878761333f565b505050505b505050565b6000838311158290613282576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132799190613dc3565b60405180910390fd5b50600083856132919190614d4f565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a6906149e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561341f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341690614a7b565b60405180910390fd5b61342a8383836138a6565b6134958160405180606001604052806026815260200161514f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461323a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613528816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c79190613f6f565b60405180910390a3505050565b60006135df306112ec565b905060006013546014546135f39190614232565b90506000808314806136055750600082145b15613612575050506137df565b60146008546136219190614355565b83111561363a5760146008546136379190614355565b92505b60006002836014548661364d9190614355565b61365791906143de565b61366191906143de565b9050600061367882866138ab90919063ffffffff16565b90506000479050613688826138f5565b600061369d82476138ab90919063ffffffff16565b905060006136c8876136ba601354856137e190919063ffffffff16565b61385c90919063ffffffff16565b9050600081836136d89190614d4f565b9050600060148190555060006013819055506000861180156136fa5750600081115b15613747576137098682613b41565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858260145460405161373e93929190614d83565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161378d90614deb565b60006040518083038185875af1925050503d80600081146137ca576040519150601f19603f3d011682016040523d82523d6000602084013e6137cf565b606091505b5050809750505050505050505050505b565b6000808314156137f45760009050613856565b600082846138029190614355565b905082848261381191906143de565b14613851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384890614e72565b60405180910390fd5b809150505b92915050565b600061389e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c4c565b905092915050565b505050565b60006138ed83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061323a565b905092915050565b6000600267ffffffffffffffff81111561391257613911614e92565b5b6040519080825280602002602001820160405280156139405781602001602082028036833780820191505090505b509050308160008151811061395857613957614ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156139f857600080fd5b505afa158015613a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a309190614f05565b81600181518110613a4457613a43614ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612402565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b0b95949392919061502b565b600060405180830381600087803b158015613b2557600080fd5b505af1158015613b39573d6000803e3d6000fd5b505050505050565b613b6c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612402565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613bf396959493929190615085565b6060604051808303818588803b158015613c0c57600080fd5b505af1158015613c20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c4591906150fb565b5050505050565b60008083118290613c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8a9190613dc3565b60405180910390fd5b5060008385613ca291906143de565b9050809150509392505050565b600080fd5b6000819050919050565b613cc781613cb4565b8114613cd257600080fd5b50565b600081359050613ce481613cbe565b92915050565b60008060408385031215613d0157613d00613caf565b5b6000613d0f85828601613cd5565b9250506020613d2085828601613cd5565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d64578082015181840152602081019050613d49565b83811115613d73576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d9582613d2a565b613d9f8185613d35565b9350613daf818560208601613d46565b613db881613d79565b840191505092915050565b60006020820190508181036000830152613ddd8184613d8a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b8114613e2b57600080fd5b50565b600081359050613e3d81613e17565b92915050565b60008060408385031215613e5a57613e59613caf565b5b6000613e6885828601613e2e565b9250506020613e7985828601613cd5565b9150509250929050565b60008115159050919050565b613e9881613e83565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b600060208284031215613ecf57613ece613caf565b5b6000613edd84828501613e2e565b91505092915050565b6000819050919050565b6000613f0b613f06613f0184613de5565b613ee6565b613de5565b9050919050565b6000613f1d82613ef0565b9050919050565b6000613f2f82613f12565b9050919050565b613f3f81613f24565b82525050565b6000602082019050613f5a6000830184613f36565b92915050565b613f6981613cb4565b82525050565b6000602082019050613f846000830184613f60565b92915050565b600060208284031215613fa057613f9f613caf565b5b6000613fae84828501613cd5565b91505092915050565b600080600060608486031215613fd057613fcf613caf565b5b6000613fde86828701613e2e565b9350506020613fef86828701613e2e565b925050604061400086828701613cd5565b9150509250925092565b61401381613e05565b82525050565b600060208201905061402e600083018461400a565b92915050565b600060ff82169050919050565b61404a81614034565b82525050565b60006020820190506140656000830184614041565b92915050565b61407481613e83565b811461407f57600080fd5b50565b6000813590506140918161406b565b92915050565b600080604083850312156140ae576140ad613caf565b5b60006140bc85828601613e2e565b92505060206140cd85828601614082565b9150509250929050565b6000602082840312156140ed576140ec613caf565b5b60006140fb84828501614082565b91505092915050565b60008060006060848603121561411d5761411c613caf565b5b600061412b86828701613cd5565b935050602061413c86828701613cd5565b925050604061414d86828701613cd5565b9150509250925092565b6000806040838503121561416e5761416d613caf565b5b600061417c85828601613e2e565b925050602061418d85828601613e2e565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141cd602083613d35565b91506141d882614197565b602082019050919050565b600060208201905081810360008301526141fc816141c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061423d82613cb4565b915061424883613cb4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561427d5761427c614203565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006142be601d83613d35565b91506142c982614288565b602082019050919050565b600060208201905081810360008301526142ed816142b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061433b57607f821691505b6020821081141561434f5761434e6142f4565b5b50919050565b600061436082613cb4565b915061436b83613cb4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a4576143a3614203565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143e982613cb4565b91506143f483613cb4565b925082614404576144036143af565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061446b602f83613d35565b91506144768261440f565b604082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006144d7601d83613d35565b91506144e2826144a1565b602082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614569603983613d35565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006145fb602483613d35565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061468d603583613d35565b915061469882614631565b604082019050919050565b600060208201905081810360008301526146bc81614680565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061471f603483613d35565b915061472a826146c3565b604082019050919050565b6000602082019050818103600083015261474e81614712565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b1602683613d35565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061481d601b83613d35565b9150614828826147e7565b602082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148af602483613d35565b91506148ba82614853565b604082019050919050565b600060208201905081810360008301526148de816148a2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614941602283613d35565b915061494c826148e5565b604082019050919050565b6000602082019050818103600083015261497081614934565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149d3602583613d35565b91506149de82614977565b604082019050919050565b60006020820190508181036000830152614a02816149c6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a65602383613d35565b9150614a7082614a09565b604082019050919050565b60006020820190508181036000830152614a9481614a58565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ad1601683613d35565b9150614adc82614a9b565b602082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614b89604983613d35565b9150614b9482614b07565b606082019050919050565b60006020820190508181036000830152614bb881614b7c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614c1b603583613d35565b9150614c2682614bbf565b604082019050919050565b60006020820190508181036000830152614c4a81614c0e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c87601383613d35565b9150614c9282614c51565b602082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614d19603683613d35565b9150614d2482614cbd565b604082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b6000614d5a82613cb4565b9150614d6583613cb4565b925082821015614d7857614d77614203565b5b828203905092915050565b6000606082019050614d986000830186613f60565b614da56020830185613f60565b614db26040830184613f60565b949350505050565b600081905092915050565b50565b6000614dd5600083614dba565b9150614de082614dc5565b600082019050919050565b6000614df682614dc8565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e5c602183613d35565b9150614e6782614e00565b604082019050919050565b60006020820190508181036000830152614e8b81614e4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614eff81613e17565b92915050565b600060208284031215614f1b57614f1a613caf565b5b6000614f2984828501614ef0565b91505092915050565b6000819050919050565b6000614f57614f52614f4d84614f32565b613ee6565b613cb4565b9050919050565b614f6781614f3c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614fa281613e05565b82525050565b6000614fb48383614f99565b60208301905092915050565b6000602082019050919050565b6000614fd882614f6d565b614fe28185614f78565b9350614fed83614f89565b8060005b8381101561501e5781516150058882614fa8565b975061501083614fc0565b925050600181019050614ff1565b5085935050505092915050565b600060a0820190506150406000830188613f60565b61504d6020830187614f5e565b818103604083015261505f8186614fcd565b905061506e606083018561400a565b61507b6080830184613f60565b9695505050505050565b600060c08201905061509a600083018961400a565b6150a76020830188613f60565b6150b46040830187614f5e565b6150c16060830186614f5e565b6150ce608083018561400a565b6150db60a0830184613f60565b979650505050505050565b6000815190506150f581613cbe565b92915050565b60008060006060848603121561511457615113613caf565b5b6000615122868287016150e6565b9350506020615133868287016150e6565b9250506040615144868287016150e6565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207ba289ad83d80684a28be1ec15f5897c2626d5207640daf43986aae5f66bb34f64736f6c63430008090033

Deployed Bytecode Sourcemap

29546:14920:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36241:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7742:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9909:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30888:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29621:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8862:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30596:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30556;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35093:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30705:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10560:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8704:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11324:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29679:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29974:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37426:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35919:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30439:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30054:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9033:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22207:148;;;;;;;;;;;;;:::i;:::-;;34306:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35562:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29816:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30359;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21565:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30474:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35806:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7961:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36758:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12045:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30638:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9373:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37206:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30671:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31110:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30014:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36568:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35335:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30277:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29859:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33946:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34700:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30325:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9611:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34491:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30396:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22510:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30512:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29941:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36241:319;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36360:13:::1;36341:16;:32;;;;36403:13;36384:16;:32;;;;36464:16;;36445;;:35;;;;:::i;:::-;36429:13;:51;;;;36516:2;36499:13;;:19;;36491:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36241:319:::0;;:::o;7742:100::-;7796:13;7829:5;7822:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7742:100;:::o;9909:169::-;9992:4;10009:39;10018:12;:10;:12::i;:::-;10032:7;10041:6;10009:8;:39::i;:::-;10066:4;10059:11;;9909:169;;;;:::o;30888:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29621:51::-;;;:::o;8862:108::-;8923:7;8950:12;;8943:19;;8862:108;:::o;30596:33::-;;;;:::o;30556:::-;;;;:::o;35093:234::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35212:4:::1;35206;35202:1;35186:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35185:31;;;;:::i;:::-;35175:6;:41;;35167:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35312:6;35302;:17;;;;:::i;:::-;35279:20;:40;;;;35093:234:::0;:::o;30705:29::-;;;;:::o;10560:355::-;10700:4;10717:36;10727:6;10735:9;10746:6;10717:9;:36::i;:::-;10764:121;10773:6;10781:12;:10;:12::i;:::-;10795:89;10833:6;10795:89;;;;;;;;;;;;;;;;;:11;:19;10807:6;10795:19;;;;;;;;;;;;;;;:33;10815:12;:10;:12::i;:::-;10795:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10764:8;:121::i;:::-;10903:4;10896:11;;10560:355;;;;;:::o;29724:53::-;29770:6;29724:53;:::o;8704:93::-;8762:5;8787:2;8780:9;;8704:93;:::o;11324:218::-;11412:4;11429:83;11438:12;:10;:12::i;:::-;11452:7;11461:50;11500:10;11461:11;:25;11473:12;:10;:12::i;:::-;11461:25;;;;;;;;;;;;;;;:34;11487:7;11461:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11429:8;:83::i;:::-;11530:4;11523:11;;11324:218;;;;:::o;29679:38::-;;;:::o;29974:33::-;;;;;;;;;;;;;:::o;37426:125::-;37491:4;37515:19;:28;37535:7;37515:28;;;;;;;;;;;;;;;;;;;;;;;;;37508:35;;37426:125;;;:::o;35919:310::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36036:13:::1;36018:15;:31;;;;36078:13;36060:15;:31;;;;36135:15;;36117;;:33;;;;:::i;:::-;36102:12;:48;;;;36185:2;36169:12;;:18;;36161:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35919:310:::0;;:::o;30439:28::-;;;;:::o;30054:31::-;;;;;;;;;;;;;:::o;9033:127::-;9107:7;9134:9;:18;9144:7;9134:18;;;;;;;;;;;;;;;;9127:25;;9033:127;;;:::o;22207:148::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22314:1:::1;22277:40;;22298:6;;;;;;;;;;;22277:40;;;;;;;;;;;;22345:1;22328:6;;:19;;;;;;;;;;;;;;;;;;22207:148::o:0;34306:120::-;34358:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34391:5:::1;34374:14;;:22;;;;;;;;;;;;;;;;;;34414:4;34407:11;;34306:120:::0;:::o;35562:144::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35694:4:::1;35652:31;:39;35684:6;35652:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35562:144:::0;;:::o;29816:30::-;;;;;;;;;;;;;:::o;30359:::-;;;;:::o;21565:79::-;21603:7;21630:6;;;;;;;;;;;21623:13;;21565:79;:::o;30474:31::-;;;;:::o;35806:101::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35892:7:::1;35878:11;;:21;;;;;;;;;;;;;;;;;;35806:101:::0;:::o;7961:104::-;8017:13;8050:7;8043:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7961:104;:::o;36758:244::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36865:13:::1;36857:21;;:4;:21;;;;36849:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;36953:41;36982:4;36988:5;36953:28;:41::i;:::-;36758:244:::0;;:::o;12045:269::-;12138:4;12155:129;12164:12;:10;:12::i;:::-;12178:7;12187:96;12226:15;12187:96;;;;;;;;;;;;;;;;;:11;:25;12199:12;:10;:12::i;:::-;12187:25;;;;;;;;;;;;;;;:34;12213:7;12187:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12155:8;:129::i;:::-;12302:4;12295:11;;12045:269;;;;:::o;30638:26::-;;;;:::o;9373:175::-;9459:4;9476:42;9486:12;:10;:12::i;:::-;9500:9;9511:6;9476:9;:42::i;:::-;9536:4;9529:11;;9373:175;;;;:::o;37206:208::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37343:15:::1;;;;;;;;;;;37300:59;;37323:18;37300:59;;;;;;;;;;;;37388:18;37370:15;;:36;;;;;;;;;;;;;;;;;;37206:208:::0;:::o;30671:27::-;;;;:::o;31110:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30014:33::-;;;;;;;;;;;;;:::o;36568:182::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36684:8:::1;36653:19;:28;36673:7;36653:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36724:7;36708:34;;;36733:8;36708:34;;;;;;:::i;:::-;;;;;;;;36568:182:::0;;:::o;35335:215::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35457:4:::1;35451;35447:1;35431:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35430:31;;;;:::i;:::-;35420:6;:41;;35412:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35535:6;35525;:17;;;;:::i;:::-;35513:9;:29;;;;35335:215:::0;:::o;30277:39::-;;;;;;;;;;;;;:::o;29859:35::-;;;;:::o;33946:304::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34080:4:::1;34064:13;;:20;;;;;;;;;;;;;;;;;;34109:4;34095:11;;:18;;;;;;;;;;;;;;;;;;34138:12;34124:11;:26;;;;34176:13;34161:12;:28;;;;34232:10;34217:12;:25;;;;:::i;:::-;34200:14;:42;;;;33946:304:::0;;;:::o;34700:381::-;34781:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34837:6:::1;34833:1;34817:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34804:9;:39;;34796:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34952:4;34948:1;34932:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34919:9;:37;;34911:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35044:9;35023:18;:30;;;;35070:4;35063:11;;34700:381:::0;;;:::o;30325:27::-;;;;:::o;9611:151::-;9700:7;9727:11;:18;9739:5;9727:18;;;;;;;;;;;;;;;:27;9746:7;9727:27;;;;;;;;;;;;;;;;9720:34;;9611:151;;;;:::o;29901:33::-;;;;:::o;34491:134::-;34551:4;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34590:5:::1;34567:20;;:28;;;;;;;;;;;;;;;;;;34613:4;34606:11;;34491:134:::0;:::o;30396:30::-;;;;:::o;22510:244::-;21787:12;:10;:12::i;:::-;21777:22;;:6;;;;;;;;;;;:22;;;21769:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22619:1:::1;22599:22;;:8;:22;;;;22591:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22709:8;22680:38;;22701:6;;;;;;;;;;;22680:38;;;;;;;;;;;;22738:8;22729:6;;:17;;;;;;;;;;;;;;;;;;22510:244:::0;:::o;30512:31::-;;;;:::o;29941:24::-;;;;:::o;16609:181::-;16667:7;16687:9;16703:1;16699;:5;;;;:::i;:::-;16687:17;;16728:1;16723;:6;;16715:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16781:1;16774:8;;;16609:181;;;;:::o;378:98::-;431:7;458:10;451:17;;378:98;:::o;15231:380::-;15384:1;15367:19;;:5;:19;;;;15359:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15465:1;15446:21;;:7;:21;;;;15438:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15549:6;15519:11;:18;15531:5;15519:18;;;;;;;;;;;;;;;:27;15538:7;15519:27;;;;;;;;;;;;;;;:36;;;;15587:7;15571:32;;15580:5;15571:32;;;15596:6;15571:32;;;;;;:::i;:::-;;;;;;;;15231:380;;;:::o;37613:4223::-;37761:1;37745:18;;:4;:18;;;;37737:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37838:1;37824:16;;:2;:16;;;;37816:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37915:1;37905:6;:11;37902:92;;;37933:28;37949:4;37955:2;37959:1;37933:15;:28::i;:::-;37976:7;;37902:92;38017:14;;;;;;;;;;;38014:1841;;;38077:7;:5;:7::i;:::-;38069:15;;:4;:15;;;;:49;;;;;38111:7;:5;:7::i;:::-;38105:13;;:2;:13;;;;38069:49;:86;;;;;38153:1;38139:16;;:2;:16;;;;38069:86;:128;;;;;38190:6;38176:21;;:2;:21;;;;38069:128;:158;;;;;38219:8;;;;;;;;;;;38218:9;38069:158;38047:1797;;;38265:13;;;;;;;;;;;38261:148;;38310:19;:25;38330:4;38310:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38339:19;:23;38359:2;38339:23;;;;;;;;;;;;;;;;;;;;;;;;;38310:52;38302:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38261:148;38567:20;;;;;;;;;;;38563:423;;;38621:7;:5;:7::i;:::-;38615:13;;:2;:13;;;;:47;;;;;38646:15;38632:30;;:2;:30;;;;38615:47;:79;;;;;38680:13;38666:28;;:2;:28;;;;38615:79;38611:356;;;38772:12;38730:28;:39;38759:9;38730:39;;;;;;;;;;;;;;;;:54;38722:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38931:12;38889:28;:39;38918:9;38889:39;;;;;;;;;;;;;;;:54;;;;38611:356;38563:423;39055:25;:31;39081:4;39055:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39091:31;:35;39123:2;39091:35;;;;;;;;;;;;;;;;;;;;;;;;;39090:36;39055:71;39051:778;;;39173:20;;39163:6;:30;;39155:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39312:9;;39295:13;39305:2;39295:9;:13::i;:::-;39286:6;:22;;;;:::i;:::-;:35;;39278:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39051:778;;;39439:25;:29;39465:2;39439:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39473:31;:37;39505:4;39473:37;;;;;;;;;;;;;;;;;;;;;;;;;39472:38;39439:71;39435:394;;;39557:20;;39547:6;:30;;39539:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39435:394;;;39683:31;:35;39715:2;39683:35;;;;;;;;;;;;;;;;;;;;;;;;;39679:150;;39776:9;;39759:13;39769:2;39759:9;:13::i;:::-;39750:6;:22;;;;:::i;:::-;:35;;39742:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39679:150;39435:394;39051:778;38047:1797;38014:1841;39889:28;39920:24;39938:4;39920:9;:24::i;:::-;39889:55;;39965:12;40004:18;;39980:20;:42;;39965:57;;40053:7;:35;;;;;40077:11;;;;;;;;;;;40053:35;:61;;;;;40106:8;;;;;;;;;;;40105:9;40053:61;:110;;;;;40132:25;:31;40158:4;40132:31;;;;;;;;;;;;;;;;;;;;;;;;;40131:32;40053:110;:153;;;;;40181:19;:25;40201:4;40181:25;;;;;;;;;;;;;;;;;;;;;;;;;40180:26;40053:153;:194;;;;;40224:19;:23;40244:2;40224:23;;;;;;;;;;;;;;;;;;;;;;;;;40223:24;40053:194;40035:338;;;40285:4;40274:8;;:15;;;;;;;;;;;;;;;;;;40318:10;:8;:10::i;:::-;40356:5;40345:8;;:16;;;;;;;;;;;;;;;;;;40035:338;40393:12;40409:8;;;;;;;;;;;40408:9;40393:24;;40518:19;:25;40538:4;40518:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40547:19;:23;40567:2;40547:23;;;;;;;;;;;;;;;;;;;;;;;;;40518:52;40515:99;;;40597:5;40587:15;;40515:99;40634:12;40738:7;40735:1048;;;40761:16;40824:25;:29;40850:2;40824:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40873:1;40857:13;;:17;40824:50;40820:794;;;40912:14;;40897:12;:29;40894:61;;;40941:12;;40930:23;;40894:61;40980:45;41021:3;40980:36;41007:8;40991:13;;:24;;;;:::i;:::-;40980:6;:10;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;40973:52;;41092:13;;41073:16;;41066:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41044:18;;:61;;;;;;;:::i;:::-;;;;;;;;41172:13;;41153:16;;41146:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41124:18;;:61;;;;;;;:::i;:::-;;;;;;;;40820:794;;;41246:25;:31;41272:4;41246:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41296:1;41281:12;;:16;41246:51;41243:371;;;41336:14;;41321:12;:29;41318:61;;;41365:12;;41354:23;;41318:61;41401:44;41441:3;41401:35;41427:8;41412:12;;:23;;;;:::i;:::-;41401:6;:10;;:35;;;;:::i;:::-;:39;;:44;;;;:::i;:::-;41394:51;;41508:12;;41490:15;;41483:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41461:18;;:59;;;;;;;:::i;:::-;;;;;;;;41586:12;;41568:15;;41561:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41539:18;;:59;;;;;;;:::i;:::-;;;;;;;;41243:371;40820:794;41652:1;41645:4;:8;41642:93;;;41677:42;41693:4;41707;41714;41677:15;:42::i;:::-;41642:93;41767:4;41757:14;;;;;:::i;:::-;;;40746:1037;40735:1048;41795:33;41811:4;41817:2;41821:6;41795:15;:33::i;:::-;37726:4110;;;;37613:4223;;;;:::o;17512:192::-;17598:7;17631:1;17626;:6;;17634:12;17618:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17658:9;17674:1;17670;:5;;;;:::i;:::-;17658:17;;17695:1;17688:8;;;17512:192;;;;;:::o;37010:188::-;37127:5;37093:25;:31;37119:4;37093:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37184:5;37150:40;;37178:4;37150:40;;;;;;;;;;;;37010:188;;:::o;12804:573::-;12962:1;12944:20;;:6;:20;;;;12936:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13046:1;13025:23;;:9;:23;;;;13017:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13101:47;13122:6;13130:9;13141:6;13101:20;:47::i;:::-;13181:71;13203:6;13181:71;;;;;;;;;;;;;;;;;:9;:17;13191:6;13181:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13161:9;:17;13171:6;13161:17;;;;;;;;;;;;;;;:91;;;;13286:32;13311:6;13286:9;:20;13296:9;13286:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13263:9;:20;13273:9;13263:20;;;;;;;;;;;;;;;:55;;;;13351:9;13334:35;;13343:6;13334:35;;;13362:6;13334:35;;;;;;:::i;:::-;;;;;;;;12804:573;;;:::o;42998:1459::-;43037:23;43063:24;43081:4;43063:9;:24::i;:::-;43037:50;;43098:25;43147:18;;43126;;:39;;;;:::i;:::-;43098:67;;43176:12;43231:1;43212:15;:20;:46;;;;43257:1;43236:17;:22;43212:46;43209:60;;;43261:7;;;;;43209:60;43323:2;43302:18;;:23;;;;:::i;:::-;43284:15;:41;43281:111;;;43378:2;43357:18;;:23;;;;:::i;:::-;43339:41;;43281:111;43461:23;43546:1;43526:17;43505:18;;43487:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43461:86;;43558:26;43587:36;43607:15;43587;:19;;:36;;;;:::i;:::-;43558:65;;43644:25;43672:21;43644:49;;43706:36;43723:18;43706:16;:36::i;:::-;43764:18;43785:44;43811:17;43785:21;:25;;:44;;;;:::i;:::-;43764:65;;43850:23;43876:57;43915:17;43876:34;43891:18;;43876:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43850:83;;43964:23;44003:15;43990:10;:28;;;;:::i;:::-;43964:54;;44070:1;44049:18;:22;;;;44103:1;44082:18;:22;;;;44154:1;44136:15;:19;:42;;;;;44177:1;44159:15;:19;44136:42;44133:210;;;44194:46;44207:15;44224;44194:12;:46::i;:::-;44260:71;44275:18;44295:15;44312:18;;44260:71;;;;;;;;:::i;:::-;;;;;;;;44133:210;44394:15;;;;;;;;;;;44386:29;;44423:21;44386:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44373:76;;;;;43026:1431;;;;;;;;;42998:1459;:::o;17963:471::-;18021:7;18271:1;18266;:6;18262:47;;;18296:1;18289:8;;;;18262:47;18321:9;18337:1;18333;:5;;;;:::i;:::-;18321:17;;18366:1;18361;18357;:5;;;;:::i;:::-;:10;18349:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18425:1;18418:8;;;17963:471;;;;;:::o;18910:132::-;18968:7;18995:39;18999:1;19002;18995:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18988:46;;18910:132;;;;:::o;16214:125::-;;;;:::o;17073:136::-;17131:7;17158:43;17162:1;17165;17158:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17151:50;;17073:136;;;;:::o;41844:601::-;41972:21;42010:1;41996:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41972:40;;42041:4;42023;42028:1;42023:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42067:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42057:4;42062:1;42057:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42102:62;42119:4;42134:15;42152:11;42102:8;:62::i;:::-;42203:15;:66;;;42284:11;42310:1;42354:4;42381;42401:15;42203:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41899:546;41844:601;:::o;42469:521::-;42617:62;42634:4;42649:15;42667:11;42617:8;:62::i;:::-;42722:15;:31;;;42761:9;42794:4;42814:11;42840:1;42883;42926:15;;;;;;;;;;;42956;42722:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42469:521;;:::o;19538:278::-;19624:7;19656:1;19652;:5;19659:12;19644:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19683:9;19699:1;19695;:5;;;;:::i;:::-;19683:17;;19807:1;19800:8;;;19538:278;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:118::-;6686:24;6704:5;6686:24;:::i;:::-;6681:3;6674:37;6599:118;;:::o;6723:222::-;6816:4;6854:2;6843:9;6839:18;6831:26;;6867:71;6935:1;6924:9;6920:17;6911:6;6867:71;:::i;:::-;6723:222;;;;:::o;6951:86::-;6986:7;7026:4;7019:5;7015:16;7004:27;;6951:86;;;:::o;7043:112::-;7126:22;7142:5;7126:22;:::i;:::-;7121:3;7114:35;7043:112;;:::o;7161:214::-;7250:4;7288:2;7277:9;7273:18;7265:26;;7301:67;7365:1;7354:9;7350:17;7341:6;7301:67;:::i;:::-;7161:214;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:468::-;7707:6;7715;7764:2;7752:9;7743:7;7739:23;7735:32;7732:119;;;7770:79;;:::i;:::-;7732:119;7890:1;7915:53;7960:7;7951:6;7940:9;7936:22;7915:53;:::i;:::-;7905:63;;7861:117;8017:2;8043:50;8085:7;8076:6;8065:9;8061:22;8043:50;:::i;:::-;8033:60;;7988:115;7642:468;;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:619::-;8522:6;8530;8538;8587:2;8575:9;8566:7;8562:23;8558:32;8555:119;;;8593:79;;:::i;:::-;8555:119;8713:1;8738:53;8783:7;8774:6;8763:9;8759:22;8738:53;:::i;:::-;8728:63;;8684:117;8840:2;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8811:118;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8445:619;;;;;:::o;9070:474::-;9138:6;9146;9195:2;9183:9;9174:7;9170:23;9166:32;9163:119;;;9201:79;;:::i;:::-;9163:119;9321:1;9346:53;9391:7;9382:6;9371:9;9367:22;9346:53;:::i;:::-;9336:63;;9292:117;9448:2;9474:53;9519:7;9510:6;9499:9;9495:22;9474:53;:::i;:::-;9464:63;;9419:118;9070:474;;;;;:::o;9550:182::-;9690:34;9686:1;9678:6;9674:14;9667:58;9550:182;:::o;9738:366::-;9880:3;9901:67;9965:2;9960:3;9901:67;:::i;:::-;9894:74;;9977:93;10066:3;9977:93;:::i;:::-;10095:2;10090:3;10086:12;10079:19;;9738:366;;;:::o;10110:419::-;10276:4;10314:2;10303:9;10299:18;10291:26;;10363:9;10357:4;10353:20;10349:1;10338:9;10334:17;10327:47;10391:131;10517:4;10391:131;:::i;:::-;10383:139;;10110:419;;;:::o;10535:180::-;10583:77;10580:1;10573:88;10680:4;10677:1;10670:15;10704:4;10701:1;10694:15;10721:305;10761:3;10780:20;10798:1;10780:20;:::i;:::-;10775:25;;10814:20;10832:1;10814:20;:::i;:::-;10809:25;;10968:1;10900:66;10896:74;10893:1;10890:81;10887:107;;;10974:18;;:::i;:::-;10887:107;11018:1;11015;11011:9;11004:16;;10721:305;;;;:::o;11032:179::-;11172:31;11168:1;11160:6;11156:14;11149:55;11032:179;:::o;11217:366::-;11359:3;11380:67;11444:2;11439:3;11380:67;:::i;:::-;11373:74;;11456:93;11545:3;11456:93;:::i;:::-;11574:2;11569:3;11565:12;11558:19;;11217:366;;;:::o;11589:419::-;11755:4;11793:2;11782:9;11778:18;11770:26;;11842:9;11836:4;11832:20;11828:1;11817:9;11813:17;11806:47;11870:131;11996:4;11870:131;:::i;:::-;11862:139;;11589:419;;;:::o;12014:180::-;12062:77;12059:1;12052:88;12159:4;12156:1;12149:15;12183:4;12180:1;12173:15;12200:320;12244:6;12281:1;12275:4;12271:12;12261:22;;12328:1;12322:4;12318:12;12349:18;12339:81;;12405:4;12397:6;12393:17;12383:27;;12339:81;12467:2;12459:6;12456:14;12436:18;12433:38;12430:84;;;12486:18;;:::i;:::-;12430:84;12251:269;12200:320;;;:::o;12526:348::-;12566:7;12589:20;12607:1;12589:20;:::i;:::-;12584:25;;12623:20;12641:1;12623:20;:::i;:::-;12618:25;;12811:1;12743:66;12739:74;12736:1;12733:81;12728:1;12721:9;12714:17;12710:105;12707:131;;;12818:18;;:::i;:::-;12707:131;12866:1;12863;12859:9;12848:20;;12526:348;;;;:::o;12880:180::-;12928:77;12925:1;12918:88;13025:4;13022:1;13015:15;13049:4;13046:1;13039:15;13066:185;13106:1;13123:20;13141:1;13123:20;:::i;:::-;13118:25;;13157:20;13175:1;13157:20;:::i;:::-;13152:25;;13196:1;13186:35;;13201:18;;:::i;:::-;13186:35;13243:1;13240;13236:9;13231:14;;13066:185;;;;:::o;13257:234::-;13397:34;13393:1;13385:6;13381:14;13374:58;13466:17;13461:2;13453:6;13449:15;13442:42;13257:234;:::o;13497:366::-;13639:3;13660:67;13724:2;13719:3;13660:67;:::i;:::-;13653:74;;13736:93;13825:3;13736:93;:::i;:::-;13854:2;13849:3;13845:12;13838:19;;13497:366;;;:::o;13869:419::-;14035:4;14073:2;14062:9;14058:18;14050:26;;14122:9;14116:4;14112:20;14108:1;14097:9;14093:17;14086:47;14150:131;14276:4;14150:131;:::i;:::-;14142:139;;13869:419;;;:::o;14294:179::-;14434:31;14430:1;14422:6;14418:14;14411:55;14294:179;:::o;14479:366::-;14621:3;14642:67;14706:2;14701:3;14642:67;:::i;:::-;14635:74;;14718:93;14807:3;14718:93;:::i;:::-;14836:2;14831:3;14827:12;14820:19;;14479:366;;;:::o;14851:419::-;15017:4;15055:2;15044:9;15040:18;15032:26;;15104:9;15098:4;15094:20;15090:1;15079:9;15075:17;15068:47;15132:131;15258:4;15132:131;:::i;:::-;15124:139;;14851:419;;;:::o;15276:244::-;15416:34;15412:1;15404:6;15400:14;15393:58;15485:27;15480:2;15472:6;15468:15;15461:52;15276:244;:::o;15526:366::-;15668:3;15689:67;15753:2;15748:3;15689:67;:::i;:::-;15682:74;;15765:93;15854:3;15765:93;:::i;:::-;15883:2;15878:3;15874:12;15867:19;;15526:366;;;:::o;15898:419::-;16064:4;16102:2;16091:9;16087:18;16079:26;;16151:9;16145:4;16141:20;16137:1;16126:9;16122:17;16115:47;16179:131;16305:4;16179:131;:::i;:::-;16171:139;;15898:419;;;:::o;16323:223::-;16463:34;16459:1;16451:6;16447:14;16440:58;16532:6;16527:2;16519:6;16515:15;16508:31;16323:223;:::o;16552:366::-;16694:3;16715:67;16779:2;16774:3;16715:67;:::i;:::-;16708:74;;16791:93;16880:3;16791:93;:::i;:::-;16909:2;16904:3;16900:12;16893:19;;16552:366;;;:::o;16924:419::-;17090:4;17128:2;17117:9;17113:18;17105:26;;17177:9;17171:4;17167:20;17163:1;17152:9;17148:17;17141:47;17205:131;17331:4;17205:131;:::i;:::-;17197:139;;16924:419;;;:::o;17349:240::-;17489:34;17485:1;17477:6;17473:14;17466:58;17558:23;17553:2;17545:6;17541:15;17534:48;17349:240;:::o;17595:366::-;17737:3;17758:67;17822:2;17817:3;17758:67;:::i;:::-;17751:74;;17834:93;17923:3;17834:93;:::i;:::-;17952:2;17947:3;17943:12;17936:19;;17595:366;;;:::o;17967:419::-;18133:4;18171:2;18160:9;18156:18;18148:26;;18220:9;18214:4;18210:20;18206:1;18195:9;18191:17;18184:47;18248:131;18374:4;18248:131;:::i;:::-;18240:139;;17967:419;;;:::o;18392:239::-;18532:34;18528:1;18520:6;18516:14;18509:58;18601:22;18596:2;18588:6;18584:15;18577:47;18392:239;:::o;18637:366::-;18779:3;18800:67;18864:2;18859:3;18800:67;:::i;:::-;18793:74;;18876:93;18965:3;18876:93;:::i;:::-;18994:2;18989:3;18985:12;18978:19;;18637:366;;;:::o;19009:419::-;19175:4;19213:2;19202:9;19198:18;19190:26;;19262:9;19256:4;19252:20;19248:1;19237:9;19233:17;19226:47;19290:131;19416:4;19290:131;:::i;:::-;19282:139;;19009:419;;;:::o;19434:225::-;19574:34;19570:1;19562:6;19558:14;19551:58;19643:8;19638:2;19630:6;19626:15;19619:33;19434:225;:::o;19665:366::-;19807:3;19828:67;19892:2;19887:3;19828:67;:::i;:::-;19821:74;;19904:93;19993:3;19904:93;:::i;:::-;20022:2;20017:3;20013:12;20006:19;;19665:366;;;:::o;20037:419::-;20203:4;20241:2;20230:9;20226:18;20218:26;;20290:9;20284:4;20280:20;20276:1;20265:9;20261:17;20254:47;20318:131;20444:4;20318:131;:::i;:::-;20310:139;;20037:419;;;:::o;20462:177::-;20602:29;20598:1;20590:6;20586:14;20579:53;20462:177;:::o;20645:366::-;20787:3;20808:67;20872:2;20867:3;20808:67;:::i;:::-;20801:74;;20884:93;20973:3;20884:93;:::i;:::-;21002:2;20997:3;20993:12;20986:19;;20645:366;;;:::o;21017:419::-;21183:4;21221:2;21210:9;21206:18;21198:26;;21270:9;21264:4;21260:20;21256:1;21245:9;21241:17;21234:47;21298:131;21424:4;21298:131;:::i;:::-;21290:139;;21017:419;;;:::o;21442:223::-;21582:34;21578:1;21570:6;21566:14;21559:58;21651:6;21646:2;21638:6;21634:15;21627:31;21442:223;:::o;21671:366::-;21813:3;21834:67;21898:2;21893:3;21834:67;:::i;:::-;21827:74;;21910:93;21999:3;21910:93;:::i;:::-;22028:2;22023:3;22019:12;22012:19;;21671:366;;;:::o;22043:419::-;22209:4;22247:2;22236:9;22232:18;22224:26;;22296:9;22290:4;22286:20;22282:1;22271:9;22267:17;22260:47;22324:131;22450:4;22324:131;:::i;:::-;22316:139;;22043:419;;;:::o;22468:221::-;22608:34;22604:1;22596:6;22592:14;22585:58;22677:4;22672:2;22664:6;22660:15;22653:29;22468:221;:::o;22695:366::-;22837:3;22858:67;22922:2;22917:3;22858:67;:::i;:::-;22851:74;;22934:93;23023:3;22934:93;:::i;:::-;23052:2;23047:3;23043:12;23036:19;;22695:366;;;:::o;23067:419::-;23233:4;23271:2;23260:9;23256:18;23248:26;;23320:9;23314:4;23310:20;23306:1;23295:9;23291:17;23284:47;23348:131;23474:4;23348:131;:::i;:::-;23340:139;;23067:419;;;:::o;23492:224::-;23632:34;23628:1;23620:6;23616:14;23609:58;23701:7;23696:2;23688:6;23684:15;23677:32;23492:224;:::o;23722:366::-;23864:3;23885:67;23949:2;23944:3;23885:67;:::i;:::-;23878:74;;23961:93;24050:3;23961:93;:::i;:::-;24079:2;24074:3;24070:12;24063:19;;23722:366;;;:::o;24094:419::-;24260:4;24298:2;24287:9;24283:18;24275:26;;24347:9;24341:4;24337:20;24333:1;24322:9;24318:17;24311:47;24375:131;24501:4;24375:131;:::i;:::-;24367:139;;24094:419;;;:::o;24519:222::-;24659:34;24655:1;24647:6;24643:14;24636:58;24728:5;24723:2;24715:6;24711:15;24704:30;24519:222;:::o;24747:366::-;24889:3;24910:67;24974:2;24969:3;24910:67;:::i;:::-;24903:74;;24986:93;25075:3;24986:93;:::i;:::-;25104:2;25099:3;25095:12;25088:19;;24747:366;;;:::o;25119:419::-;25285:4;25323:2;25312:9;25308:18;25300:26;;25372:9;25366:4;25362:20;25358:1;25347:9;25343:17;25336:47;25400:131;25526:4;25400:131;:::i;:::-;25392:139;;25119:419;;;:::o;25544:172::-;25684:24;25680:1;25672:6;25668:14;25661:48;25544:172;:::o;25722:366::-;25864:3;25885:67;25949:2;25944:3;25885:67;:::i;:::-;25878:74;;25961:93;26050:3;25961:93;:::i;:::-;26079:2;26074:3;26070:12;26063:19;;25722:366;;;:::o;26094:419::-;26260:4;26298:2;26287:9;26283:18;26275:26;;26347:9;26341:4;26337:20;26333:1;26322:9;26318:17;26311:47;26375:131;26501:4;26375:131;:::i;:::-;26367:139;;26094:419;;;:::o;26519:297::-;26659:34;26655:1;26647:6;26643:14;26636:58;26728:34;26723:2;26715:6;26711:15;26704:59;26797:11;26792:2;26784:6;26780:15;26773:36;26519:297;:::o;26822:366::-;26964:3;26985:67;27049:2;27044:3;26985:67;:::i;:::-;26978:74;;27061:93;27150:3;27061:93;:::i;:::-;27179:2;27174:3;27170:12;27163:19;;26822:366;;;:::o;27194:419::-;27360:4;27398:2;27387:9;27383:18;27375:26;;27447:9;27441:4;27437:20;27433:1;27422:9;27418:17;27411:47;27475:131;27601:4;27475:131;:::i;:::-;27467:139;;27194:419;;;:::o;27619:240::-;27759:34;27755:1;27747:6;27743:14;27736:58;27828:23;27823:2;27815:6;27811:15;27804:48;27619:240;:::o;27865:366::-;28007:3;28028:67;28092:2;28087:3;28028:67;:::i;:::-;28021:74;;28104:93;28193:3;28104:93;:::i;:::-;28222:2;28217:3;28213:12;28206:19;;27865:366;;;:::o;28237:419::-;28403:4;28441:2;28430:9;28426:18;28418:26;;28490:9;28484:4;28480:20;28476:1;28465:9;28461:17;28454:47;28518:131;28644:4;28518:131;:::i;:::-;28510:139;;28237:419;;;:::o;28662:169::-;28802:21;28798:1;28790:6;28786:14;28779:45;28662:169;:::o;28837:366::-;28979:3;29000:67;29064:2;29059:3;29000:67;:::i;:::-;28993:74;;29076:93;29165:3;29076:93;:::i;:::-;29194:2;29189:3;29185:12;29178:19;;28837:366;;;:::o;29209:419::-;29375:4;29413:2;29402:9;29398:18;29390:26;;29462:9;29456:4;29452:20;29448:1;29437:9;29433:17;29426:47;29490:131;29616:4;29490:131;:::i;:::-;29482:139;;29209:419;;;:::o;29634:241::-;29774:34;29770:1;29762:6;29758:14;29751:58;29843:24;29838:2;29830:6;29826:15;29819:49;29634:241;:::o;29881:366::-;30023:3;30044:67;30108:2;30103:3;30044:67;:::i;:::-;30037:74;;30120:93;30209:3;30120:93;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;29881:366;;;:::o;30253:419::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:191::-;30718:4;30738:20;30756:1;30738:20;:::i;:::-;30733:25;;30772:20;30790:1;30772:20;:::i;:::-;30767:25;;30811:1;30808;30805:8;30802:34;;;30816:18;;:::i;:::-;30802:34;30861:1;30858;30854:9;30846:17;;30678:191;;;;:::o;30875:442::-;31024:4;31062:2;31051:9;31047:18;31039:26;;31075:71;31143:1;31132:9;31128:17;31119:6;31075:71;:::i;:::-;31156:72;31224:2;31213:9;31209:18;31200:6;31156:72;:::i;:::-;31238;31306:2;31295:9;31291:18;31282:6;31238:72;:::i;:::-;30875:442;;;;;;:::o;31323:147::-;31424:11;31461:3;31446:18;;31323:147;;;;:::o;31476:114::-;;:::o;31596:398::-;31755:3;31776:83;31857:1;31852:3;31776:83;:::i;:::-;31769:90;;31868:93;31957:3;31868:93;:::i;:::-;31986:1;31981:3;31977:11;31970:18;;31596:398;;;:::o;32000:379::-;32184:3;32206:147;32349:3;32206:147;:::i;:::-;32199:154;;32370:3;32363:10;;32000:379;;;:::o;32385:220::-;32525:34;32521:1;32513:6;32509:14;32502:58;32594:3;32589:2;32581:6;32577:15;32570:28;32385:220;:::o;32611:366::-;32753:3;32774:67;32838:2;32833:3;32774:67;:::i;:::-;32767:74;;32850:93;32939:3;32850:93;:::i;:::-;32968:2;32963:3;32959:12;32952:19;;32611:366;;;:::o;32983:419::-;33149:4;33187:2;33176:9;33172:18;33164:26;;33236:9;33230:4;33226:20;33222:1;33211:9;33207:17;33200:47;33264:131;33390:4;33264:131;:::i;:::-;33256:139;;32983:419;;;:::o;33408:180::-;33456:77;33453:1;33446:88;33553:4;33550:1;33543:15;33577:4;33574:1;33567:15;33594:180;33642:77;33639:1;33632:88;33739:4;33736:1;33729:15;33763:4;33760:1;33753:15;33780:143;33837:5;33868:6;33862:13;33853:22;;33884:33;33911:5;33884:33;:::i;:::-;33780:143;;;;:::o;33929:351::-;33999:6;34048:2;34036:9;34027:7;34023:23;34019:32;34016:119;;;34054:79;;:::i;:::-;34016:119;34174:1;34199:64;34255:7;34246:6;34235:9;34231:22;34199:64;:::i;:::-;34189:74;;34145:128;33929:351;;;;:::o;34286:85::-;34331:7;34360:5;34349:16;;34286:85;;;:::o;34377:158::-;34435:9;34468:61;34486:42;34495:32;34521:5;34495:32;:::i;:::-;34486:42;:::i;:::-;34468:61;:::i;:::-;34455:74;;34377:158;;;:::o;34541:147::-;34636:45;34675:5;34636:45;:::i;:::-;34631:3;34624:58;34541:147;;:::o;34694:114::-;34761:6;34795:5;34789:12;34779:22;;34694:114;;;:::o;34814:184::-;34913:11;34947:6;34942:3;34935:19;34987:4;34982:3;34978:14;34963:29;;34814:184;;;;:::o;35004:132::-;35071:4;35094:3;35086:11;;35124:4;35119:3;35115:14;35107:22;;35004:132;;;:::o;35142:108::-;35219:24;35237:5;35219:24;:::i;:::-;35214:3;35207:37;35142:108;;:::o;35256:179::-;35325:10;35346:46;35388:3;35380:6;35346:46;:::i;:::-;35424:4;35419:3;35415:14;35401:28;;35256:179;;;;:::o;35441:113::-;35511:4;35543;35538:3;35534:14;35526:22;;35441:113;;;:::o;35590:732::-;35709:3;35738:54;35786:5;35738:54;:::i;:::-;35808:86;35887:6;35882:3;35808:86;:::i;:::-;35801:93;;35918:56;35968:5;35918:56;:::i;:::-;35997:7;36028:1;36013:284;36038:6;36035:1;36032:13;36013:284;;;36114:6;36108:13;36141:63;36200:3;36185:13;36141:63;:::i;:::-;36134:70;;36227:60;36280:6;36227:60;:::i;:::-;36217:70;;36073:224;36060:1;36057;36053:9;36048:14;;36013:284;;;36017:14;36313:3;36306:10;;35714:608;;;35590:732;;;;:::o;36328:831::-;36591:4;36629:3;36618:9;36614:19;36606:27;;36643:71;36711:1;36700:9;36696:17;36687:6;36643:71;:::i;:::-;36724:80;36800:2;36789:9;36785:18;36776:6;36724:80;:::i;:::-;36851:9;36845:4;36841:20;36836:2;36825:9;36821:18;36814:48;36879:108;36982:4;36973:6;36879:108;:::i;:::-;36871:116;;36997:72;37065:2;37054:9;37050:18;37041:6;36997:72;:::i;:::-;37079:73;37147:3;37136:9;37132:19;37123:6;37079:73;:::i;:::-;36328:831;;;;;;;;:::o;37165:807::-;37414:4;37452:3;37441:9;37437:19;37429:27;;37466:71;37534:1;37523:9;37519:17;37510:6;37466:71;:::i;:::-;37547:72;37615:2;37604:9;37600:18;37591:6;37547:72;:::i;:::-;37629:80;37705:2;37694:9;37690:18;37681:6;37629:80;:::i;:::-;37719;37795:2;37784:9;37780:18;37771:6;37719:80;:::i;:::-;37809:73;37877:3;37866:9;37862:19;37853:6;37809:73;:::i;:::-;37892;37960:3;37949:9;37945:19;37936:6;37892:73;:::i;:::-;37165:807;;;;;;;;;:::o;37978:143::-;38035:5;38066:6;38060:13;38051:22;;38082:33;38109:5;38082:33;:::i;:::-;37978:143;;;;:::o;38127:663::-;38215:6;38223;38231;38280:2;38268:9;38259:7;38255:23;38251:32;38248:119;;;38286:79;;:::i;:::-;38248:119;38406:1;38431:64;38487:7;38478:6;38467:9;38463:22;38431:64;:::i;:::-;38421:74;;38377:128;38544:2;38570:64;38626:7;38617:6;38606:9;38602:22;38570:64;:::i;:::-;38560:74;;38515:129;38683:2;38709:64;38765:7;38756:6;38745:9;38741:22;38709:64;:::i;:::-;38699:74;;38654:129;38127:663;;;;;:::o

Swarm Source

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