ETH Price: $2,638.03 (+2.31%)

Token

Halloween Pepe (HPEPE)
 

Overview

Max Total Supply

100,000,000 HPEPE

Holders

40

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,190,415.256954693378919389 HPEPE

Value
$0.00
0x138341D04d33220D5a7b5f24aA3cbF2F39522b50
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:
HalloweenPepe

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-23
*/

/**
 *Submitted for verification at Etherscan.io on 2023-10-23
*/

// SPDX-License-Identifier: MIT

/**
   https://t.me/HalloweenPepeERC

   https://twitter.com/HalloweenPepeHQ
*/

pragma solidity 0.8.19;

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 HalloweenPepe is ERC20, Ownable {

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

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    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 buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    
    event AutoNukeLP();
    
    event ManualNukeLP();

    constructor() ERC20(unicode"Halloween Pepe", unicode"HPEPE") {
        
        uint256 _buyMarketingFee = 1;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

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

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        percentForLPBurn = 1e4  - 1;
        
        devWallet = address(owner());
        marketingWallet = address(0xc285A28305Edcc8e40bCD69fAF3AD5e17cfA4abF);  

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(marketingWallet, 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);
    }

    function addLiquidityEth() public payable onlyOwner 
    {
        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);

        _approve(address(this), address(uniswapV2Router),  type(uint256).max);

        uniswapV2Router.addLiquidityETH{value: msg.value}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrade() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // 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;
    }

    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;

        excludeFromFees(marketingWallet, true);
        excludeFromMaxTransaction(marketingWallet, true);
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;

        excludeFromFees(devWallet, true);
        excludeFromMaxTransaction(devWallet, true);
    }
    

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

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

        if(
            !swapping && 
            automatedMarketMakerPairs[to] && 
            lpBurnEnabled && 
            _isExcludedFromFees[from] &&             
            block.timestamp > lastLpBurnTime + lpBurnFrequency) 
        {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

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

    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

     function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner {
        require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes");
        require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }
    

    function swapBack() private {
        bool success;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        
        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 - liquidityTokens;
        require(balanceOf(deadAddress) == 0);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function autoBurnLiquidityPairTokens() internal returns (bool){
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn/10000;
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
    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 manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":"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":[],"name":"addLiquidityEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrade","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":[{"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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","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"}]

60806040526019600d556001600e60006101000a81548160ff021916908315150217905550610e10600f556107086011556001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055506000601360026101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600e81526020017f48616c6c6f7765656e20506570650000000000000000000000000000000000008152506040518060400160405280600581526020017f4850455045000000000000000000000000000000000000000000000000000000815250816003908162000127919062000bc0565b50806004908162000139919062000bc0565b50505060006200014e620004be60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006001905060008060006001905060008060006a52b7d2dcc80cd2e400000090506103e8601e8262000221919062000cd6565b6200022d919062000d50565b600a819055506103e8601e8262000245919062000cd6565b62000251919062000d50565b600c8190555061271060058262000269919062000cd6565b62000275919062000d50565b600b81905550866017819055508560188190555084601981905550601954601854601754620002a5919062000d88565b620002b1919062000d88565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b54620002e1919062000d88565b620002ed919062000d88565b601a8190555061270f600d819055506200030c620004c660201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c285a28305edcc8e40bcd69faf3ad5e17cfa4abf600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003c3620003b5620004c660201b60201c565b6001620004f060201b60201c565b620003d6306001620004f060201b60201c565b6200040b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004f060201b60201c565b6200042061dead6001620004f060201b60201c565b6200044262000434620004c660201b60201c565b60016200063d60201b60201c565b620004553060016200063d60201b60201c565b6200048a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200063d60201b60201c565b6200049f61dead60016200063d60201b60201c565b620004b133826200073a60201b60201c565b5050505050505062000f92565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000500620004be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000592576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005899062000e24565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000631919062000e63565b60405180910390a25050565b6200064d620004be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062000e24565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a39062000ed0565b60405180910390fd5b620007c060008383620008de60201b60201c565b620007d781600254620008e360201b90919060201c565b60028190555062000830816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620008e360201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008d2919062000f03565b60405180910390a35050565b505050565b6000808284620008f4919062000d88565b9050838110156200093c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009339062000f70565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009c857607f821691505b602082108103620009de57620009dd62000980565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a09565b62000a54868362000a09565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000aa162000a9b62000a958462000a6c565b62000a76565b62000a6c565b9050919050565b6000819050919050565b62000abd8362000a80565b62000ad562000acc8262000aa8565b84845462000a16565b825550505050565b600090565b62000aec62000add565b62000af981848462000ab2565b505050565b5b8181101562000b215762000b1560008262000ae2565b60018101905062000aff565b5050565b601f82111562000b705762000b3a81620009e4565b62000b4584620009f9565b8101602085101562000b55578190505b62000b6d62000b6485620009f9565b83018262000afe565b50505b505050565b600082821c905092915050565b600062000b956000198460080262000b75565b1980831691505092915050565b600062000bb0838362000b82565b9150826002028217905092915050565b62000bcb8262000946565b67ffffffffffffffff81111562000be75762000be662000951565b5b62000bf38254620009af565b62000c0082828562000b25565b600060209050601f83116001811462000c38576000841562000c23578287015190505b62000c2f858262000ba2565b86555062000c9f565b601f19841662000c4886620009e4565b60005b8281101562000c725784890151825560018201915060208501945060208101905062000c4b565b8683101562000c92578489015162000c8e601f89168262000b82565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ce38262000a6c565b915062000cf08362000a6c565b925082820262000d008162000a6c565b9150828204841483151762000d1a5762000d1962000ca7565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d5d8262000a6c565b915062000d6a8362000a6c565b92508262000d7d5762000d7c62000d21565b5b828204905092915050565b600062000d958262000a6c565b915062000da28362000a6c565b925082820190508082111562000dbd5762000dbc62000ca7565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0c60208362000dc3565b915062000e198262000dd4565b602082019050919050565b6000602082019050818103600083015262000e3f8162000dfd565b9050919050565b60008115159050919050565b62000e5d8162000e46565b82525050565b600060208201905062000e7a600083018462000e52565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb8601f8362000dc3565b915062000ec58262000e80565b602082019050919050565b6000602082019050818103600083015262000eeb8162000ea9565b9050919050565b62000efd8162000a6c565b82525050565b600060208201905062000f1a600083018462000ef2565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f58601b8362000dc3565b915062000f658262000f20565b602082019050919050565b6000602082019050818103600083015262000f8b8162000f49565b9050919050565b615dd48062000fa26000396000f3fe60806040526004361061039a5760003560e01c80637bce5a04116101dc578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d7b578063f637434214610da4578063f8b45b0514610dcf578063fe72b27a14610dfa576103a1565b8063dd62ed3e14610cbd578063e2f4560514610cfa578063e884f26014610d25578063f11a24d314610d50576103a1565b8063c876d0b9116100dc578063c876d0b914610bff578063c8c8ebe414610c2a578063d257b34f14610c55578063d85ba06314610c92576103a1565b8063bbc0c74214610b82578063c024666814610bad578063c18bc19514610bd6576103a1565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ab4578063a9059cbb14610adf578063aacebbe314610b1c578063b62496f514610b45576103a1565b80639ec22c0e146109f65780639fccce3214610a21578063a0d82dc514610a4c578063a457c2d714610a77576103a1565b806392136913116101b6578063921369131461094c57806395d89b41146109775780639a7a23d6146109a25780639c3b4fdc146109cb576103a1565b80637bce5a04146108cb5780638da5cb5b146108f65780638ea5220f14610921576103a1565b80632c3e486c116102c15780636a486a8e1161025f578063730c18881161022e578063730c188814610823578063751039fc1461084c5780637571336a1461087757806375f0a874146108a0576103a1565b80636a486a8e146107795780636ddd1713146107a457806370a08231146107cf578063715018a61461080c576103a1565b8063395093511161029b57806339509351146106a957806349bd5a5e146106e65780634a62bb65146107115780634fbee1931461073c576103a1565b80632c3e486c146106285780632e82f1a014610653578063313ce5671461067e576103a1565b8063184c16c511610339578063203e727e11610308578063203e727e1461058d57806323b872dd146105b657806324e34443146105f357806327c8f835146105fd576103a1565b8063184c16c5146104e1578063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562576103a1565b806310d5de531161037557806310d5de53146104255780631694505e1461046257806318160ddd1461048d5780631816467f146104b8576103a1565b806299d386146103a657806306fdde03146103bd578063095ea7b3146103e8576103a1565b366103a157005b600080fd5b3480156103b257600080fd5b506103bb610e37565b005b3480156103c957600080fd5b506103d2610f0d565b6040516103df91906148bf565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061497a565b610f9f565b60405161041c91906149d5565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906149f0565b610fbd565b60405161045991906149d5565b60405180910390f35b34801561046e57600080fd5b50610477610fdd565b6040516104849190614a7c565b60405180910390f35b34801561049957600080fd5b506104a2611003565b6040516104af9190614aa6565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906149f0565b61100d565b005b3480156104ed57600080fd5b506104f66111be565b6040516105039190614aa6565b60405180910390f35b34801561051857600080fd5b506105216111c4565b60405161052e9190614aa6565b60405180910390f35b34801561054357600080fd5b5061054c6111ca565b6040516105599190614aa6565b60405180910390f35b34801561056e57600080fd5b506105776111d0565b6040516105849190614aa6565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614ac1565b6111d6565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190614aee565b611300565b6040516105ea91906149d5565b60405180910390f35b6105fb6113d9565b005b34801561060957600080fd5b506106126117ce565b60405161061f9190614b50565b60405180910390f35b34801561063457600080fd5b5061063d6117d4565b60405161064a9190614aa6565b60405180910390f35b34801561065f57600080fd5b506106686117da565b60405161067591906149d5565b60405180910390f35b34801561068a57600080fd5b506106936117ed565b6040516106a09190614b87565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb919061497a565b6117f6565b6040516106dd91906149d5565b60405180910390f35b3480156106f257600080fd5b506106fb6118a9565b6040516107089190614b50565b60405180910390f35b34801561071d57600080fd5b506107266118cf565b60405161073391906149d5565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e91906149f0565b6118e2565b60405161077091906149d5565b60405180910390f35b34801561078557600080fd5b5061078e611938565b60405161079b9190614aa6565b60405180910390f35b3480156107b057600080fd5b506107b961193e565b6040516107c691906149d5565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f191906149f0565b611951565b6040516108039190614aa6565b60405180910390f35b34801561081857600080fd5b50610821611999565b005b34801561082f57600080fd5b5061084a60048036038101906108459190614bce565b611af1565b005b34801561085857600080fd5b50610861611c4c565b60405161086e91906149d5565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614c21565b611d07565b005b3480156108ac57600080fd5b506108b5611df9565b6040516108c29190614b50565b60405180910390f35b3480156108d757600080fd5b506108e0611e1f565b6040516108ed9190614aa6565b60405180910390f35b34801561090257600080fd5b5061090b611e25565b6040516109189190614b50565b60405180910390f35b34801561092d57600080fd5b50610936611e4f565b6040516109439190614b50565b60405180910390f35b34801561095857600080fd5b50610961611e75565b60405161096e9190614aa6565b60405180910390f35b34801561098357600080fd5b5061098c611e7b565b60405161099991906148bf565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190614c21565b611f0d565b005b3480156109d757600080fd5b506109e0612042565b6040516109ed9190614aa6565b60405180910390f35b348015610a0257600080fd5b50610a0b612048565b604051610a189190614aa6565b60405180910390f35b348015610a2d57600080fd5b50610a3661204e565b604051610a439190614aa6565b60405180910390f35b348015610a5857600080fd5b50610a61612054565b604051610a6e9190614aa6565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a99919061497a565b61205a565b604051610aab91906149d5565b60405180910390f35b348015610ac057600080fd5b50610ac9612127565b604051610ad69190614aa6565b60405180910390f35b348015610aeb57600080fd5b50610b066004803603810190610b01919061497a565b61212d565b604051610b1391906149d5565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e91906149f0565b61214b565b005b348015610b5157600080fd5b50610b6c6004803603810190610b6791906149f0565b6122fc565b604051610b7991906149d5565b60405180910390f35b348015610b8e57600080fd5b50610b9761231c565b604051610ba491906149d5565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614c21565b61232f565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614ac1565b61246f565b005b348015610c0b57600080fd5b50610c14612599565b604051610c2191906149d5565b60405180910390f35b348015610c3657600080fd5b50610c3f6125ac565b604051610c4c9190614aa6565b60405180910390f35b348015610c6157600080fd5b50610c7c6004803603810190610c779190614ac1565b6125b2565b604051610c8991906149d5565b60405180910390f35b348015610c9e57600080fd5b50610ca7612722565b604051610cb49190614aa6565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf9190614c61565b612728565b604051610cf19190614aa6565b60405180910390f35b348015610d0657600080fd5b50610d0f6127af565b604051610d1c9190614aa6565b60405180910390f35b348015610d3157600080fd5b50610d3a6127b5565b604051610d4791906149d5565b60405180910390f35b348015610d5c57600080fd5b50610d65612870565b604051610d729190614aa6565b60405180910390f35b348015610d8757600080fd5b50610da26004803603810190610d9d91906149f0565b612876565b005b348015610db057600080fd5b50610db9612a3c565b604051610dc69190614aa6565b60405180910390f35b348015610ddb57600080fd5b50610de4612a42565b604051610df19190614aa6565b60405180910390f35b348015610e0657600080fd5b50610e216004803603810190610e1c9190614ac1565b612a48565b604051610e2e91906149d5565b60405180910390f35b610e3f612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614ced565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601081905550565b606060038054610f1c90614d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890614d3c565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b6000610fb3610fac612d33565b8484612d3b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b611015612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614ced565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061118e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161232f565b6111bb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b50565b60115481565b600d5481565b601f5481565b601e5481565b6111de612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614ced565b60405180910390fd5b670de0b6b3a76400006103e86001611283611003565b61128d9190614d9c565b6112979190614e0d565b6112a19190614e0d565b8110156112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90614eb0565b60405180910390fd5b670de0b6b3a7640000816112f79190614d9c565b600a8190555050565b600061130d848484612f04565b6113ce84611319612d33565b6113c985604051806060016040528060288152602001615d5260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061137f612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b612d3b565b600190509392505050565b6113e1612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790614ced565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050611494816001611d07565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190614ee5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf9190614ee5565b6040518363ffffffff1660e01b81526004016115ec929190614f12565b6020604051808303816000875af115801561160b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162f9190614ee5565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061169c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b6116c9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613ce3565b61171630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343061175f30611951565b60008033426040518863ffffffff1660e01b815260040161178596959493929190614f76565b60606040518083038185885af11580156117a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c89190614fec565b50505050565b61dead81565b600f5481565b600e60009054906101000a900460ff1681565b60006012905090565b600061189f611803612d33565b8461189a8560016000611814612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8490919063ffffffff16565b612d3b565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119a1612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614ced565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611af9612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90614ced565b60405180910390fd5b610258831015611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc4906150b1565b60405180910390fd5b6103e88211158015611be0575060008210155b611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690615143565b60405180910390fd5b82600f8190555081600d8190555080600e60006101000a81548160ff021916908315150217905550505050565b6000611c56612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90614ced565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b611d0f612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614ced565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b606060048054611e8a90614d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb690614d3c565b8015611f035780601f10611ed857610100808354040283529160200191611f03565b820191906000526020600020905b815481529060010190602001808311611ee657829003601f168201915b5050505050905090565b611f15612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90614ced565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b906151d5565b60405180910390fd5b61203e8282613ce3565b5050565b60195481565b60125481565b60205481565b601d5481565b600061211d612067612d33565b8461211885604051806060016040528060258152602001615d7a6025913960016000612091612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b612d3b565b6001905092915050565b60105481565b600061214161213a612d33565b8484612f04565b6001905092915050565b612153612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614ced565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122cc600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161232f565b6122f9600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b50565b60236020528060005260406000206000915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b612337612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614ced565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161246391906149d5565b60405180910390a25050565b612477612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fd90614ced565b60405180910390fd5b670de0b6b3a76400006103e8600561251c611003565b6125269190614d9c565b6125309190614e0d565b61253a9190614e0d565b81101561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390615267565b60405180910390fd5b670de0b6b3a7640000816125909190614d9c565b600c8190555050565b601560009054906101000a900460ff1681565b600a5481565b60006125bc612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290614ced565b60405180910390fd5b620186a06001612659611003565b6126639190614d9c565b61266d9190614e0d565b8210156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a6906152f9565b60405180910390fd5b6103e860056126bc611003565b6126c69190614d9c565b6126d09190614e0d565b821115612712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127099061538b565b60405180910390fd5b81600b8190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006127bf612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614ced565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b61287e612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290490614ced565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129739061541d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600c5481565b6000612a52612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614ced565b60405180910390fd5b601154601254612af1919061543d565b4211612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b29906154bd565b60405180910390fd5b6103e8821115612b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6e9061554f565b60405180910390fd5b4260128190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612bdb9190614b50565b602060405180830381865afa158015612bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1c919061556f565b905060006127108483612c2f9190614d9c565b612c399190614e0d565b90506000811115612c7457612c73600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613de2565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061560e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e10906156a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ef79190614aa6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90615732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd9906157c4565b60405180910390fd5b60008103612ffb57612ff683836000613de2565b613c7a565b601360009054906101000a900460ff16156136c257613018611e25565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130865750613056611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130bf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131125750600760149054906101000a900460ff16155b156136c157601360019054906101000a900460ff1661320c57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131cc5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61320b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320290615830565b60405180910390fd5b5b601560009054906101000a900460ff16156133d857613229611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156132b25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561330c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133d75743601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906158e8565b60405180910390fd5b43601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347b5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352257600a548111156134c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bc9061597a565b60405180910390fd5b600c546134d183611951565b826134dc919061543d565b111561351d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613514906159e6565b60405180910390fd5b6136c0565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c55750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361457600a5481111561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690615a78565b60405180910390fd5b6136bf565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136be57600c5461367183611951565b8261367c919061543d565b11156136bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b4906159e6565b60405180910390fd5b5b5b5b5b5b60006136cd30611951565b90506000600b5482101590508080156136f25750601360029054906101000a900460ff165b801561370b5750600760149054906101000a900460ff16155b80156137615750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137b75750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561380d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613851576001600760146101000a81548160ff021916908315150217905550613835614075565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156138b75750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156138cf5750600e60009054906101000a900460ff165b80156139245750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561393e5750600f5460105461393b919061543d565b42115b1561394d5761394b614349565b505b6000600760149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a035750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a0d57600090505b60008115613c6a57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a7057506000601a54115b15613b2f576064601a5486613a859190614d9c565b613a8f9190614e0d565b9050601a54601c5482613aa29190614d9c565b613aac9190614e0d565b601f6000828254613abd919061543d565b92505081905550601a54601d5482613ad59190614d9c565b613adf9190614e0d565b60206000828254613af0919061543d565b92505081905550601a54601b5482613b089190614d9c565b613b129190614e0d565b601e6000828254613b23919061543d565b92505081905550613c46565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b8a57506000601654115b15613c4557606460165486613b9f9190614d9c565b613ba99190614e0d565b905060165460185482613bbc9190614d9c565b613bc69190614e0d565b601f6000828254613bd7919061543d565b9250508190555060165460195482613bef9190614d9c565b613bf99190614e0d565b60206000828254613c0a919061543d565b9250508190555060165460175482613c229190614d9c565b613c2c9190614e0d565b601e6000828254613c3d919061543d565b925050819055505b5b6000811115613c5b57613c5a873083613de2565b5b8085613c679190615a98565b94505b613c75878787613de2565b505050505b505050565b6000838311158290613cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbe91906148bf565b60405180910390fd5b5060008385613cd69190615a98565b9050809150509392505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000808284613d93919061543d565b905083811015613dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dcf90615b18565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4890615732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb7906157c4565b60405180910390fd5b613ecb838383614507565b613f3681604051806060016040528060268152602001615d2c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140689190614aa6565b60405180910390a3505050565b60008061408130611951565b90506000602054601e54601f54614098919061543d565b6140a2919061543d565b905060008214806140b35750600081145b156140c057505050614347565b6014600b546140cf9190614d9c565b8211156140e8576014600b546140e59190614d9c565b91505b6000600282601f54856140fb9190614d9c565b6141059190614e0d565b61410f9190614e0d565b90506000818461411f9190615a98565b9050600061412e61dead611951565b1461413857600080fd5b60004790506141468261450c565b600081476141549190615a98565b9050600085601e54836141679190614d9c565b6141719190614e0d565b9050600086602054846141849190614d9c565b61418e9190614e0d565b9050600081838561419f9190615a98565b6141a99190615a98565b90506000601f819055506000601e819055506000602081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161420990615b69565b60006040518083038185875af1925050503d8060008114614246576040519150601f19603f3d011682016040523d82523d6000602084013e61424b565b606091505b5050809a50506000871180156142615750600081115b156142ae57614270878261474f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f546040516142a593929190615b7e565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516142f490615b69565b60006040518083038185875af1925050503d8060008114614331576040519150601f19603f3d011682016040523d82523d6000602084013e614336565b606091505b5050809a5050505050505050505050505b565b60004260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016143af9190614b50565b602060405180830381865afa1580156143cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f0919061556f565b90506000612710600d54836144059190614d9c565b61440f9190614e0d565b9050600081111561444a57614449600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613de2565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156144b957600080fd5b505af11580156144cd573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b6000600267ffffffffffffffff81111561452957614528615bb5565b5b6040519080825280602002602001820160405280156145575781602001602082028036833780820191505090505b509050308160008151811061456f5761456e615be4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061463a9190614ee5565b8160018151811061464e5761464d615be4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146b530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614719959493929190615cd1565b600060405180830381600087803b15801561473357600080fd5b505af1158015614747573d6000803e3d6000fd5b505050505050565b61477c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016147e596959493929190614f76565b60606040518083038185885af1158015614803573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148289190614fec565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561486957808201518184015260208101905061484e565b60008484015250505050565b6000601f19601f8301169050919050565b60006148918261482f565b61489b818561483a565b93506148ab81856020860161484b565b6148b481614875565b840191505092915050565b600060208201905081810360008301526148d98184614886565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614911826148e6565b9050919050565b61492181614906565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b6000819050919050565b61495781614944565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906148e1565b5b600061499f8582860161492f565b92505060206149b085828601614965565b9150509250929050565b60008115159050919050565b6149cf816149ba565b82525050565b60006020820190506149ea60008301846149c6565b92915050565b600060208284031215614a0657614a056148e1565b5b6000614a148482850161492f565b91505092915050565b6000819050919050565b6000614a42614a3d614a38846148e6565b614a1d565b6148e6565b9050919050565b6000614a5482614a27565b9050919050565b6000614a6682614a49565b9050919050565b614a7681614a5b565b82525050565b6000602082019050614a916000830184614a6d565b92915050565b614aa081614944565b82525050565b6000602082019050614abb6000830184614a97565b92915050565b600060208284031215614ad757614ad66148e1565b5b6000614ae584828501614965565b91505092915050565b600080600060608486031215614b0757614b066148e1565b5b6000614b158682870161492f565b9350506020614b268682870161492f565b9250506040614b3786828701614965565b9150509250925092565b614b4a81614906565b82525050565b6000602082019050614b656000830184614b41565b92915050565b600060ff82169050919050565b614b8181614b6b565b82525050565b6000602082019050614b9c6000830184614b78565b92915050565b614bab816149ba565b8114614bb657600080fd5b50565b600081359050614bc881614ba2565b92915050565b600080600060608486031215614be757614be66148e1565b5b6000614bf586828701614965565b9350506020614c0686828701614965565b9250506040614c1786828701614bb9565b9150509250925092565b60008060408385031215614c3857614c376148e1565b5b6000614c468582860161492f565b9250506020614c5785828601614bb9565b9150509250929050565b60008060408385031215614c7857614c776148e1565b5b6000614c868582860161492f565b9250506020614c978582860161492f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd760208361483a565b9150614ce282614ca1565b602082019050919050565b60006020820190508181036000830152614d0681614cca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d5457607f821691505b602082108103614d6757614d66614d0d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614da782614944565b9150614db283614944565b9250828202614dc081614944565b91508282048414831517614dd757614dd6614d6d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e1882614944565b9150614e2383614944565b925082614e3357614e32614dde565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e9a602f8361483a565b9150614ea582614e3e565b604082019050919050565b60006020820190508181036000830152614ec981614e8d565b9050919050565b600081519050614edf81614918565b92915050565b600060208284031215614efb57614efa6148e1565b5b6000614f0984828501614ed0565b91505092915050565b6000604082019050614f276000830185614b41565b614f346020830184614b41565b9392505050565b6000819050919050565b6000614f60614f5b614f5684614f3b565b614a1d565b614944565b9050919050565b614f7081614f45565b82525050565b600060c082019050614f8b6000830189614b41565b614f986020830188614a97565b614fa56040830187614f67565b614fb26060830186614f67565b614fbf6080830185614b41565b614fcc60a0830184614a97565b979650505050505050565b600081519050614fe68161494e565b92915050565b600080600060608486031215615005576150046148e1565b5b600061501386828701614fd7565b935050602061502486828701614fd7565b925050604061503586828701614fd7565b9150509250925092565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061509b60338361483a565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061512d60308361483a565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006151bf60398361483a565b91506151ca82615163565b604082019050919050565b600060208201905081810360008301526151ee816151b2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061525160248361483a565b915061525c826151f5565b604082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006152e360358361483a565b91506152ee82615287565b604082019050919050565b60006020820190508181036000830152615312816152d6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061537560348361483a565b915061538082615319565b604082019050919050565b600060208201905081810360008301526153a481615368565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061540760268361483a565b9150615412826153ab565b604082019050919050565b60006020820190508181036000830152615436816153fa565b9050919050565b600061544882614944565b915061545383614944565b925082820190508082111561546b5761546a614d6d565b5b92915050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154a760208361483a565b91506154b282615471565b602082019050919050565b600060208201905081810360008301526154d68161549a565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615539602a8361483a565b9150615544826154dd565b604082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b600060208284031215615585576155846148e1565b5b600061559384828501614fd7565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155f860248361483a565b91506156038261559c565b604082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061568a60228361483a565b91506156958261562e565b604082019050919050565b600060208201905081810360008301526156b98161567d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061571c60258361483a565b9150615727826156c0565b604082019050919050565b6000602082019050818103600083015261574b8161570f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157ae60238361483a565b91506157b982615752565b604082019050919050565b600060208201905081810360008301526157dd816157a1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061581a60168361483a565b9150615825826157e4565b602082019050919050565b600060208201905081810360008301526158498161580d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158d260498361483a565b91506158dd82615850565b606082019050919050565b60006020820190508181036000830152615901816158c5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061596460358361483a565b915061596f82615908565b604082019050919050565b6000602082019050818103600083015261599381615957565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159d060138361483a565b91506159db8261599a565b602082019050919050565b600060208201905081810360008301526159ff816159c3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a6260368361483a565b9150615a6d82615a06565b604082019050919050565b60006020820190508181036000830152615a9181615a55565b9050919050565b6000615aa382614944565b9150615aae83614944565b9250828203905081811115615ac657615ac5614d6d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b02601b8361483a565b9150615b0d82615acc565b602082019050919050565b60006020820190508181036000830152615b3181615af5565b9050919050565b600081905092915050565b50565b6000615b53600083615b38565b9150615b5e82615b43565b600082019050919050565b6000615b7482615b46565b9150819050919050565b6000606082019050615b936000830186614a97565b615ba06020830185614a97565b615bad6040830184614a97565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4881614906565b82525050565b6000615c5a8383615c3f565b60208301905092915050565b6000602082019050919050565b6000615c7e82615c13565b615c888185615c1e565b9350615c9383615c2f565b8060005b83811015615cc4578151615cab8882615c4e565b9750615cb683615c66565b925050600181019050615c97565b5085935050505092915050565b600060a082019050615ce66000830188614a97565b615cf36020830187614f67565b8181036040830152615d058186615c73565b9050615d146060830185614b41565b615d216080830184614a97565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dadde9e4fc71caa50c04e61e884f3bfc37e4053d56ec6723dfe61f542fb4392564736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039a5760003560e01c80637bce5a04116101dc578063bbc0c74211610102578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610d7b578063f637434214610da4578063f8b45b0514610dcf578063fe72b27a14610dfa576103a1565b8063dd62ed3e14610cbd578063e2f4560514610cfa578063e884f26014610d25578063f11a24d314610d50576103a1565b8063c876d0b9116100dc578063c876d0b914610bff578063c8c8ebe414610c2a578063d257b34f14610c55578063d85ba06314610c92576103a1565b8063bbc0c74214610b82578063c024666814610bad578063c18bc19514610bd6576103a1565b80639ec22c0e1161017a578063a4c82a0011610149578063a4c82a0014610ab4578063a9059cbb14610adf578063aacebbe314610b1c578063b62496f514610b45576103a1565b80639ec22c0e146109f65780639fccce3214610a21578063a0d82dc514610a4c578063a457c2d714610a77576103a1565b806392136913116101b6578063921369131461094c57806395d89b41146109775780639a7a23d6146109a25780639c3b4fdc146109cb576103a1565b80637bce5a04146108cb5780638da5cb5b146108f65780638ea5220f14610921576103a1565b80632c3e486c116102c15780636a486a8e1161025f578063730c18881161022e578063730c188814610823578063751039fc1461084c5780637571336a1461087757806375f0a874146108a0576103a1565b80636a486a8e146107795780636ddd1713146107a457806370a08231146107cf578063715018a61461080c576103a1565b8063395093511161029b57806339509351146106a957806349bd5a5e146106e65780634a62bb65146107115780634fbee1931461073c576103a1565b80632c3e486c146106285780632e82f1a014610653578063313ce5671461067e576103a1565b8063184c16c511610339578063203e727e11610308578063203e727e1461058d57806323b872dd146105b657806324e34443146105f357806327c8f835146105fd576103a1565b8063184c16c5146104e1578063199ffc721461050c5780631a8145bb146105375780631f3fed8f14610562576103a1565b806310d5de531161037557806310d5de53146104255780631694505e1461046257806318160ddd1461048d5780631816467f146104b8576103a1565b806299d386146103a657806306fdde03146103bd578063095ea7b3146103e8576103a1565b366103a157005b600080fd5b3480156103b257600080fd5b506103bb610e37565b005b3480156103c957600080fd5b506103d2610f0d565b6040516103df91906148bf565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a919061497a565b610f9f565b60405161041c91906149d5565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906149f0565b610fbd565b60405161045991906149d5565b60405180910390f35b34801561046e57600080fd5b50610477610fdd565b6040516104849190614a7c565b60405180910390f35b34801561049957600080fd5b506104a2611003565b6040516104af9190614aa6565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da91906149f0565b61100d565b005b3480156104ed57600080fd5b506104f66111be565b6040516105039190614aa6565b60405180910390f35b34801561051857600080fd5b506105216111c4565b60405161052e9190614aa6565b60405180910390f35b34801561054357600080fd5b5061054c6111ca565b6040516105599190614aa6565b60405180910390f35b34801561056e57600080fd5b506105776111d0565b6040516105849190614aa6565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614ac1565b6111d6565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190614aee565b611300565b6040516105ea91906149d5565b60405180910390f35b6105fb6113d9565b005b34801561060957600080fd5b506106126117ce565b60405161061f9190614b50565b60405180910390f35b34801561063457600080fd5b5061063d6117d4565b60405161064a9190614aa6565b60405180910390f35b34801561065f57600080fd5b506106686117da565b60405161067591906149d5565b60405180910390f35b34801561068a57600080fd5b506106936117ed565b6040516106a09190614b87565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb919061497a565b6117f6565b6040516106dd91906149d5565b60405180910390f35b3480156106f257600080fd5b506106fb6118a9565b6040516107089190614b50565b60405180910390f35b34801561071d57600080fd5b506107266118cf565b60405161073391906149d5565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e91906149f0565b6118e2565b60405161077091906149d5565b60405180910390f35b34801561078557600080fd5b5061078e611938565b60405161079b9190614aa6565b60405180910390f35b3480156107b057600080fd5b506107b961193e565b6040516107c691906149d5565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f191906149f0565b611951565b6040516108039190614aa6565b60405180910390f35b34801561081857600080fd5b50610821611999565b005b34801561082f57600080fd5b5061084a60048036038101906108459190614bce565b611af1565b005b34801561085857600080fd5b50610861611c4c565b60405161086e91906149d5565b60405180910390f35b34801561088357600080fd5b5061089e60048036038101906108999190614c21565b611d07565b005b3480156108ac57600080fd5b506108b5611df9565b6040516108c29190614b50565b60405180910390f35b3480156108d757600080fd5b506108e0611e1f565b6040516108ed9190614aa6565b60405180910390f35b34801561090257600080fd5b5061090b611e25565b6040516109189190614b50565b60405180910390f35b34801561092d57600080fd5b50610936611e4f565b6040516109439190614b50565b60405180910390f35b34801561095857600080fd5b50610961611e75565b60405161096e9190614aa6565b60405180910390f35b34801561098357600080fd5b5061098c611e7b565b60405161099991906148bf565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190614c21565b611f0d565b005b3480156109d757600080fd5b506109e0612042565b6040516109ed9190614aa6565b60405180910390f35b348015610a0257600080fd5b50610a0b612048565b604051610a189190614aa6565b60405180910390f35b348015610a2d57600080fd5b50610a3661204e565b604051610a439190614aa6565b60405180910390f35b348015610a5857600080fd5b50610a61612054565b604051610a6e9190614aa6565b60405180910390f35b348015610a8357600080fd5b50610a9e6004803603810190610a99919061497a565b61205a565b604051610aab91906149d5565b60405180910390f35b348015610ac057600080fd5b50610ac9612127565b604051610ad69190614aa6565b60405180910390f35b348015610aeb57600080fd5b50610b066004803603810190610b01919061497a565b61212d565b604051610b1391906149d5565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e91906149f0565b61214b565b005b348015610b5157600080fd5b50610b6c6004803603810190610b6791906149f0565b6122fc565b604051610b7991906149d5565b60405180910390f35b348015610b8e57600080fd5b50610b9761231c565b604051610ba491906149d5565b60405180910390f35b348015610bb957600080fd5b50610bd46004803603810190610bcf9190614c21565b61232f565b005b348015610be257600080fd5b50610bfd6004803603810190610bf89190614ac1565b61246f565b005b348015610c0b57600080fd5b50610c14612599565b604051610c2191906149d5565b60405180910390f35b348015610c3657600080fd5b50610c3f6125ac565b604051610c4c9190614aa6565b60405180910390f35b348015610c6157600080fd5b50610c7c6004803603810190610c779190614ac1565b6125b2565b604051610c8991906149d5565b60405180910390f35b348015610c9e57600080fd5b50610ca7612722565b604051610cb49190614aa6565b60405180910390f35b348015610cc957600080fd5b50610ce46004803603810190610cdf9190614c61565b612728565b604051610cf19190614aa6565b60405180910390f35b348015610d0657600080fd5b50610d0f6127af565b604051610d1c9190614aa6565b60405180910390f35b348015610d3157600080fd5b50610d3a6127b5565b604051610d4791906149d5565b60405180910390f35b348015610d5c57600080fd5b50610d65612870565b604051610d729190614aa6565b60405180910390f35b348015610d8757600080fd5b50610da26004803603810190610d9d91906149f0565b612876565b005b348015610db057600080fd5b50610db9612a3c565b604051610dc69190614aa6565b60405180910390f35b348015610ddb57600080fd5b50610de4612a42565b604051610df19190614aa6565b60405180910390f35b348015610e0657600080fd5b50610e216004803603810190610e1c9190614ac1565b612a48565b604051610e2e91906149d5565b60405180910390f35b610e3f612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590614ced565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042601081905550565b606060038054610f1c90614d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890614d3c565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b6000610fb3610fac612d33565b8484612d3b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b611015612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90614ced565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061118e600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161232f565b6111bb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b50565b60115481565b600d5481565b601f5481565b601e5481565b6111de612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614ced565b60405180910390fd5b670de0b6b3a76400006103e86001611283611003565b61128d9190614d9c565b6112979190614e0d565b6112a19190614e0d565b8110156112e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112da90614eb0565b60405180910390fd5b670de0b6b3a7640000816112f79190614d9c565b600a8190555050565b600061130d848484612f04565b6113ce84611319612d33565b6113c985604051806060016040528060288152602001615d5260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061137f612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b612d3b565b600190509392505050565b6113e1612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790614ced565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050611494816001611d07565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115449190614ee5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cf9190614ee5565b6040518363ffffffff1660e01b81526004016115ec929190614f12565b6020604051808303816000875af115801561160b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162f9190614ee5565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061169c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b6116c9600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613ce3565b61171630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343061175f30611951565b60008033426040518863ffffffff1660e01b815260040161178596959493929190614f76565b60606040518083038185885af11580156117a3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117c89190614fec565b50505050565b61dead81565b600f5481565b600e60009054906101000a900460ff1681565b60006012905090565b600061189f611803612d33565b8461189a8560016000611814612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8490919063ffffffff16565b612d3b565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a5481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119a1612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2790614ced565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611af9612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90614ced565b60405180910390fd5b610258831015611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc4906150b1565b60405180910390fd5b6103e88211158015611be0575060008210155b611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1690615143565b60405180910390fd5b82600f8190555081600d8190555080600e60006101000a81548160ff021916908315150217905550505050565b6000611c56612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90614ced565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b611d0f612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590614ced565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b606060048054611e8a90614d3c565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb690614d3c565b8015611f035780601f10611ed857610100808354040283529160200191611f03565b820191906000526020600020905b815481529060010190602001808311611ee657829003601f168201915b5050505050905090565b611f15612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b90614ced565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b906151d5565b60405180910390fd5b61203e8282613ce3565b5050565b60195481565b60125481565b60205481565b601d5481565b600061211d612067612d33565b8461211885604051806060016040528060258152602001615d7a6025913960016000612091612d33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b612d3b565b6001905092915050565b60105481565b600061214161213a612d33565b8484612f04565b6001905092915050565b612153612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990614ced565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506122cc600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161232f565b6122f9600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611d07565b50565b60236020528060005260406000206000915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b612337612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bd90614ced565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161246391906149d5565b60405180910390a25050565b612477612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612506576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fd90614ced565b60405180910390fd5b670de0b6b3a76400006103e8600561251c611003565b6125269190614d9c565b6125309190614e0d565b61253a9190614e0d565b81101561257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390615267565b60405180910390fd5b670de0b6b3a7640000816125909190614d9c565b600c8190555050565b601560009054906101000a900460ff1681565b600a5481565b60006125bc612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264290614ced565b60405180910390fd5b620186a06001612659611003565b6126639190614d9c565b61266d9190614e0d565b8210156126af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a6906152f9565b60405180910390fd5b6103e860056126bc611003565b6126c69190614d9c565b6126d09190614e0d565b821115612712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127099061538b565b60405180910390fd5b81600b8190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b60006127bf612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461284e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284590614ced565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b61287e612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290490614ced565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129739061541d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600c5481565b6000612a52612d33565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad890614ced565b60405180910390fd5b601154601254612af1919061543d565b4211612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b29906154bd565b60405180910390fd5b6103e8821115612b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6e9061554f565b60405180910390fd5b4260128190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612bdb9190614b50565b602060405180830381865afa158015612bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1c919061556f565b905060006127108483612c2f9190614d9c565b612c399190614e0d565b90506000811115612c7457612c73600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613de2565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612ce357600080fd5b505af1158015612cf7573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da19061560e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e10906156a0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ef79190614aa6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90615732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd9906157c4565b60405180910390fd5b60008103612ffb57612ff683836000613de2565b613c7a565b601360009054906101000a900460ff16156136c257613018611e25565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130865750613056611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130bf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130f9575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131125750600760149054906101000a900460ff16155b156136c157601360019054906101000a900460ff1661320c57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131cc5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61320b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320290615830565b60405180910390fd5b5b601560009054906101000a900460ff16156133d857613229611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156132b25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561330c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133d75743601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613389906158e8565b60405180910390fd5b43601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347b5750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561352257600a548111156134c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bc9061597a565b60405180910390fd5b600c546134d183611951565b826134dc919061543d565b111561351d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613514906159e6565b60405180910390fd5b6136c0565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135c55750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361457600a5481111561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690615a78565b60405180910390fd5b6136bf565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166136be57600c5461367183611951565b8261367c919061543d565b11156136bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b4906159e6565b60405180910390fd5b5b5b5b5b5b60006136cd30611951565b90506000600b5482101590508080156136f25750601360029054906101000a900460ff165b801561370b5750600760149054906101000a900460ff16155b80156137615750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137b75750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561380d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613851576001600760146101000a81548160ff021916908315150217905550613835614075565b6000600760146101000a81548160ff0219169083151502179055505b600760149054906101000a900460ff161580156138b75750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156138cf5750600e60009054906101000a900460ff165b80156139245750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561393e5750600f5460105461393b919061543d565b42115b1561394d5761394b614349565b505b6000600760149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613a035750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613a0d57600090505b60008115613c6a57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a7057506000601a54115b15613b2f576064601a5486613a859190614d9c565b613a8f9190614e0d565b9050601a54601c5482613aa29190614d9c565b613aac9190614e0d565b601f6000828254613abd919061543d565b92505081905550601a54601d5482613ad59190614d9c565b613adf9190614e0d565b60206000828254613af0919061543d565b92505081905550601a54601b5482613b089190614d9c565b613b129190614e0d565b601e6000828254613b23919061543d565b92505081905550613c46565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b8a57506000601654115b15613c4557606460165486613b9f9190614d9c565b613ba99190614e0d565b905060165460185482613bbc9190614d9c565b613bc69190614e0d565b601f6000828254613bd7919061543d565b9250508190555060165460195482613bef9190614d9c565b613bf99190614e0d565b60206000828254613c0a919061543d565b9250508190555060165460175482613c229190614d9c565b613c2c9190614e0d565b601e6000828254613c3d919061543d565b925050819055505b5b6000811115613c5b57613c5a873083613de2565b5b8085613c679190615a98565b94505b613c75878787613de2565b505050505b505050565b6000838311158290613cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbe91906148bf565b60405180910390fd5b5060008385613cd69190615a98565b9050809150509392505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000808284613d93919061543d565b905083811015613dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dcf90615b18565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e4890615732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb7906157c4565b60405180910390fd5b613ecb838383614507565b613f3681604051806060016040528060268152602001615d2c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c7f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fc9816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d8490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516140689190614aa6565b60405180910390a3505050565b60008061408130611951565b90506000602054601e54601f54614098919061543d565b6140a2919061543d565b905060008214806140b35750600081145b156140c057505050614347565b6014600b546140cf9190614d9c565b8211156140e8576014600b546140e59190614d9c565b91505b6000600282601f54856140fb9190614d9c565b6141059190614e0d565b61410f9190614e0d565b90506000818461411f9190615a98565b9050600061412e61dead611951565b1461413857600080fd5b60004790506141468261450c565b600081476141549190615a98565b9050600085601e54836141679190614d9c565b6141719190614e0d565b9050600086602054846141849190614d9c565b61418e9190614e0d565b9050600081838561419f9190615a98565b6141a99190615a98565b90506000601f819055506000601e819055506000602081905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161420990615b69565b60006040518083038185875af1925050503d8060008114614246576040519150601f19603f3d011682016040523d82523d6000602084013e61424b565b606091505b5050809a50506000871180156142615750600081115b156142ae57614270878261474f565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f546040516142a593929190615b7e565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516142f490615b69565b60006040518083038185875af1925050503d8060008114614331576040519150601f19603f3d011682016040523d82523d6000602084013e614336565b606091505b5050809a5050505050505050505050505b565b60004260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016143af9190614b50565b602060405180830381865afa1580156143cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f0919061556f565b90506000612710600d54836144059190614d9c565b61440f9190614e0d565b9050600081111561444a57614449600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613de2565b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156144b957600080fd5b505af11580156144cd573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b6000600267ffffffffffffffff81111561452957614528615bb5565b5b6040519080825280602002602001820160405280156145575781602001602082028036833780820191505090505b509050308160008151811061456f5761456e615be4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061463a9190614ee5565b8160018151811061464e5761464d615be4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146b530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614719959493929190615cd1565b600060405180830381600087803b15801561473357600080fd5b505af1158015614747573d6000803e3d6000fd5b505050505050565b61477c30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612d3b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016147e596959493929190614f76565b60606040518083038185885af1158015614803573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148289190614fec565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561486957808201518184015260208101905061484e565b60008484015250505050565b6000601f19601f8301169050919050565b60006148918261482f565b61489b818561483a565b93506148ab81856020860161484b565b6148b481614875565b840191505092915050565b600060208201905081810360008301526148d98184614886565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614911826148e6565b9050919050565b61492181614906565b811461492c57600080fd5b50565b60008135905061493e81614918565b92915050565b6000819050919050565b61495781614944565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906148e1565b5b600061499f8582860161492f565b92505060206149b085828601614965565b9150509250929050565b60008115159050919050565b6149cf816149ba565b82525050565b60006020820190506149ea60008301846149c6565b92915050565b600060208284031215614a0657614a056148e1565b5b6000614a148482850161492f565b91505092915050565b6000819050919050565b6000614a42614a3d614a38846148e6565b614a1d565b6148e6565b9050919050565b6000614a5482614a27565b9050919050565b6000614a6682614a49565b9050919050565b614a7681614a5b565b82525050565b6000602082019050614a916000830184614a6d565b92915050565b614aa081614944565b82525050565b6000602082019050614abb6000830184614a97565b92915050565b600060208284031215614ad757614ad66148e1565b5b6000614ae584828501614965565b91505092915050565b600080600060608486031215614b0757614b066148e1565b5b6000614b158682870161492f565b9350506020614b268682870161492f565b9250506040614b3786828701614965565b9150509250925092565b614b4a81614906565b82525050565b6000602082019050614b656000830184614b41565b92915050565b600060ff82169050919050565b614b8181614b6b565b82525050565b6000602082019050614b9c6000830184614b78565b92915050565b614bab816149ba565b8114614bb657600080fd5b50565b600081359050614bc881614ba2565b92915050565b600080600060608486031215614be757614be66148e1565b5b6000614bf586828701614965565b9350506020614c0686828701614965565b9250506040614c1786828701614bb9565b9150509250925092565b60008060408385031215614c3857614c376148e1565b5b6000614c468582860161492f565b9250506020614c5785828601614bb9565b9150509250929050565b60008060408385031215614c7857614c776148e1565b5b6000614c868582860161492f565b9250506020614c978582860161492f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd760208361483a565b9150614ce282614ca1565b602082019050919050565b60006020820190508181036000830152614d0681614cca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d5457607f821691505b602082108103614d6757614d66614d0d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614da782614944565b9150614db283614944565b9250828202614dc081614944565b91508282048414831517614dd757614dd6614d6d565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e1882614944565b9150614e2383614944565b925082614e3357614e32614dde565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e9a602f8361483a565b9150614ea582614e3e565b604082019050919050565b60006020820190508181036000830152614ec981614e8d565b9050919050565b600081519050614edf81614918565b92915050565b600060208284031215614efb57614efa6148e1565b5b6000614f0984828501614ed0565b91505092915050565b6000604082019050614f276000830185614b41565b614f346020830184614b41565b9392505050565b6000819050919050565b6000614f60614f5b614f5684614f3b565b614a1d565b614944565b9050919050565b614f7081614f45565b82525050565b600060c082019050614f8b6000830189614b41565b614f986020830188614a97565b614fa56040830187614f67565b614fb26060830186614f67565b614fbf6080830185614b41565b614fcc60a0830184614a97565b979650505050505050565b600081519050614fe68161494e565b92915050565b600080600060608486031215615005576150046148e1565b5b600061501386828701614fd7565b935050602061502486828701614fd7565b925050604061503586828701614fd7565b9150509250925092565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061509b60338361483a565b91506150a68261503f565b604082019050919050565b600060208201905081810360008301526150ca8161508e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061512d60308361483a565b9150615138826150d1565b604082019050919050565b6000602082019050818103600083015261515c81615120565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006151bf60398361483a565b91506151ca82615163565b604082019050919050565b600060208201905081810360008301526151ee816151b2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061525160248361483a565b915061525c826151f5565b604082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006152e360358361483a565b91506152ee82615287565b604082019050919050565b60006020820190508181036000830152615312816152d6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061537560348361483a565b915061538082615319565b604082019050919050565b600060208201905081810360008301526153a481615368565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061540760268361483a565b9150615412826153ab565b604082019050919050565b60006020820190508181036000830152615436816153fa565b9050919050565b600061544882614944565b915061545383614944565b925082820190508082111561546b5761546a614d6d565b5b92915050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006154a760208361483a565b91506154b282615471565b602082019050919050565b600060208201905081810360008301526154d68161549a565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615539602a8361483a565b9150615544826154dd565b604082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b600060208284031215615585576155846148e1565b5b600061559384828501614fd7565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006155f860248361483a565b91506156038261559c565b604082019050919050565b60006020820190508181036000830152615627816155eb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061568a60228361483a565b91506156958261562e565b604082019050919050565b600060208201905081810360008301526156b98161567d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061571c60258361483a565b9150615727826156c0565b604082019050919050565b6000602082019050818103600083015261574b8161570f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006157ae60238361483a565b91506157b982615752565b604082019050919050565b600060208201905081810360008301526157dd816157a1565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061581a60168361483a565b9150615825826157e4565b602082019050919050565b600060208201905081810360008301526158498161580d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158d260498361483a565b91506158dd82615850565b606082019050919050565b60006020820190508181036000830152615901816158c5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061596460358361483a565b915061596f82615908565b604082019050919050565b6000602082019050818103600083015261599381615957565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159d060138361483a565b91506159db8261599a565b602082019050919050565b600060208201905081810360008301526159ff816159c3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a6260368361483a565b9150615a6d82615a06565b604082019050919050565b60006020820190508181036000830152615a9181615a55565b9050919050565b6000615aa382614944565b9150615aae83614944565b9250828203905081811115615ac657615ac5614d6d565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b02601b8361483a565b9150615b0d82615acc565b602082019050919050565b60006020820190508181036000830152615b3181615af5565b9050919050565b600081905092915050565b50565b6000615b53600083615b38565b9150615b5e82615b43565b600082019050919050565b6000615b7482615b46565b9150819050919050565b6000606082019050615b936000830186614a97565b615ba06020830185614a97565b615bad6040830184614a97565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615c4881614906565b82525050565b6000615c5a8383615c3f565b60208301905092915050565b6000602082019050919050565b6000615c7e82615c13565b615c888185615c1e565b9350615c9383615c2f565b8060005b83811015615cc4578151615cab8882615c4e565b9750615cb683615c66565b925050600181019050615c97565b5085935050505092915050565b600060a082019050615ce66000830188614a97565b615cf36020830187614f67565b8181036040830152615d058186615c73565b9050615d146060830185614b41565b615d216080830184614a97565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dadde9e4fc71caa50c04e61e884f3bfc37e4053d56ec6723dfe61f542fb4392564736f6c63430008130033

Deployed Bytecode Sourcemap

29457:17765:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34755:153;;;;;;;;;;;;;:::i;:::-;;7617:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9784:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31070:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29507:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8737:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37340:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30064:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29875:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30849:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30809;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35751:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10435:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33873:784;;;:::i;:::-;;29590:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29970:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29931:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8579:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11199:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29555:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30162:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37609:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30660:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30242:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8908:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22082:148;;;;;;;;;;;;;:::i;:::-;;42682:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34964:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36220:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29682:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30549;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21440:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29719:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30695:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7836:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36562:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30623:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30118:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30889:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30771:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11920:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30022:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9248:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37010:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31292:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36372:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35993:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30467:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29756:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35358:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30515:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9486:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29798:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35149:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30586:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22385:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30733:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29838:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46209:1010;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34755:153;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34824:4:::1;34808:13;;:20;;;;;;;;;;;;;;;;;;34853:4;34839:11;;:18;;;;;;;;;;;;;;;;;;34885:15;34868:14;:32;;;;34755:153::o:0;7617:100::-;7671:13;7704:5;7697:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7617:100;:::o;9784:169::-;9867:4;9884:39;9893:12;:10;:12::i;:::-;9907:7;9916:6;9884:8;:39::i;:::-;9941:4;9934:11;;9784:169;;;;:::o;31070:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29507:41::-;;;;;;;;;;;;;:::o;8737:108::-;8798:7;8825:12;;8818:19;;8737:108;:::o;37340:255::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37447:9:::1;;;;;;;;;;;37419:38;;37436:9;37419:38;;;;;;;;;;;;37480:9;37468;;:21;;;;;;;;;;;;;;;;;;37502:32;37518:9;;;;;;;;;;;37529:4;37502:15;:32::i;:::-;37545:42;37571:9;;;;;;;;;;;37582:4;37545:25;:42::i;:::-;37340:255:::0;:::o;30064:47::-;;;;:::o;29875:36::-;;;;:::o;30849:33::-;;;;:::o;30809:::-;;;;:::o;35751:234::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35870:4:::1;35864;35860:1;35844:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35843:31;;;;:::i;:::-;35833:6;:41;;35825:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35970:6;35960;:17;;;;:::i;:::-;35937:20;:40;;;;35751:234:::0;:::o;10435:355::-;10575:4;10592:36;10602:6;10610:9;10621:6;10592:9;:36::i;:::-;10639:121;10648:6;10656:12;:10;:12::i;:::-;10670:89;10708:6;10670:89;;;;;;;;;;;;;;;;;:11;:19;10682:6;10670:19;;;;;;;;;;;;;;;:33;10690:12;:10;:12::i;:::-;10670:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10639:8;:121::i;:::-;10778:4;10771:11;;10435:355;;;;;:::o;33873:784::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33942:35:::1;33999:42;33942:100;;34063:58;34097:16;34116:4;34063:25;:58::i;:::-;34150:16;34132:15;;:34;;;;;;;;;;;;;;;;;;34221:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34203:56;;;34268:4;34275:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34203:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34187:13;;:112;;;;;;;;;;;;;;;;;;34310:55;34344:13;;;;;;;;;;;34360:4;34310:25;:55::i;:::-;34376:58;34413:13;;;;;;;;;;;34429:4;34376:28;:58::i;:::-;34447:69;34464:4;34479:15;;;;;;;;;;;34498:17;34447:8;:69::i;:::-;34529:15;;;;;;;;;;;:31;;;34568:9;34587:4;34593:24;34611:4;34593:9;:24::i;:::-;34618:1;34620::::0;34622:10:::1;34633:15;34529:120;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33931:726;33873:784::o:0;29590:53::-;29636:6;29590:53;:::o;29970:45::-;;;;:::o;29931:32::-;;;;;;;;;;;;;:::o;8579:93::-;8637:5;8662:2;8655:9;;8579:93;:::o;11199:218::-;11287:4;11304:83;11313:12;:10;:12::i;:::-;11327:7;11336:50;11375:10;11336:11;:25;11348:12;:10;:12::i;:::-;11336:25;;;;;;;;;;;;;;;:34;11362:7;11336:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11304:8;:83::i;:::-;11405:4;11398:11;;11199:218;;;;:::o;29555:28::-;;;;;;;;;;;;;:::o;30162:33::-;;;;;;;;;;;;;:::o;37609:125::-;37674:4;37698:19;:28;37718:7;37698:28;;;;;;;;;;;;;;;;;;;;;;;;;37691:35;;37609:125;;;:::o;30660:28::-;;;;:::o;30242:31::-;;;;;;;;;;;;;:::o;8908:127::-;8982:7;9009:9;:18;9019:7;9009:18;;;;;;;;;;;;;;;;9002:25;;8908:127;;;:::o;22082:148::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:1:::1;22152:40;;22173:6;;;;;;;;;;;22152:40;;;;;;;;;;;;22220:1;22203:6;;:19;;;;;;;;;;;;;;;;;;22082:148::o:0;42682:447::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42836:3:::1;42813:19;:26;;42805:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;42926:4;42914:8;:16;;:33;;;;;42946:1;42934:8;:13;;42914:33;42906:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;43029:19;43011:15;:37;;;;43078:8;43059:16;:27;;;;43113:8;43097:13;;:24;;;;;;;;;;;;;;;;;;42682:447:::0;;;:::o;34964:120::-;35016:4;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35049:5:::1;35032:14;;:22;;;;;;;;;;;;;;;;;;35072:4;35065:11;;34964:120:::0;:::o;36220:144::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36352:4:::1;36310:31;:39;36342:6;36310:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36220:144:::0;;:::o;29682:30::-;;;;;;;;;;;;;:::o;30549:::-;;;;:::o;21440:79::-;21478:7;21505:6;;;;;;;;;;;21498:13;;21440:79;:::o;29719:24::-;;;;;;;;;;;;;:::o;30695:31::-;;;;:::o;7836:104::-;7892:13;7925:7;7918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7836:104;:::o;36562:244::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36669:13:::1;;;;;;;;;;;36661:21;;:4;:21;;::::0;36653:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36757:41;36786:4;36792:5;36757:28;:41::i;:::-;36562:244:::0;;:::o;30623:24::-;;;;:::o;30118:35::-;;;;:::o;30889:27::-;;;;:::o;30771:25::-;;;;:::o;11920:269::-;12013:4;12030:129;12039:12;:10;:12::i;:::-;12053:7;12062:96;12101:15;12062:96;;;;;;;;;;;;;;;;;:11;:25;12074:12;:10;:12::i;:::-;12062:25;;;;;;;;;;;;;;;:34;12088:7;12062:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12030:8;:129::i;:::-;12177:4;12170:11;;11920:269;;;;:::o;30022:29::-;;;;:::o;9248:175::-;9334:4;9351:42;9361:12;:10;:12::i;:::-;9375:9;9386:6;9351:9;:42::i;:::-;9411:4;9404:11;;9248:175;;;;:::o;37010:318::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37147:15:::1;;;;;;;;;;;37104:59;;37127:18;37104:59;;;;;;;;;;;;37192:18;37174:15;;:36;;;;;;;;;;;;;;;;;;37223:38;37239:15;;;;;;;;;;;37256:4;37223:15;:38::i;:::-;37272:48;37298:15;;;;;;;;;;;37315:4;37272:25;:48::i;:::-;37010:318:::0;:::o;31292:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30202:33::-;;;;;;;;;;;;;:::o;36372:182::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36488:8:::1;36457:19;:28;36477:7;36457:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36528:7;36512:34;;;36537:8;36512:34;;;;;;:::i;:::-;;;;;;;;36372:182:::0;;:::o;35993:215::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36115:4:::1;36109;36105:1;36089:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36088:31;;;;:::i;:::-;36078:6;:41;;36070:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36193:6;36183;:17;;;;:::i;:::-;36171:9;:29;;;;35993:215:::0;:::o;30467:39::-;;;;;;;;;;;;;:::o;29756:35::-;;;;:::o;35358:381::-;35439:4;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35495:6:::1;35491:1;35475:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35462:9;:39;;35454:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35610:4;35606:1;35590:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35577:9;:37;;35569:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35702:9;35681:18;:30;;;;35728:4;35721:11;;35358:381:::0;;;:::o;30515:27::-;;;;:::o;9486:151::-;9575:7;9602:11;:18;9614:5;9602:18;;;;;;;;;;;;;;;:27;9621:7;9602:27;;;;;;;;;;;;;;;;9595:34;;9486:151;;;;:::o;29798:33::-;;;;:::o;35149:134::-;35209:4;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35248:5:::1;35225:20;;:28;;;;;;;;;;;;;;;;;;35271:4;35264:11;;35149:134:::0;:::o;30586:30::-;;;;:::o;22385:244::-;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22494:1:::1;22474:22;;:8;:22;;::::0;22466:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22584:8;22555:38;;22576:6;;;;;;;;;;;22555:38;;;;;;;;;;;;22613:8;22604:6;;:17;;;;;;;;;;;;;;;;;;22385:244:::0;:::o;30733:31::-;;;;:::o;29838:24::-;;;;:::o;46209:1010::-;46293:4;21662:12;:10;:12::i;:::-;21652:22;;:6;;;;;;;;;;;:22;;;21644:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46358:19:::1;;46335:20;;:42;;;;:::i;:::-;46317:15;:60;46309:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;46445:4;46434:7;:15;;46426:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46530:15;46507:20;:38;;;;46608:28;46639:4;:14;;;46654:13;;;;;;;;;;;46639:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46608:60;;46726:20;46780:5;46772:7;46749:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;46726:59;;46913:1;46898:12;:16;46894:109;;;46930:61;46946:13;;;;;;;;;;;46969:6;46978:12;46930:15;:61::i;:::-;46894:109;47086:19;47123:13;;;;;;;;;;;47086:51;;47148:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47175:14;;;;;;;;;;47207:4;47200:11;;;;;46209:1010:::0;;;:::o;253:98::-;306:7;333:10;326:17;;253:98;:::o;15106:380::-;15259:1;15242:19;;:5;:19;;;15234:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15340:1;15321:21;;:7;:21;;;15313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15424:6;15394:11;:18;15406:5;15394:18;;;;;;;;;;;;;;;:27;15413:7;15394:27;;;;;;;;;;;;;;;:36;;;;15462:7;15446:32;;15455:5;15446:32;;;15471:6;15446:32;;;;;;:::i;:::-;;;;;;;;15106:380;;;:::o;37742:4400::-;37890:1;37874:18;;:4;:18;;;37866:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37967:1;37953:16;;:2;:16;;;37945:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38045:1;38035:6;:11;38032:92;;38063:28;38079:4;38085:2;38089:1;38063:15;:28::i;:::-;38106:7;;38032:92;38147:14;;;;;;;;;;;38144:1841;;;38207:7;:5;:7::i;:::-;38199:15;;:4;:15;;;;:49;;;;;38241:7;:5;:7::i;:::-;38235:13;;:2;:13;;;;38199:49;:86;;;;;38283:1;38269:16;;:2;:16;;;;38199:86;:128;;;;;38320:6;38306:21;;:2;:21;;;;38199:128;:158;;;;;38349:8;;;;;;;;;;;38348:9;38199:158;38177:1797;;;38395:13;;;;;;;;;;;38391:148;;38440:19;:25;38460:4;38440:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38469:19;:23;38489:2;38469:23;;;;;;;;;;;;;;;;;;;;;;;;;38440:52;38432:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38391:148;38697:20;;;;;;;;;;;38693:423;;;38751:7;:5;:7::i;:::-;38745:13;;:2;:13;;;;:47;;;;;38776:15;;;;;;;;;;;38762:30;;:2;:30;;;;38745:47;:79;;;;;38810:13;;;;;;;;;;;38796:28;;:2;:28;;;;38745:79;38741:356;;;38902:12;38860:28;:39;38889:9;38860:39;;;;;;;;;;;;;;;;:54;38852:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39061:12;39019:28;:39;39048:9;39019:39;;;;;;;;;;;;;;;:54;;;;38741:356;38693:423;39185:25;:31;39211:4;39185:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39221:31;:35;39253:2;39221:35;;;;;;;;;;;;;;;;;;;;;;;;;39220:36;39185:71;39181:778;;;39303:20;;39293:6;:30;;39285:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39442:9;;39425:13;39435:2;39425:9;:13::i;:::-;39416:6;:22;;;;:::i;:::-;:35;;39408:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39181:778;;;39569:25;:29;39595:2;39569:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39603:31;:37;39635:4;39603:37;;;;;;;;;;;;;;;;;;;;;;;;;39602:38;39569:71;39565:394;;;39687:20;;39677:6;:30;;39669:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39565:394;;;39813:31;:35;39845:2;39813:35;;;;;;;;;;;;;;;;;;;;;;;;;39809:150;;39906:9;;39889:13;39899:2;39889:9;:13::i;:::-;39880:6;:22;;;;:::i;:::-;:35;;39872:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39809:150;39565:394;39181:778;38177:1797;38144:1841;39999:28;40030:24;40048:4;40030:9;:24::i;:::-;39999:55;;40065:12;40104:18;;40080:20;:42;;40065:57;;40153:7;:35;;;;;40177:11;;;;;;;;;;;40153:35;:61;;;;;40206:8;;;;;;;;;;;40205:9;40153:61;:110;;;;;40232:25;:31;40258:4;40232:31;;;;;;;;;;;;;;;;;;;;;;;;;40231:32;40153:110;:153;;;;;40281:19;:25;40301:4;40281:25;;;;;;;;;;;;;;;;;;;;;;;;;40280:26;40153:153;:194;;;;;40324:19;:23;40344:2;40324:23;;;;;;;;;;;;;;;;;;;;;;;;;40323:24;40153:194;40135:338;;;40385:4;40374:8;;:15;;;;;;;;;;;;;;;;;;40418:10;:8;:10::i;:::-;40456:5;40445:8;;:16;;;;;;;;;;;;;;;;;;40135:338;40503:8;;;;;;;;;;;40502:9;:56;;;;;40529:25;:29;40555:2;40529:29;;;;;;;;;;;;;;;;;;;;;;;;;40502:56;:87;;;;;40576:13;;;;;;;;;;;40502:87;:130;;;;;40607:19;:25;40627:4;40607:25;;;;;;;;;;;;;;;;;;;;;;;;;40502:130;:210;;;;;40697:15;;40680:14;;:32;;;;:::i;:::-;40662:15;:50;40502:210;40485:295;;;40739:29;:27;:29::i;:::-;;40485:295;40792:12;40808:8;;;;;;;;;;;40807:9;40792:24;;40917:19;:25;40937:4;40917:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40946:19;:23;40966:2;40946:23;;;;;;;;;;;;;;;;;;;;;;;;;40917:52;40914:99;;;40996:5;40986:15;;40914:99;41033:12;41137:7;41134:955;;;41188:25;:29;41214:2;41188:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41237:1;41221:13;;:17;41188:50;41184:736;;;41290:3;41274:13;;41265:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;41258:35;;41360:13;;41341:16;;41334:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41312:18;;:61;;;;;;;:::i;:::-;;;;;;;;41428:13;;41415:10;;41408:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41392:12;;:49;;;;;;;:::i;:::-;;;;;;;;41508:13;;41489:16;;41482:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41460:18;;:61;;;;;;;:::i;:::-;;;;;;;;41184:736;;;41582:25;:31;41608:4;41582:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41632:1;41617:12;;:16;41582:51;41579:341;;;41682:3;41667:12;;41658:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;41651:34;;41748:12;;41730:15;;41723:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41701:18;;:59;;;;;;;:::i;:::-;;;;;;;;41814:12;;41802:9;;41795:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41779:12;;:47;;;;;;;:::i;:::-;;;;;;;;41892:12;;41874:15;;41867:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41845:18;;:59;;;;;;;:::i;:::-;;;;;;;;41579:341;41184:736;41958:1;41951:4;:8;41948:93;;;41983:42;41999:4;42013;42020;41983:15;:42::i;:::-;41948:93;42073:4;42063:14;;;;;:::i;:::-;;;41134:955;42101:33;42117:4;42123:2;42127:6;42101:15;:33::i;:::-;37855:4287;;;;37742:4400;;;;:::o;17387:192::-;17473:7;17506:1;17501;:6;;17509:12;17493:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17533:9;17549:1;17545;:5;;;;:::i;:::-;17533:17;;17570:1;17563:8;;;17387:192;;;;;:::o;36814:188::-;36931:5;36897:25;:31;36923:4;36897:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36988:5;36954:40;;36982:4;36954:40;;;;;;;;;;;;36814:188;;:::o;16484:181::-;16542:7;16562:9;16578:1;16574;:5;;;;:::i;:::-;16562:17;;16603:1;16598;:6;;16590:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16656:1;16649:8;;;16484:181;;;;:::o;12679:573::-;12837:1;12819:20;;:6;:20;;;12811:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12921:1;12900:23;;:9;:23;;;12892:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12976:47;12997:6;13005:9;13016:6;12976:20;:47::i;:::-;13056:71;13078:6;13056:71;;;;;;;;;;;;;;;;;:9;:17;13066:6;13056:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13036:9;:17;13046:6;13036:17;;;;;;;;;;;;;;;:91;;;;13161:32;13186:6;13161:9;:20;13171:9;13161:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13138:9;:20;13148:9;13138:20;;;;;;;;;;;;;;;:55;;;;13226:9;13209:35;;13218:6;13209:35;;;13237:6;13209:35;;;;;;:::i;:::-;;;;;;;;12679:573;;;:::o;43143:1693::-;43182:12;43207:23;43233:24;43251:4;43233:9;:24::i;:::-;43207:50;;43268:25;43338:12;;43317:18;;43296;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43268:82;;43393:1;43374:15;:20;:46;;;;43419:1;43398:17;:22;43374:46;43371:60;;;43423:7;;;;;43371:60;43485:2;43464:18;;:23;;;;:::i;:::-;43446:15;:41;43443:111;;;43540:2;43519:18;;:23;;;;:::i;:::-;43501:41;;43443:111;43623:23;43708:1;43688:17;43667:18;;43649:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43623:86;;43720:26;43767:15;43749;:33;;;;:::i;:::-;43720:62;;43827:1;43801:22;29636:6;43801:9;:22::i;:::-;:27;43793:36;;;;;;43850:25;43878:21;43850:49;;43912:36;43929:18;43912:16;:36::i;:::-;43970:18;44015:17;43991:21;:41;;;;:::i;:::-;43970:62;;44053:23;44111:17;44092:18;;44079:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;44053:75;;44139:17;44185;44172:12;;44159:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;44139:63;;44233:23;44290:9;44272:15;44259:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44233:66;;44351:1;44330:18;:22;;;;44384:1;44363:18;:22;;;;44411:1;44396:12;:16;;;;44454:9;;;;;;;;;;;44446:23;;44477:9;44446:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44433:58;;;;;44533:1;44515:15;:19;:42;;;;;44556:1;44538:15;:19;44515:42;44512:210;;;44573:46;44586:15;44603;44573:12;:46::i;:::-;44639:71;44654:18;44674:15;44691:18;;44639:71;;;;;;;;:::i;:::-;;;;;;;;44512:210;44773:15;;;;;;;;;;;44765:29;;44802:21;44765:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44752:76;;;;;43171:1665;;;;;;;;;;43143:1693;:::o;44844:746::-;44901:4;44934:15;44917:14;:32;;;;45002:28;45033:4;:14;;;45048:13;;;;;;;;;;;45033:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45002:60;;45110:20;45173:5;45156:16;;45133:20;:39;;;;:::i;:::-;:45;;;;:::i;:::-;45110:68;;45296:1;45281:12;:16;45277:109;;;45313:61;45329:13;;;;;;;;;;;45352:6;45361:12;45313:15;:61::i;:::-;45277:109;45459:19;45496:13;;;;;;;;;;;45459:51;;45521:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45548:12;;;;;;;;;;45578:4;45571:11;;;;;44844:746;:::o;16089:125::-;;;;:::o;45596:601::-;45724:21;45762:1;45748:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45724:40;;45793:4;45775;45780:1;45775:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45819:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45809:4;45814:1;45809:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45854:62;45871:4;45886:15;;;;;;;;;;;45904:11;45854:8;:62::i;:::-;45955:15;;;;;;;;;;;:66;;;46036:11;46062:1;46106:4;46133;46153:15;45955:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45651:546;45596:601;:::o;42156:517::-;42304:62;42321:4;42336:15;;;;;;;;;;;42354:11;42304:8;:62::i;:::-;42409:15;;;;;;;;;;;:31;;;42448:9;42481:4;42501:11;42527:1;42570;29636:6;42639:15;42409:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42156:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:468::-;7798:6;7806;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;8108:2;8134:50;8176:7;8167:6;8156:9;8152:22;8134:50;:::i;:::-;8124:60;;8079:115;7733:468;;;;;:::o;8207:474::-;8275:6;8283;8332:2;8320:9;8311:7;8307:23;8303:32;8300:119;;;8338:79;;:::i;:::-;8300:119;8458:1;8483:53;8528:7;8519:6;8508:9;8504:22;8483:53;:::i;:::-;8473:63;;8429:117;8585:2;8611:53;8656:7;8647:6;8636:9;8632:22;8611:53;:::i;:::-;8601:63;;8556:118;8207:474;;;;;:::o;8687:182::-;8827:34;8823:1;8815:6;8811:14;8804:58;8687:182;:::o;8875:366::-;9017:3;9038:67;9102:2;9097:3;9038:67;:::i;:::-;9031:74;;9114:93;9203:3;9114:93;:::i;:::-;9232:2;9227:3;9223:12;9216:19;;8875:366;;;:::o;9247:419::-;9413:4;9451:2;9440:9;9436:18;9428:26;;9500:9;9494:4;9490:20;9486:1;9475:9;9471:17;9464:47;9528:131;9654:4;9528:131;:::i;:::-;9520:139;;9247:419;;;:::o;9672:180::-;9720:77;9717:1;9710:88;9817:4;9814:1;9807:15;9841:4;9838:1;9831:15;9858:320;9902:6;9939:1;9933:4;9929:12;9919:22;;9986:1;9980:4;9976:12;10007:18;9997:81;;10063:4;10055:6;10051:17;10041:27;;9997:81;10125:2;10117:6;10114:14;10094:18;10091:38;10088:84;;10144:18;;:::i;:::-;10088:84;9909:269;9858:320;;;:::o;10184:180::-;10232:77;10229:1;10222:88;10329:4;10326:1;10319:15;10353:4;10350:1;10343:15;10370:410;10410:7;10433:20;10451:1;10433:20;:::i;:::-;10428:25;;10467:20;10485:1;10467:20;:::i;:::-;10462:25;;10522:1;10519;10515:9;10544:30;10562:11;10544:30;:::i;:::-;10533:41;;10723:1;10714:7;10710:15;10707:1;10704:22;10684:1;10677:9;10657:83;10634:139;;10753:18;;:::i;:::-;10634:139;10418:362;10370:410;;;;:::o;10786:180::-;10834:77;10831:1;10824:88;10931:4;10928:1;10921:15;10955:4;10952:1;10945:15;10972:185;11012:1;11029:20;11047:1;11029:20;:::i;:::-;11024:25;;11063:20;11081:1;11063:20;:::i;:::-;11058:25;;11102:1;11092:35;;11107:18;;:::i;:::-;11092:35;11149:1;11146;11142:9;11137:14;;10972:185;;;;:::o;11163:234::-;11303:34;11299:1;11291:6;11287:14;11280:58;11372:17;11367:2;11359:6;11355:15;11348:42;11163:234;:::o;11403:366::-;11545:3;11566:67;11630:2;11625:3;11566:67;:::i;:::-;11559:74;;11642:93;11731:3;11642:93;:::i;:::-;11760:2;11755:3;11751:12;11744:19;;11403:366;;;:::o;11775:419::-;11941:4;11979:2;11968:9;11964:18;11956:26;;12028:9;12022:4;12018:20;12014:1;12003:9;11999:17;11992:47;12056:131;12182:4;12056:131;:::i;:::-;12048:139;;11775:419;;;:::o;12200:143::-;12257:5;12288:6;12282:13;12273:22;;12304:33;12331:5;12304:33;:::i;:::-;12200:143;;;;:::o;12349:351::-;12419:6;12468:2;12456:9;12447:7;12443:23;12439:32;12436:119;;;12474:79;;:::i;:::-;12436:119;12594:1;12619:64;12675:7;12666:6;12655:9;12651:22;12619:64;:::i;:::-;12609:74;;12565:128;12349:351;;;;:::o;12706:332::-;12827:4;12865:2;12854:9;12850:18;12842:26;;12878:71;12946:1;12935:9;12931:17;12922:6;12878:71;:::i;:::-;12959:72;13027:2;13016:9;13012:18;13003:6;12959:72;:::i;:::-;12706:332;;;;;:::o;13044:85::-;13089:7;13118:5;13107:16;;13044:85;;;:::o;13135:158::-;13193:9;13226:61;13244:42;13253:32;13279:5;13253:32;:::i;:::-;13244:42;:::i;:::-;13226:61;:::i;:::-;13213:74;;13135:158;;;:::o;13299:147::-;13394:45;13433:5;13394:45;:::i;:::-;13389:3;13382:58;13299:147;;:::o;13452:807::-;13701:4;13739:3;13728:9;13724:19;13716:27;;13753:71;13821:1;13810:9;13806:17;13797:6;13753:71;:::i;:::-;13834:72;13902:2;13891:9;13887:18;13878:6;13834:72;:::i;:::-;13916:80;13992:2;13981:9;13977:18;13968:6;13916:80;:::i;:::-;14006;14082:2;14071:9;14067:18;14058:6;14006:80;:::i;:::-;14096:73;14164:3;14153:9;14149:19;14140:6;14096:73;:::i;:::-;14179;14247:3;14236:9;14232:19;14223:6;14179:73;:::i;:::-;13452:807;;;;;;;;;:::o;14265:143::-;14322:5;14353:6;14347:13;14338:22;;14369:33;14396:5;14369:33;:::i;:::-;14265:143;;;;:::o;14414:663::-;14502:6;14510;14518;14567:2;14555:9;14546:7;14542:23;14538:32;14535:119;;;14573:79;;:::i;:::-;14535:119;14693:1;14718:64;14774:7;14765:6;14754:9;14750:22;14718:64;:::i;:::-;14708:74;;14664:128;14831:2;14857:64;14913:7;14904:6;14893:9;14889:22;14857:64;:::i;:::-;14847:74;;14802:129;14970:2;14996:64;15052:7;15043:6;15032:9;15028:22;14996:64;:::i;:::-;14986:74;;14941:129;14414:663;;;;;:::o;15083:238::-;15223:34;15219:1;15211:6;15207:14;15200:58;15292:21;15287:2;15279:6;15275:15;15268:46;15083:238;:::o;15327:366::-;15469:3;15490:67;15554:2;15549:3;15490:67;:::i;:::-;15483:74;;15566:93;15655:3;15566:93;:::i;:::-;15684:2;15679:3;15675:12;15668:19;;15327:366;;;:::o;15699:419::-;15865:4;15903:2;15892:9;15888:18;15880:26;;15952:9;15946:4;15942:20;15938:1;15927:9;15923:17;15916:47;15980:131;16106:4;15980:131;:::i;:::-;15972:139;;15699:419;;;:::o;16124:235::-;16264:34;16260:1;16252:6;16248:14;16241:58;16333:18;16328:2;16320:6;16316:15;16309:43;16124:235;:::o;16365:366::-;16507:3;16528:67;16592:2;16587:3;16528:67;:::i;:::-;16521:74;;16604:93;16693:3;16604:93;:::i;:::-;16722:2;16717:3;16713:12;16706:19;;16365:366;;;:::o;16737:419::-;16903:4;16941:2;16930:9;16926:18;16918:26;;16990:9;16984:4;16980:20;16976:1;16965:9;16961:17;16954:47;17018:131;17144:4;17018:131;:::i;:::-;17010:139;;16737:419;;;:::o;17162:244::-;17302:34;17298:1;17290:6;17286:14;17279:58;17371:27;17366:2;17358:6;17354:15;17347:52;17162:244;:::o;17412:366::-;17554:3;17575:67;17639:2;17634:3;17575:67;:::i;:::-;17568:74;;17651:93;17740:3;17651:93;:::i;:::-;17769:2;17764:3;17760:12;17753:19;;17412:366;;;:::o;17784:419::-;17950:4;17988:2;17977:9;17973:18;17965:26;;18037:9;18031:4;18027:20;18023:1;18012:9;18008:17;18001:47;18065:131;18191:4;18065:131;:::i;:::-;18057:139;;17784:419;;;:::o;18209:223::-;18349:34;18345:1;18337:6;18333:14;18326:58;18418:6;18413:2;18405:6;18401:15;18394:31;18209:223;:::o;18438:366::-;18580:3;18601:67;18665:2;18660:3;18601:67;:::i;:::-;18594:74;;18677:93;18766:3;18677:93;:::i;:::-;18795:2;18790:3;18786:12;18779:19;;18438:366;;;:::o;18810:419::-;18976:4;19014:2;19003:9;18999:18;18991:26;;19063:9;19057:4;19053:20;19049:1;19038:9;19034:17;19027:47;19091:131;19217:4;19091:131;:::i;:::-;19083:139;;18810:419;;;:::o;19235:240::-;19375:34;19371:1;19363:6;19359:14;19352:58;19444:23;19439:2;19431:6;19427:15;19420:48;19235:240;:::o;19481:366::-;19623:3;19644:67;19708:2;19703:3;19644:67;:::i;:::-;19637:74;;19720:93;19809:3;19720:93;:::i;:::-;19838:2;19833:3;19829:12;19822:19;;19481:366;;;:::o;19853:419::-;20019:4;20057:2;20046:9;20042:18;20034:26;;20106:9;20100:4;20096:20;20092:1;20081:9;20077:17;20070:47;20134:131;20260:4;20134:131;:::i;:::-;20126:139;;19853:419;;;:::o;20278:239::-;20418:34;20414:1;20406:6;20402:14;20395:58;20487:22;20482:2;20474:6;20470:15;20463:47;20278:239;:::o;20523:366::-;20665:3;20686:67;20750:2;20745:3;20686:67;:::i;:::-;20679:74;;20762:93;20851:3;20762:93;:::i;:::-;20880:2;20875:3;20871:12;20864:19;;20523:366;;;:::o;20895:419::-;21061:4;21099:2;21088:9;21084:18;21076:26;;21148:9;21142:4;21138:20;21134:1;21123:9;21119:17;21112:47;21176:131;21302:4;21176:131;:::i;:::-;21168:139;;20895:419;;;:::o;21320:225::-;21460:34;21456:1;21448:6;21444:14;21437:58;21529:8;21524:2;21516:6;21512:15;21505:33;21320:225;:::o;21551:366::-;21693:3;21714:67;21778:2;21773:3;21714:67;:::i;:::-;21707:74;;21790:93;21879:3;21790:93;:::i;:::-;21908:2;21903:3;21899:12;21892:19;;21551:366;;;:::o;21923:419::-;22089:4;22127:2;22116:9;22112:18;22104:26;;22176:9;22170:4;22166:20;22162:1;22151:9;22147:17;22140:47;22204:131;22330:4;22204:131;:::i;:::-;22196:139;;21923:419;;;:::o;22348:191::-;22388:3;22407:20;22425:1;22407:20;:::i;:::-;22402:25;;22441:20;22459:1;22441:20;:::i;:::-;22436:25;;22484:1;22481;22477:9;22470:16;;22505:3;22502:1;22499:10;22496:36;;;22512:18;;:::i;:::-;22496:36;22348:191;;;;:::o;22545:182::-;22685:34;22681:1;22673:6;22669:14;22662:58;22545:182;:::o;22733:366::-;22875:3;22896:67;22960:2;22955:3;22896:67;:::i;:::-;22889:74;;22972:93;23061:3;22972:93;:::i;:::-;23090:2;23085:3;23081:12;23074:19;;22733:366;;;:::o;23105:419::-;23271:4;23309:2;23298:9;23294:18;23286:26;;23358:9;23352:4;23348:20;23344:1;23333:9;23329:17;23322:47;23386:131;23512:4;23386:131;:::i;:::-;23378:139;;23105:419;;;:::o;23530:229::-;23670:34;23666:1;23658:6;23654:14;23647:58;23739:12;23734:2;23726:6;23722:15;23715:37;23530:229;:::o;23765:366::-;23907:3;23928:67;23992:2;23987:3;23928:67;:::i;:::-;23921:74;;24004:93;24093:3;24004:93;:::i;:::-;24122:2;24117:3;24113:12;24106:19;;23765:366;;;:::o;24137:419::-;24303:4;24341:2;24330:9;24326:18;24318:26;;24390:9;24384:4;24380:20;24376:1;24365:9;24361:17;24354:47;24418:131;24544:4;24418:131;:::i;:::-;24410:139;;24137:419;;;:::o;24562:351::-;24632:6;24681:2;24669:9;24660:7;24656:23;24652:32;24649:119;;;24687:79;;:::i;:::-;24649:119;24807:1;24832:64;24888:7;24879:6;24868:9;24864:22;24832:64;:::i;:::-;24822:74;;24778:128;24562:351;;;;:::o;24919:223::-;25059:34;25055:1;25047:6;25043:14;25036:58;25128:6;25123:2;25115:6;25111:15;25104:31;24919:223;:::o;25148:366::-;25290:3;25311:67;25375:2;25370:3;25311:67;:::i;:::-;25304:74;;25387:93;25476:3;25387:93;:::i;:::-;25505:2;25500:3;25496:12;25489:19;;25148:366;;;:::o;25520:419::-;25686:4;25724:2;25713:9;25709:18;25701:26;;25773:9;25767:4;25763:20;25759:1;25748:9;25744:17;25737:47;25801:131;25927:4;25801:131;:::i;:::-;25793:139;;25520:419;;;:::o;25945:221::-;26085:34;26081:1;26073:6;26069:14;26062:58;26154:4;26149:2;26141:6;26137:15;26130:29;25945:221;:::o;26172:366::-;26314:3;26335:67;26399:2;26394:3;26335:67;:::i;:::-;26328:74;;26411:93;26500:3;26411:93;:::i;:::-;26529:2;26524:3;26520:12;26513:19;;26172:366;;;:::o;26544:419::-;26710:4;26748:2;26737:9;26733:18;26725:26;;26797:9;26791:4;26787:20;26783:1;26772:9;26768:17;26761:47;26825:131;26951:4;26825:131;:::i;:::-;26817:139;;26544:419;;;:::o;26969:224::-;27109:34;27105:1;27097:6;27093:14;27086:58;27178:7;27173:2;27165:6;27161:15;27154:32;26969:224;:::o;27199:366::-;27341:3;27362:67;27426:2;27421:3;27362:67;:::i;:::-;27355:74;;27438:93;27527:3;27438:93;:::i;:::-;27556:2;27551:3;27547:12;27540:19;;27199:366;;;:::o;27571:419::-;27737:4;27775:2;27764:9;27760:18;27752:26;;27824:9;27818:4;27814:20;27810:1;27799:9;27795:17;27788:47;27852:131;27978:4;27852:131;:::i;:::-;27844:139;;27571:419;;;:::o;27996:222::-;28136:34;28132:1;28124:6;28120:14;28113:58;28205:5;28200:2;28192:6;28188:15;28181:30;27996:222;:::o;28224:366::-;28366:3;28387:67;28451:2;28446:3;28387:67;:::i;:::-;28380:74;;28463:93;28552:3;28463:93;:::i;:::-;28581:2;28576:3;28572:12;28565:19;;28224:366;;;:::o;28596:419::-;28762:4;28800:2;28789:9;28785:18;28777:26;;28849:9;28843:4;28839:20;28835:1;28824:9;28820:17;28813:47;28877:131;29003:4;28877:131;:::i;:::-;28869:139;;28596:419;;;:::o;29021:172::-;29161:24;29157:1;29149:6;29145:14;29138:48;29021:172;:::o;29199:366::-;29341:3;29362:67;29426:2;29421:3;29362:67;:::i;:::-;29355:74;;29438:93;29527:3;29438:93;:::i;:::-;29556:2;29551:3;29547:12;29540:19;;29199:366;;;:::o;29571:419::-;29737:4;29775:2;29764:9;29760:18;29752:26;;29824:9;29818:4;29814:20;29810:1;29799:9;29795:17;29788:47;29852:131;29978:4;29852:131;:::i;:::-;29844:139;;29571:419;;;:::o;29996:297::-;30136:34;30132:1;30124:6;30120:14;30113:58;30205:34;30200:2;30192:6;30188:15;30181:59;30274:11;30269:2;30261:6;30257:15;30250:36;29996:297;:::o;30299:366::-;30441:3;30462:67;30526:2;30521:3;30462:67;:::i;:::-;30455:74;;30538:93;30627:3;30538:93;:::i;:::-;30656:2;30651:3;30647:12;30640:19;;30299:366;;;:::o;30671:419::-;30837:4;30875:2;30864:9;30860:18;30852:26;;30924:9;30918:4;30914:20;30910:1;30899:9;30895:17;30888:47;30952:131;31078:4;30952:131;:::i;:::-;30944:139;;30671:419;;;:::o;31096:240::-;31236:34;31232:1;31224:6;31220:14;31213:58;31305:23;31300:2;31292:6;31288:15;31281:48;31096:240;:::o;31342:366::-;31484:3;31505:67;31569:2;31564:3;31505:67;:::i;:::-;31498:74;;31581:93;31670:3;31581:93;:::i;:::-;31699:2;31694:3;31690:12;31683:19;;31342:366;;;:::o;31714:419::-;31880:4;31918:2;31907:9;31903:18;31895:26;;31967:9;31961:4;31957:20;31953:1;31942:9;31938:17;31931:47;31995:131;32121:4;31995:131;:::i;:::-;31987:139;;31714:419;;;:::o;32139:169::-;32279:21;32275:1;32267:6;32263:14;32256:45;32139:169;:::o;32314:366::-;32456:3;32477:67;32541:2;32536:3;32477:67;:::i;:::-;32470:74;;32553:93;32642:3;32553:93;:::i;:::-;32671:2;32666:3;32662:12;32655:19;;32314:366;;;:::o;32686:419::-;32852:4;32890:2;32879:9;32875:18;32867:26;;32939:9;32933:4;32929:20;32925:1;32914:9;32910:17;32903:47;32967:131;33093:4;32967:131;:::i;:::-;32959:139;;32686:419;;;:::o;33111:241::-;33251:34;33247:1;33239:6;33235:14;33228:58;33320:24;33315:2;33307:6;33303:15;33296:49;33111:241;:::o;33358:366::-;33500:3;33521:67;33585:2;33580:3;33521:67;:::i;:::-;33514:74;;33597:93;33686:3;33597:93;:::i;:::-;33715:2;33710:3;33706:12;33699:19;;33358:366;;;:::o;33730:419::-;33896:4;33934:2;33923:9;33919:18;33911:26;;33983:9;33977:4;33973:20;33969:1;33958:9;33954:17;33947:47;34011:131;34137:4;34011:131;:::i;:::-;34003:139;;33730:419;;;:::o;34155:194::-;34195:4;34215:20;34233:1;34215:20;:::i;:::-;34210:25;;34249:20;34267:1;34249:20;:::i;:::-;34244:25;;34293:1;34290;34286:9;34278:17;;34317:1;34311:4;34308:11;34305:37;;;34322:18;;:::i;:::-;34305:37;34155:194;;;;:::o;34355:177::-;34495:29;34491:1;34483:6;34479:14;34472:53;34355:177;:::o;34538:366::-;34680:3;34701:67;34765:2;34760:3;34701:67;:::i;:::-;34694:74;;34777:93;34866:3;34777:93;:::i;:::-;34895:2;34890:3;34886:12;34879:19;;34538:366;;;:::o;34910:419::-;35076:4;35114:2;35103:9;35099:18;35091:26;;35163:9;35157:4;35153:20;35149:1;35138:9;35134:17;35127:47;35191:131;35317:4;35191:131;:::i;:::-;35183:139;;34910:419;;;:::o;35335:147::-;35436:11;35473:3;35458:18;;35335:147;;;;:::o;35488:114::-;;:::o;35608:398::-;35767:3;35788:83;35869:1;35864:3;35788:83;:::i;:::-;35781:90;;35880:93;35969:3;35880:93;:::i;:::-;35998:1;35993:3;35989:11;35982:18;;35608:398;;;:::o;36012:379::-;36196:3;36218:147;36361:3;36218:147;:::i;:::-;36211:154;;36382:3;36375:10;;36012:379;;;:::o;36397:442::-;36546:4;36584:2;36573:9;36569:18;36561:26;;36597:71;36665:1;36654:9;36650:17;36641:6;36597:71;:::i;:::-;36678:72;36746:2;36735:9;36731:18;36722:6;36678:72;:::i;:::-;36760;36828:2;36817:9;36813:18;36804:6;36760:72;:::i;:::-;36397:442;;;;;;:::o;36845:180::-;36893:77;36890:1;36883:88;36990:4;36987:1;36980:15;37014:4;37011:1;37004:15;37031:180;37079:77;37076:1;37069:88;37176:4;37173:1;37166:15;37200:4;37197:1;37190:15;37217:114;37284:6;37318:5;37312:12;37302:22;;37217:114;;;:::o;37337:184::-;37436:11;37470:6;37465:3;37458:19;37510:4;37505:3;37501:14;37486:29;;37337:184;;;;:::o;37527:132::-;37594:4;37617:3;37609:11;;37647:4;37642:3;37638:14;37630:22;;37527:132;;;:::o;37665:108::-;37742:24;37760:5;37742:24;:::i;:::-;37737:3;37730:37;37665:108;;:::o;37779:179::-;37848:10;37869:46;37911:3;37903:6;37869:46;:::i;:::-;37947:4;37942:3;37938:14;37924:28;;37779:179;;;;:::o;37964:113::-;38034:4;38066;38061:3;38057:14;38049:22;;37964:113;;;:::o;38113:732::-;38232:3;38261:54;38309:5;38261:54;:::i;:::-;38331:86;38410:6;38405:3;38331:86;:::i;:::-;38324:93;;38441:56;38491:5;38441:56;:::i;:::-;38520:7;38551:1;38536:284;38561:6;38558:1;38555:13;38536:284;;;38637:6;38631:13;38664:63;38723:3;38708:13;38664:63;:::i;:::-;38657:70;;38750:60;38803:6;38750:60;:::i;:::-;38740:70;;38596:224;38583:1;38580;38576:9;38571:14;;38536:284;;;38540:14;38836:3;38829:10;;38237:608;;;38113:732;;;;:::o;38851:831::-;39114:4;39152:3;39141:9;39137:19;39129:27;;39166:71;39234:1;39223:9;39219:17;39210:6;39166:71;:::i;:::-;39247:80;39323:2;39312:9;39308:18;39299:6;39247:80;:::i;:::-;39374:9;39368:4;39364:20;39359:2;39348:9;39344:18;39337:48;39402:108;39505:4;39496:6;39402:108;:::i;:::-;39394:116;;39520:72;39588:2;39577:9;39573:18;39564:6;39520:72;:::i;:::-;39602:73;39670:3;39659:9;39655:19;39646:6;39602:73;:::i;:::-;38851:831;;;;;;;;:::o

Swarm Source

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