ETH Price: $3,186.51 (-7.91%)
Gas: 4 Gwei

Token

Doghouse (House)
 

Overview

Max Total Supply

1,000,000,000 House

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,004,435.016736644640284138 House

Value
$0.00
0x3e4e91ad91254f3456778127a5a132ef04ab897e
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:
Doghouse

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-15
*/

/**
██████   ██████   ██████  ██   ██  ██████  ██    ██ ███████ ███████ 
██   ██ ██    ██ ██       ██   ██ ██    ██ ██    ██ ██      ██      
██   ██ ██    ██ ██   ███ ███████ ██    ██ ██    ██ ███████ █████   
██   ██ ██    ██ ██    ██ ██   ██ ██    ██ ██    ██      ██ ██      
██████   ██████   ██████  ██   ██  ██████   ██████  ███████ ███████ 

Life Force, Evasion, Attack, Luck and Skill.

Website: www.shibariumdoghouse.com
twitter: @shibdoghouse
telegram: https://t.me/shibariumdoghouse
medium: medium.com@shibariumdoghouse

We expect that the Shibarium ecosystem has the potential to revolutionize the way we interact with blockchain technology.
And we are excited to be a part of this movement.
                                                                                                                                                                                       
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;
 
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 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 Doghouse is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet; 
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
  
    bool public tradingActive = false;
    bool public swapEnabled = true;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public prevSellMarketingFee;
    uint256 public prevSellLiquidityFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Doghouse", "House") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 3;
       
         uint256 _prevSellMarketingFee = 2;
        uint256 _prevSellLiquidityFee = 3;
 
        
         uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 3;
 
        uint256 _earlySellLiquidityFee = 10;
        uint256 _earlySellMarketingFee = 10;
 
        uint256 totalSupply = 1000000000 * 1e18;
 
        maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
       
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
     
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        prevSellMarketingFee = _prevSellMarketingFee;
        prevSellLiquidityFee = _prevSellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        marketingWallet = address(0xa9f3C0ab1f5797DC02B20E830db89130EcA3DFc5); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(marketingWallet), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(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);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
  
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _prevSellMarketingFee, uint256 _prevSellLiquidityFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        prevSellMarketingFee = _prevSellMarketingFee;
        prevSellLiquidityFee= _prevSellLiquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
        
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
  
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
     function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer((amountETH * amountPercentage) / 100);
    }

    function clearStuckTokens(address _tokenContract, uint256 _amount) public onlyOwner {
    	  IERC20 tokenContract = IERC20(_tokenContract);
    	  tokenContract.transfer(msg.sender, _amount);
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                          
 
                //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");
                
            }
        }
 
       
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            } else {
                sellLiquidityFee = prevSellLiquidityFee;
                sellMarketingFee = prevSellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = prevSellLiquidityFee;
                sellMarketingFee = prevSellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee;
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
 
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function Chire(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"clearStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"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":"prevSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prevSellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_prevSellLiquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f446f67686f7573650000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f486f7573650000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000dfe565b508060049081620000f2919062000dfe565b5050506000620001076200065160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200065960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f4f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f4f565b6040518363ffffffff1660e01b81526004016200032592919062000f92565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f4f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200065960201b60201c565b620003c860a05160016200075660201b60201c565b6000600290506000600390506000600290506000600390506000600290506000600390506000600a90506000600a905060006b033b2e3c9fd0803ce800000090506103e880826200041a919062000fee565b62000426919062001068565b6007819055506103e86014826200043e919062000fee565b6200044a919062001068565b600981905550612710600a8262000462919062000fee565b6200046e919062001068565b60088190555088600e8190555087600f81905550600f54600e54620004949190620010a0565b600d8190555084601181905550836012819055508660138190555085601481905550601254601154620004c89190620010a0565b601081905550826015819055508160168190555073a9f3c0ab1f5797dc02b20e830db89130eca3dfc5600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200055362000545620007f760201b60201c565b60016200082160201b60201c565b620005663060016200082160201b60201c565b6200059b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082160201b60201c565b620005b061dead60016200082160201b60201c565b620005d2620005c4620007f760201b60201c565b60016200065960201b60201c565b620005e53060016200065960201b60201c565b6200061a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065960201b60201c565b6200062f61dead60016200065960201b60201c565b6200064133826200096e60201b60201c565b50505050505050505050620012aa565b600033905090565b620006696200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f2906200113c565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008316200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ba906200113c565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200096291906200117b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009e0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d790620011e8565b60405180910390fd5b620009f46000838362000b1c60201b60201c565b62000a108160025462000b2160201b6200265c1790919060201c565b60028190555062000a6e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b2160201b6200265c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1091906200121b565b60405180910390a35050565b505050565b600080828462000b329190620010a0565b90508381101562000b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b719062001288565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0657607f821691505b60208210810362000c1c5762000c1b62000bbe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c47565b62000c92868362000c47565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cdf62000cd962000cd38462000caa565b62000cb4565b62000caa565b9050919050565b6000819050919050565b62000cfb8362000cbe565b62000d1362000d0a8262000ce6565b84845462000c54565b825550505050565b600090565b62000d2a62000d1b565b62000d3781848462000cf0565b505050565b5b8181101562000d5f5762000d5360008262000d20565b60018101905062000d3d565b5050565b601f82111562000dae5762000d788162000c22565b62000d838462000c37565b8101602085101562000d93578190505b62000dab62000da28562000c37565b83018262000d3c565b50505b505050565b600082821c905092915050565b600062000dd36000198460080262000db3565b1980831691505092915050565b600062000dee838362000dc0565b9150826002028217905092915050565b62000e098262000b84565b67ffffffffffffffff81111562000e255762000e2462000b8f565b5b62000e31825462000bed565b62000e3e82828562000d63565b600060209050601f83116001811462000e76576000841562000e61578287015190505b62000e6d858262000de0565b86555062000edd565b601f19841662000e868662000c22565b60005b8281101562000eb05784890151825560018201915060208501945060208101905062000e89565b8683101562000ed0578489015162000ecc601f89168262000dc0565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f178262000eea565b9050919050565b62000f298162000f0a565b811462000f3557600080fd5b50565b60008151905062000f498162000f1e565b92915050565b60006020828403121562000f685762000f6762000ee5565b5b600062000f788482850162000f38565b91505092915050565b62000f8c8162000f0a565b82525050565b600060408201905062000fa9600083018562000f81565b62000fb8602083018462000f81565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ffb8262000caa565b9150620010088362000caa565b9250828202620010188162000caa565b9150828204841483151762001032576200103162000fbf565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010758262000caa565b9150620010828362000caa565b92508262001095576200109462001039565b5b828204905092915050565b6000620010ad8262000caa565b9150620010ba8362000caa565b9250828201905080821115620010d557620010d462000fbf565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001124602083620010db565b91506200113182620010ec565b602082019050919050565b60006020820190508181036000830152620011578162001115565b9050919050565b60008115159050919050565b62001175816200115e565b82525050565b60006020820190506200119260008301846200116a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d0601f83620010db565b9150620011dd8262001198565b602082019050919050565b600060208201905081810360008301526200120381620011c1565b9050919050565b620012158162000caa565b82525050565b60006020820190506200123260008301846200120a565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001270601b83620010db565b91506200127d8262001238565b602082019050919050565b60006020820190508181036000830152620012a38162001261565b9050919050565b60805160a0516156d66200130160003960008181611293015281816119d20152612e6b015260008181610d6501528181613c6f01528181613d5001528181613d7701528181613e130152613e3a01526156d66000f3fe60806040526004361061031e5760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610beb578063f2fde38b14610c14578063f637434214610c3d578063f8b45b0514610c6857610325565b8063dd62ed3e14610b58578063e2f4560514610b95578063f11a24d314610bc057610325565b8063c18bc195116100d1578063c18bc19514610a9c578063c8c8ebe414610ac5578063d257b34f14610af0578063d85ba06314610b2d57610325565b8063b62496f514610a0b578063bbc0c74214610a48578063c024666814610a7357610325565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d71461093d578063a4d15b641461097a578063a9059cbb146109a5578063aacebbe3146109e257610325565b80639a7a23d6146108c25780639c63e6b9146108eb578063a26577781461091457610325565b80637bce5a04146107d65780638a8c523c146108015780638da5cb5b146108185780639213691314610843578063924de9b71461086e57806395d89b411461089757610325565b80632bf3d42d1161026a57806366ca9b831161022357806370a08231116101fd57806370a082311461072e578063715018a61461076b5780637571336a1461078257806375f0a874146107ab57610325565b806366ca9b83146106af5780636a486a8e146106d85780636ddd17131461070357610325565b80632bf3d42d14610589578063313ce567146105b457806339509351146105df57806349bd5a5e1461061c5780634fbee19314610647578063541a43cf1461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cf578063208cce0c146104f857806322d3e2aa1461052357806323b872dd1461054c57610325565b80631a8145bb146104505780631da1db5e1461047b5780631f3fed8f146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa578063194b2b541461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c93565b60405161034c9190613fda565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061409a565b610d25565b60405161038991906140f5565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614110565b610d43565b6040516103c691906140f5565b60405180910390f35b3480156103db57600080fd5b506103e4610d63565b6040516103f1919061419c565b60405180910390f35b34801561040657600080fd5b5061040f610d87565b60405161041c91906141c6565b60405180910390f35b34801561043157600080fd5b5061043a610d91565b60405161044791906141c6565b60405180910390f35b34801561045c57600080fd5b50610465610d97565b60405161047291906141c6565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141e1565b610d9d565b005b3480156104b057600080fd5b506104b9610e9b565b6040516104c691906141c6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906141e1565b610ea1565b005b34801561050457600080fd5b5061050d610fcb565b60405161051a91906141c6565b60405180910390f35b34801561052f57600080fd5b5061054a6004803603810190610545919061420e565b610fd1565b005b34801561055857600080fd5b50610573600480360381019061056e919061429b565b6110f6565b60405161058091906140f5565b60405180910390f35b34801561059557600080fd5b5061059e6111cf565b6040516105ab91906141c6565b60405180910390f35b3480156105c057600080fd5b506105c96111d5565b6040516105d6919061430a565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061409a565b6111de565b60405161061391906140f5565b60405180910390f35b34801561062857600080fd5b50610631611291565b60405161063e9190614334565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614110565b6112b5565b60405161067b91906140f5565b60405180910390f35b34801561069057600080fd5b5061069961130b565b6040516106a691906141c6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061434f565b611311565b005b3480156106e457600080fd5b506106ed611416565b6040516106fa91906141c6565b60405180910390f35b34801561070f57600080fd5b5061071861141c565b60405161072591906140f5565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614110565b61142f565b60405161076291906141c6565b60405180910390f35b34801561077757600080fd5b50610780611477565b005b34801561078e57600080fd5b506107a960048036038101906107a491906143bb565b6115cf565b005b3480156107b757600080fd5b506107c06116c1565b6040516107cd9190614334565b60405180910390f35b3480156107e257600080fd5b506107eb6116e7565b6040516107f891906141c6565b60405180910390f35b34801561080d57600080fd5b506108166116ed565b005b34801561082457600080fd5b5061082d6117c3565b60405161083a9190614334565b60405180910390f35b34801561084f57600080fd5b506108586117ed565b60405161086591906141c6565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143fb565b6117f3565b005b3480156108a357600080fd5b506108ac6118a7565b6040516108b99190613fda565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906143bb565b611939565b005b3480156108f757600080fd5b50610912600480360381019061090d91906144e3565b611a6c565b005b34801561092057600080fd5b5061093b600480360381019061093691906143fb565b611bb5565b005b34801561094957600080fd5b50610964600480360381019061095f919061409a565b611c69565b60405161097191906140f5565b60405180910390f35b34801561098657600080fd5b5061098f611d36565b60405161099c91906140f5565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061409a565b611d49565b6040516109d991906140f5565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614110565b611d67565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190614110565b611ebe565b604051610a3f91906140f5565b60405180910390f35b348015610a5457600080fd5b50610a5d611ede565b604051610a6a91906140f5565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906143bb565b611ef1565b005b348015610aa857600080fd5b50610ac36004803603810190610abe91906141e1565b612031565b005b348015610ad157600080fd5b50610ada61215b565b604051610ae791906141c6565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906141e1565b612161565b604051610b2491906140f5565b60405180910390f35b348015610b3957600080fd5b50610b426122d1565b604051610b4f91906141c6565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614564565b6122d7565b604051610b8c91906141c6565b60405180910390f35b348015610ba157600080fd5b50610baa61235e565b604051610bb791906141c6565b60405180910390f35b348015610bcc57600080fd5b50610bd5612364565b604051610be291906141c6565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d919061409a565b61236a565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190614110565b61248a565b005b348015610c4957600080fd5b50610c52612650565b604051610c5f91906141c6565b60405180910390f35b348015610c7457600080fd5b50610c7d612656565b604051610c8a91906141c6565b60405180910390f35b606060038054610ca2906145d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906145d3565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d326126ba565b84846126c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60135481565b60185481565b610da56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614650565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610e61919061469f565b610e6b9190614710565b9081150290604051600060405180830381858888f19350505050158015610e96573d6000803e3d6000fd5b505050565b60175481565b610ea96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90614650565b60405180910390fd5b670de0b6b3a76400006103e86001610f4e610d87565b610f58919061469f565b610f629190614710565b610f6c9190614710565b811015610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906147b3565b60405180910390fd5b670de0b6b3a764000081610fc2919061469f565b60078190555050565b60145481565b610fd96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614650565b60405180910390fd5b8560118190555084601281905550836015819055508260168190555081601381905550806014819055506012546011546110a291906147d3565b601081905550600a60105411156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614853565b60405180910390fd5b505050505050565b600061110384848461288b565b6111c48461110f6126ba565b6111bf8560405180606001604052806028815260200161565460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111756126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b600190509392505050565b60165481565b60006012905090565b60006112876111eb6126ba565b8461128285600160006111fc6126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6126c2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b6113196126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90614650565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113c691906147d3565b600d81905550600a600d541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614853565b60405180910390fd5b5050565b60105481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d76126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614650565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116f56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614650565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117fb6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190614650565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546118b6906145d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e2906145d3565b801561192f5780601f106119045761010080835404028352916020019161192f565b820191906000526020600020905b81548152906001019060200180831161191257829003601f168201915b5050505050905090565b6119416126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790614650565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906148e5565b60405180910390fd5b611a68828261357c565b5050565b611a746126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614650565b60405180910390fd5b611b23611b0e6117c3565b611b166117c3565b611b1e610d87565b6126c2565b60005b84849050811015611bae57611b9a33868684818110611b4857611b47614905565b5b9050602002016020810190611b5d9190614110565b611b656111d5565b600a611b719190614a67565b868686818110611b8457611b83614905565b5b90506020020135611b95919061469f565b6110f6565b508080611ba690614ab2565b915050611b26565b5050505050565b611bbd6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614650565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611d2c611c766126ba565b84611d278560405180606001604052806025815260200161567c6025913960016000611ca06126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611d5d611d566126ba565b848461288b565b6001905092915050565b611d6f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614650565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611ef96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614650565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202591906140f5565b60405180910390a25050565b6120396126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614650565b60405180910390fd5b670de0b6b3a76400006103e860056120de610d87565b6120e8919061469f565b6120f29190614710565b6120fc9190614710565b81101561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b6c565b60405180910390fd5b670de0b6b3a764000081612152919061469f565b60098190555050565b60075481565b600061216b6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614650565b60405180910390fd5b620186a06001612208610d87565b612212919061469f565b61221c9190614710565b82101561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614bfe565b60405180910390fd5b6103e8600561226b610d87565b612275919061469f565b61227f9190614710565b8211156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c90565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600f5481565b6123726126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614650565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612441929190614cb0565b6020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124849190614cee565b50505050565b6124926126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614d8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461266b91906147d3565b9050838110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614df9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f1d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287e91906141c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296090615041565b60405180910390fd5b600081036129825761297d8383600061361d565b613513565b61298a6117c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129f857506129c86117c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a315750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a845750600560149054906101000a900460ff16155b15612e6757600a60009054906101000a900460ff16612b7e57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3e5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b74906150ad565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c215750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600754811115612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061513f565b60405180910390fd5b600954612c778361142f565b82612c8291906147d3565b1115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906151ab565b60405180910390fd5b612e66565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d6b5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600754811115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061523d565b60405180910390fd5b612e65565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e178361142f565b82612e2291906147d3565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906151ab565b60405180910390fd5b5b5b5b5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612ed45750600a60029054906101000a900460ff165b15612fd6576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f7657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7391906147d3565b10155b15612fa857601554601281905550601654601181905550601254601154612f9d91906147d3565b601081905550612fd1565b601454601281905550601354601181905550601254601154612fca91906147d3565b6010819055505b6130a0565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130625742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff1661309f5760145460128190555060135460118190555060125460115461309891906147d3565b6010819055505b5b60006130ab3061142f565b9050600060085482101590508080156130d05750600a60019054906101000a900460ff165b80156130e95750600560149054906101000a900460ff16155b801561313f5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131955750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131eb5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322f576001600560146101000a81548160ff0219169083151502179055506132136138b0565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ef57600090505b6000811561350257601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335257506000601054115b156133ec5761337f606461337160105489613abd90919063ffffffff16565b613b3790919063ffffffff16565b905060105460125482613392919061469f565b61339c9190614710565b601860008282546133ad91906147d3565b92505081905550601054601154826133c5919061469f565b6133cf9190614710565b601760008282546133e091906147d3565b925050819055506134de565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344757506000600d54115b156134dd576134746064613466600d5489613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600d54600f5482613487919061469f565b6134919190614710565b601860008282546134a291906147d3565b92505081905550600d54600e54826134ba919061469f565b6134c49190614710565b601760008282546134d591906147d3565b925050819055505b5b60008111156134f3576134f288308361361d565b5b80866134ff919061525d565b95505b61350d88888861361d565b50505050505b505050565b6000838311158290613560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135579190613fda565b60405180910390fd5b506000838561356f919061525d565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361368c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368390614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290615041565b60405180910390fd5b613706838383613b81565b6137718160405180606001604052806026815260200161562e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613804816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a391906141c6565b60405180910390a3505050565b60006138bb3061142f565b905060006017546018546138cf91906147d3565b90506000808314806138e15750600082145b156138ee57505050613abb565b60146008546138fd919061469f565b831115613916576014600854613913919061469f565b92505b600060028360185486613929919061469f565b6139339190614710565b61393d9190614710565b905060006139548286613b8690919063ffffffff16565b9050600047905061396482613bd0565b60006139798247613b8690919063ffffffff16565b905060006139a48761399660175485613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600081836139b4919061525d565b9050600060188190555060006017819055506000861180156139d65750600081115b15613a23576139e58682613e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613a1a93929190615291565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a69906152f9565b60006040518083038185875af1925050503d8060008114613aa6576040519150601f19603f3d011682016040523d82523d6000602084013e613aab565b606091505b5050809750505050505050505050505b565b6000808303613acf5760009050613b31565b60008284613add919061469f565b9050828482613aec9190614710565b14613b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2390615380565b60405180910390fd5b809150505b92915050565b6000613b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee7565b905092915050565b505050565b6000613bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613518565b905092915050565b6000600267ffffffffffffffff811115613bed57613bec6153a0565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c32614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc91906153e4565b81600181518110613d1057613d0f614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000000000000000000000000000000000000000000000846126c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd795949392919061550a565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000000000000000000000000000000000000000000000846126c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e9d96959493929190615564565b60606040518083038185885af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee091906155da565b5050505050565b60008083118290613f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f259190613fda565b60405180910390fd5b5060008385613f3d9190614710565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f84578082015181840152602081019050613f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fac82613f4a565b613fb68185613f55565b9350613fc6818560208601613f66565b613fcf81613f90565b840191505092915050565b60006020820190508181036000830152613ff48184613fa1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403182614006565b9050919050565b61404181614026565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000819050919050565b61407781614064565b811461408257600080fd5b50565b6000813590506140948161406e565b92915050565b600080604083850312156140b1576140b0613ffc565b5b60006140bf8582860161404f565b92505060206140d085828601614085565b9150509250929050565b60008115159050919050565b6140ef816140da565b82525050565b600060208201905061410a60008301846140e6565b92915050565b60006020828403121561412657614125613ffc565b5b60006141348482850161404f565b91505092915050565b6000819050919050565b600061416261415d61415884614006565b61413d565b614006565b9050919050565b600061417482614147565b9050919050565b600061418682614169565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c081614064565b82525050565b60006020820190506141db60008301846141b7565b92915050565b6000602082840312156141f7576141f6613ffc565b5b600061420584828501614085565b91505092915050565b60008060008060008060c0878903121561422b5761422a613ffc565b5b600061423989828a01614085565b965050602061424a89828a01614085565b955050604061425b89828a01614085565b945050606061426c89828a01614085565b935050608061427d89828a01614085565b92505060a061428e89828a01614085565b9150509295509295509295565b6000806000606084860312156142b4576142b3613ffc565b5b60006142c28682870161404f565b93505060206142d38682870161404f565b92505060406142e486828701614085565b9150509250925092565b600060ff82169050919050565b614304816142ee565b82525050565b600060208201905061431f60008301846142fb565b92915050565b61432e81614026565b82525050565b60006020820190506143496000830184614325565b92915050565b6000806040838503121561436657614365613ffc565b5b600061437485828601614085565b925050602061438585828601614085565b9150509250929050565b614398816140da565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b600080604083850312156143d2576143d1613ffc565b5b60006143e08582860161404f565b92505060206143f1858286016143a6565b9150509250929050565b60006020828403121561441157614410613ffc565b5b600061441f848285016143a6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261444d5761444c614428565b5b8235905067ffffffffffffffff81111561446a5761446961442d565b5b60208301915083602082028301111561448657614485614432565b5b9250929050565b60008083601f8401126144a3576144a2614428565b5b8235905067ffffffffffffffff8111156144c0576144bf61442d565b5b6020830191508360208202830111156144dc576144db614432565b5b9250929050565b600080600080604085870312156144fd576144fc613ffc565b5b600085013567ffffffffffffffff81111561451b5761451a614001565b5b61452787828801614437565b9450945050602085013567ffffffffffffffff81111561454a57614549614001565b5b6145568782880161448d565b925092505092959194509250565b6000806040838503121561457b5761457a613ffc565b5b60006145898582860161404f565b925050602061459a8582860161404f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145eb57607f821691505b6020821081036145fe576145fd6145a4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463a602083613f55565b915061464582614604565b602082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146aa82614064565b91506146b583614064565b92508282026146c381614064565b915082820484148315176146da576146d9614670565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471b82614064565b915061472683614064565b925082614736576147356146e1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061479d602f83613f55565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b60006147de82614064565b91506147e983614064565b925082820190508082111561480157614800614670565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061483d601d83613f55565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cf603983613f55565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561498b5780860481111561496757614966614670565b5b60018516156149765780820291505b808102905061498485614934565b945061494b565b94509492505050565b6000826149a45760019050614a60565b816149b25760009050614a60565b81600181146149c857600281146149d257614a01565b6001915050614a60565b60ff8411156149e4576149e3614670565b5b8360020a9150848211156149fb576149fa614670565b5b50614a60565b5060208310610133831016604e8410600b8410161715614a365782820a905083811115614a3157614a30614670565b5b614a60565b614a438484846001614941565b92509050818404811115614a5a57614a59614670565b5b81810290505b9392505050565b6000614a7282614064565b9150614a7d836142ee565b9250614aaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614994565b905092915050565b6000614abd82614064565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614aef57614aee614670565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b56602483613f55565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be8603583613f55565b9150614bf382614b8c565b604082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c7a603483613f55565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000604082019050614cc56000830185614325565b614cd260208301846141b7565b9392505050565b600081519050614ce88161438f565b92915050565b600060208284031215614d0457614d03613ffc565b5b6000614d1284828501614cd9565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d77602683613f55565b9150614d8282614d1b565b604082019050919050565b60006020820190508181036000830152614da681614d6a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614de3601b83613f55565b9150614dee82614dad565b602082019050919050565b60006020820190508181036000830152614e1281614dd6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e75602483613f55565b9150614e8082614e19565b604082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602283613f55565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f99602583613f55565b9150614fa482614f3d565b604082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061502b602383613f55565b915061503682614fcf565b604082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615097601683613f55565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615129603583613f55565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615195601383613f55565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615227603683613f55565b9150615232826151cb565b604082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b600061526882614064565b915061527383614064565b925082820390508181111561528b5761528a614670565b5b92915050565b60006060820190506152a660008301866141b7565b6152b360208301856141b7565b6152c060408301846141b7565b949350505050565b600081905092915050565b50565b60006152e36000836152c8565b91506152ee826152d3565b600082019050919050565b6000615304826152d6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061536a602183613f55565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153de81614038565b92915050565b6000602082840312156153fa576153f9613ffc565b5b6000615408848285016153cf565b91505092915050565b6000819050919050565b600061543661543161542c84615411565b61413d565b614064565b9050919050565b6154468161541b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548181614026565b82525050565b60006154938383615478565b60208301905092915050565b6000602082019050919050565b60006154b78261544c565b6154c18185615457565b93506154cc83615468565b8060005b838110156154fd5781516154e48882615487565b97506154ef8361549f565b9250506001810190506154d0565b5085935050505092915050565b600060a08201905061551f60008301886141b7565b61552c602083018761543d565b818103604083015261553e81866154ac565b905061554d6060830185614325565b61555a60808301846141b7565b9695505050505050565b600060c0820190506155796000830189614325565b61558660208301886141b7565b615593604083018761543d565b6155a0606083018661543d565b6155ad6080830185614325565b6155ba60a08301846141b7565b979650505050505050565b6000815190506155d48161406e565b92915050565b6000806000606084860312156155f3576155f2613ffc565b5b6000615601868287016155c5565b9350506020615612868287016155c5565b9250506040615623868287016155c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca703f160e5b209c54b72900789e72d98277709e4dd5e54e2286be641f38eba864736f6c63430008110033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80637bce5a04116101ab578063b62496f5116100f7578063dd62ed3e11610095578063f2a95aa91161006f578063f2a95aa914610beb578063f2fde38b14610c14578063f637434214610c3d578063f8b45b0514610c6857610325565b8063dd62ed3e14610b58578063e2f4560514610b95578063f11a24d314610bc057610325565b8063c18bc195116100d1578063c18bc19514610a9c578063c8c8ebe414610ac5578063d257b34f14610af0578063d85ba06314610b2d57610325565b8063b62496f514610a0b578063bbc0c74214610a48578063c024666814610a7357610325565b80639a7a23d611610164578063a457c2d71161013e578063a457c2d71461093d578063a4d15b641461097a578063a9059cbb146109a5578063aacebbe3146109e257610325565b80639a7a23d6146108c25780639c63e6b9146108eb578063a26577781461091457610325565b80637bce5a04146107d65780638a8c523c146108015780638da5cb5b146108185780639213691314610843578063924de9b71461086e57806395d89b411461089757610325565b80632bf3d42d1161026a57806366ca9b831161022357806370a08231116101fd57806370a082311461072e578063715018a61461076b5780637571336a1461078257806375f0a874146107ab57610325565b806366ca9b83146106af5780636a486a8e146106d85780636ddd17131461070357610325565b80632bf3d42d14610589578063313ce567146105b457806339509351146105df57806349bd5a5e1461061c5780634fbee19314610647578063541a43cf1461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cf578063208cce0c146104f857806322d3e2aa1461052357806323b872dd1461054c57610325565b80631a8145bb146104505780631da1db5e1461047b5780631f3fed8f146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa578063194b2b541461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c93565b60405161034c9190613fda565b60405180910390f35b34801561036157600080fd5b5061037c6004803603810190610377919061409a565b610d25565b60405161038991906140f5565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190614110565b610d43565b6040516103c691906140f5565b60405180910390f35b3480156103db57600080fd5b506103e4610d63565b6040516103f1919061419c565b60405180910390f35b34801561040657600080fd5b5061040f610d87565b60405161041c91906141c6565b60405180910390f35b34801561043157600080fd5b5061043a610d91565b60405161044791906141c6565b60405180910390f35b34801561045c57600080fd5b50610465610d97565b60405161047291906141c6565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141e1565b610d9d565b005b3480156104b057600080fd5b506104b9610e9b565b6040516104c691906141c6565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f191906141e1565b610ea1565b005b34801561050457600080fd5b5061050d610fcb565b60405161051a91906141c6565b60405180910390f35b34801561052f57600080fd5b5061054a6004803603810190610545919061420e565b610fd1565b005b34801561055857600080fd5b50610573600480360381019061056e919061429b565b6110f6565b60405161058091906140f5565b60405180910390f35b34801561059557600080fd5b5061059e6111cf565b6040516105ab91906141c6565b60405180910390f35b3480156105c057600080fd5b506105c96111d5565b6040516105d6919061430a565b60405180910390f35b3480156105eb57600080fd5b506106066004803603810190610601919061409a565b6111de565b60405161061391906140f5565b60405180910390f35b34801561062857600080fd5b50610631611291565b60405161063e9190614334565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190614110565b6112b5565b60405161067b91906140f5565b60405180910390f35b34801561069057600080fd5b5061069961130b565b6040516106a691906141c6565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d1919061434f565b611311565b005b3480156106e457600080fd5b506106ed611416565b6040516106fa91906141c6565b60405180910390f35b34801561070f57600080fd5b5061071861141c565b60405161072591906140f5565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190614110565b61142f565b60405161076291906141c6565b60405180910390f35b34801561077757600080fd5b50610780611477565b005b34801561078e57600080fd5b506107a960048036038101906107a491906143bb565b6115cf565b005b3480156107b757600080fd5b506107c06116c1565b6040516107cd9190614334565b60405180910390f35b3480156107e257600080fd5b506107eb6116e7565b6040516107f891906141c6565b60405180910390f35b34801561080d57600080fd5b506108166116ed565b005b34801561082457600080fd5b5061082d6117c3565b60405161083a9190614334565b60405180910390f35b34801561084f57600080fd5b506108586117ed565b60405161086591906141c6565b60405180910390f35b34801561087a57600080fd5b50610895600480360381019061089091906143fb565b6117f3565b005b3480156108a357600080fd5b506108ac6118a7565b6040516108b99190613fda565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e491906143bb565b611939565b005b3480156108f757600080fd5b50610912600480360381019061090d91906144e3565b611a6c565b005b34801561092057600080fd5b5061093b600480360381019061093691906143fb565b611bb5565b005b34801561094957600080fd5b50610964600480360381019061095f919061409a565b611c69565b60405161097191906140f5565b60405180910390f35b34801561098657600080fd5b5061098f611d36565b60405161099c91906140f5565b60405180910390f35b3480156109b157600080fd5b506109cc60048036038101906109c7919061409a565b611d49565b6040516109d991906140f5565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190614110565b611d67565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190614110565b611ebe565b604051610a3f91906140f5565b60405180910390f35b348015610a5457600080fd5b50610a5d611ede565b604051610a6a91906140f5565b60405180910390f35b348015610a7f57600080fd5b50610a9a6004803603810190610a9591906143bb565b611ef1565b005b348015610aa857600080fd5b50610ac36004803603810190610abe91906141e1565b612031565b005b348015610ad157600080fd5b50610ada61215b565b604051610ae791906141c6565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906141e1565b612161565b604051610b2491906140f5565b60405180910390f35b348015610b3957600080fd5b50610b426122d1565b604051610b4f91906141c6565b60405180910390f35b348015610b6457600080fd5b50610b7f6004803603810190610b7a9190614564565b6122d7565b604051610b8c91906141c6565b60405180910390f35b348015610ba157600080fd5b50610baa61235e565b604051610bb791906141c6565b60405180910390f35b348015610bcc57600080fd5b50610bd5612364565b604051610be291906141c6565b60405180910390f35b348015610bf757600080fd5b50610c126004803603810190610c0d919061409a565b61236a565b005b348015610c2057600080fd5b50610c3b6004803603810190610c369190614110565b61248a565b005b348015610c4957600080fd5b50610c52612650565b604051610c5f91906141c6565b60405180910390f35b348015610c7457600080fd5b50610c7d612656565b604051610c8a91906141c6565b60405180910390f35b606060038054610ca2906145d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cce906145d3565b8015610d1b5780601f10610cf057610100808354040283529160200191610d1b565b820191906000526020600020905b815481529060010190602001808311610cfe57829003601f168201915b5050505050905090565b6000610d39610d326126ba565b84846126c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60135481565b60185481565b610da56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2b90614650565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc60648484610e61919061469f565b610e6b9190614710565b9081150290604051600060405180830381858888f19350505050158015610e96573d6000803e3d6000fd5b505050565b60175481565b610ea96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f90614650565b60405180910390fd5b670de0b6b3a76400006103e86001610f4e610d87565b610f58919061469f565b610f629190614710565b610f6c9190614710565b811015610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa5906147b3565b60405180910390fd5b670de0b6b3a764000081610fc2919061469f565b60078190555050565b60145481565b610fd96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90614650565b60405180910390fd5b8560118190555084601281905550836015819055508260168190555081601381905550806014819055506012546011546110a291906147d3565b601081905550600a60105411156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590614853565b60405180910390fd5b505050505050565b600061110384848461288b565b6111c48461110f6126ba565b6111bf8560405180606001604052806028815260200161565460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111756126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b600190509392505050565b60165481565b60006012905090565b60006112876111eb6126ba565b8461128285600160006111fc6126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6126c2565b6001905092915050565b7f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d81565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b6113196126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139f90614650565b60405180910390fd5b81600e8190555080600f81905550600f54600e546113c691906147d3565b600d81905550600a600d541115611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990614853565b60405180910390fd5b5050565b60105481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115d76126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90614650565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6116f56126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90614650565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117fb6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190614650565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b6060600480546118b6906145d3565b80601f01602080910402602001604051908101604052809291908181526020018280546118e2906145d3565b801561192f5780601f106119045761010080835404028352916020019161192f565b820191906000526020600020905b81548152906001019060200180831161191257829003601f168201915b5050505050905090565b6119416126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c790614650565b60405180910390fd5b7f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a55906148e5565b60405180910390fd5b611a68828261357c565b5050565b611a746126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90614650565b60405180910390fd5b611b23611b0e6117c3565b611b166117c3565b611b1e610d87565b6126c2565b60005b84849050811015611bae57611b9a33868684818110611b4857611b47614905565b5b9050602002016020810190611b5d9190614110565b611b656111d5565b600a611b719190614a67565b868686818110611b8457611b83614905565b5b90506020020135611b95919061469f565b6110f6565b508080611ba690614ab2565b915050611b26565b5050505050565b611bbd6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4390614650565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b6000611d2c611c766126ba565b84611d278560405180606001604052806025815260200161567c6025913960016000611ca06126ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6126c2565b6001905092915050565b600a60029054906101000a900460ff1681565b6000611d5d611d566126ba565b848461288b565b6001905092915050565b611d6f6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614650565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611ef96126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90614650565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161202591906140f5565b60405180910390a25050565b6120396126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90614650565b60405180910390fd5b670de0b6b3a76400006103e860056120de610d87565b6120e8919061469f565b6120f29190614710565b6120fc9190614710565b81101561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590614b6c565b60405180910390fd5b670de0b6b3a764000081612152919061469f565b60098190555050565b60075481565b600061216b6126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190614650565b60405180910390fd5b620186a06001612208610d87565b612212919061469f565b61221c9190614710565b82101561225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614bfe565b60405180910390fd5b6103e8600561226b610d87565b612275919061469f565b61227f9190614710565b8211156122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b890614c90565b60405180910390fd5b8160088190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600f5481565b6123726126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890614650565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401612441929190614cb0565b6020604051808303816000875af1158015612460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124849190614cee565b50505050565b6124926126ba565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614650565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258790614d8d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60095481565b600080828461266b91906147d3565b9050838110156126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614df9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614e8b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614f1d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161287e91906141c6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f190614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296090615041565b60405180910390fd5b600081036129825761297d8383600061361d565b613513565b61298a6117c3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129f857506129c86117c3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a315750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a6b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a845750600560149054906101000a900460ff16155b15612e6757600a60009054906101000a900460ff16612b7e57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b3e5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b74906150ad565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c215750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cc857600754811115612c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c629061513f565b60405180910390fd5b600954612c778361142f565b82612c8291906147d3565b1115612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906151ab565b60405180910390fd5b612e66565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d6b5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dba57600754811115612db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dac9061523d565b60405180910390fd5b612e65565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e6457600954612e178361142f565b82612e2291906147d3565b1115612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a906151ab565b60405180910390fd5b5b5b5b5b60007f0000000000000000000000008e89828445edd48ae778d712d9999d2469c9703d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905080158015612ed45750600a60029054906101000a900460ff165b15612fd6576000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015612f7657504262015180600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7391906147d3565b10155b15612fa857601554601281905550601654601181905550601254601154612f9d91906147d3565b601081905550612fd1565b601454601281905550601354601181905550601254601154612fca91906147d3565b6010819055505b6130a0565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036130625742600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60029054906101000a900460ff1661309f5760145460128190555060135460118190555060125460115461309891906147d3565b6010819055505b5b60006130ab3061142f565b9050600060085482101590508080156130d05750600a60019054906101000a900460ff165b80156130e95750600560149054906101000a900460ff16155b801561313f5750601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131955750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131eb5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322f576001600560146101000a81548160ff0219169083151502179055506132136138b0565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132e55750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132ef57600090505b6000811561350257601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561335257506000601054115b156133ec5761337f606461337160105489613abd90919063ffffffff16565b613b3790919063ffffffff16565b905060105460125482613392919061469f565b61339c9190614710565b601860008282546133ad91906147d3565b92505081905550601054601154826133c5919061469f565b6133cf9190614710565b601760008282546133e091906147d3565b925050819055506134de565b601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561344757506000600d54115b156134dd576134746064613466600d5489613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600d54600f5482613487919061469f565b6134919190614710565b601860008282546134a291906147d3565b92505081905550600d54600e54826134ba919061469f565b6134c49190614710565b601760008282546134d591906147d3565b925050819055505b5b60008111156134f3576134f288308361361d565b5b80866134ff919061525d565b95505b61350d88888861361d565b50505050505b505050565b6000838311158290613560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135579190613fda565b60405180910390fd5b506000838561356f919061525d565b9050809150509392505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361368c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368390614faf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f290615041565b60405180910390fd5b613706838383613b81565b6137718160405180606001604052806026815260200161562e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135189092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613804816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138a391906141c6565b60405180910390a3505050565b60006138bb3061142f565b905060006017546018546138cf91906147d3565b90506000808314806138e15750600082145b156138ee57505050613abb565b60146008546138fd919061469f565b831115613916576014600854613913919061469f565b92505b600060028360185486613929919061469f565b6139339190614710565b61393d9190614710565b905060006139548286613b8690919063ffffffff16565b9050600047905061396482613bd0565b60006139798247613b8690919063ffffffff16565b905060006139a48761399660175485613abd90919063ffffffff16565b613b3790919063ffffffff16565b9050600081836139b4919061525d565b9050600060188190555060006017819055506000861180156139d65750600081115b15613a23576139e58682613e0d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601854604051613a1a93929190615291565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a69906152f9565b60006040518083038185875af1925050503d8060008114613aa6576040519150601f19603f3d011682016040523d82523d6000602084013e613aab565b606091505b5050809750505050505050505050505b565b6000808303613acf5760009050613b31565b60008284613add919061469f565b9050828482613aec9190614710565b14613b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2390615380565b60405180910390fd5b809150505b92915050565b6000613b7983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ee7565b905092915050565b505050565b6000613bc883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613518565b905092915050565b6000600267ffffffffffffffff811115613bed57613bec6153a0565b5b604051908082528060200260200182016040528015613c1b5781602001602082028036833780820191505090505b5090503081600081518110613c3357613c32614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cfc91906153e4565b81600181518110613d1057613d0f614905565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d75307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dd795949392919061550a565b600060405180830381600087803b158015613df157600080fd5b505af1158015613e05573d6000803e3d6000fd5b505050505050565b613e38307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e9d96959493929190615564565b60606040518083038185885af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee091906155da565b5050505050565b60008083118290613f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f259190613fda565b60405180910390fd5b5060008385613f3d9190614710565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f84578082015181840152602081019050613f69565b60008484015250505050565b6000601f19601f8301169050919050565b6000613fac82613f4a565b613fb68185613f55565b9350613fc6818560208601613f66565b613fcf81613f90565b840191505092915050565b60006020820190508181036000830152613ff48184613fa1565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061403182614006565b9050919050565b61404181614026565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000819050919050565b61407781614064565b811461408257600080fd5b50565b6000813590506140948161406e565b92915050565b600080604083850312156140b1576140b0613ffc565b5b60006140bf8582860161404f565b92505060206140d085828601614085565b9150509250929050565b60008115159050919050565b6140ef816140da565b82525050565b600060208201905061410a60008301846140e6565b92915050565b60006020828403121561412657614125613ffc565b5b60006141348482850161404f565b91505092915050565b6000819050919050565b600061416261415d61415884614006565b61413d565b614006565b9050919050565b600061417482614147565b9050919050565b600061418682614169565b9050919050565b6141968161417b565b82525050565b60006020820190506141b1600083018461418d565b92915050565b6141c081614064565b82525050565b60006020820190506141db60008301846141b7565b92915050565b6000602082840312156141f7576141f6613ffc565b5b600061420584828501614085565b91505092915050565b60008060008060008060c0878903121561422b5761422a613ffc565b5b600061423989828a01614085565b965050602061424a89828a01614085565b955050604061425b89828a01614085565b945050606061426c89828a01614085565b935050608061427d89828a01614085565b92505060a061428e89828a01614085565b9150509295509295509295565b6000806000606084860312156142b4576142b3613ffc565b5b60006142c28682870161404f565b93505060206142d38682870161404f565b92505060406142e486828701614085565b9150509250925092565b600060ff82169050919050565b614304816142ee565b82525050565b600060208201905061431f60008301846142fb565b92915050565b61432e81614026565b82525050565b60006020820190506143496000830184614325565b92915050565b6000806040838503121561436657614365613ffc565b5b600061437485828601614085565b925050602061438585828601614085565b9150509250929050565b614398816140da565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b600080604083850312156143d2576143d1613ffc565b5b60006143e08582860161404f565b92505060206143f1858286016143a6565b9150509250929050565b60006020828403121561441157614410613ffc565b5b600061441f848285016143a6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261444d5761444c614428565b5b8235905067ffffffffffffffff81111561446a5761446961442d565b5b60208301915083602082028301111561448657614485614432565b5b9250929050565b60008083601f8401126144a3576144a2614428565b5b8235905067ffffffffffffffff8111156144c0576144bf61442d565b5b6020830191508360208202830111156144dc576144db614432565b5b9250929050565b600080600080604085870312156144fd576144fc613ffc565b5b600085013567ffffffffffffffff81111561451b5761451a614001565b5b61452787828801614437565b9450945050602085013567ffffffffffffffff81111561454a57614549614001565b5b6145568782880161448d565b925092505092959194509250565b6000806040838503121561457b5761457a613ffc565b5b60006145898582860161404f565b925050602061459a8582860161404f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145eb57607f821691505b6020821081036145fe576145fd6145a4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061463a602083613f55565b915061464582614604565b602082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146aa82614064565b91506146b583614064565b92508282026146c381614064565b915082820484148315176146da576146d9614670565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061471b82614064565b915061472683614064565b925082614736576147356146e1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061479d602f83613f55565b91506147a882614741565b604082019050919050565b600060208201905081810360008301526147cc81614790565b9050919050565b60006147de82614064565b91506147e983614064565b925082820190508082111561480157614800614670565b5b92915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b600061483d601d83613f55565b915061484882614807565b602082019050919050565b6000602082019050818103600083015261486c81614830565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148cf603983613f55565b91506148da82614873565b604082019050919050565b600060208201905081810360008301526148fe816148c2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561498b5780860481111561496757614966614670565b5b60018516156149765780820291505b808102905061498485614934565b945061494b565b94509492505050565b6000826149a45760019050614a60565b816149b25760009050614a60565b81600181146149c857600281146149d257614a01565b6001915050614a60565b60ff8411156149e4576149e3614670565b5b8360020a9150848211156149fb576149fa614670565b5b50614a60565b5060208310610133831016604e8410600b8410161715614a365782820a905083811115614a3157614a30614670565b5b614a60565b614a438484846001614941565b92509050818404811115614a5a57614a59614670565b5b81810290505b9392505050565b6000614a7282614064565b9150614a7d836142ee565b9250614aaa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614994565b905092915050565b6000614abd82614064565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614aef57614aee614670565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b56602483613f55565b9150614b6182614afa565b604082019050919050565b60006020820190508181036000830152614b8581614b49565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be8603583613f55565b9150614bf382614b8c565b604082019050919050565b60006020820190508181036000830152614c1781614bdb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c7a603483613f55565b9150614c8582614c1e565b604082019050919050565b60006020820190508181036000830152614ca981614c6d565b9050919050565b6000604082019050614cc56000830185614325565b614cd260208301846141b7565b9392505050565b600081519050614ce88161438f565b92915050565b600060208284031215614d0457614d03613ffc565b5b6000614d1284828501614cd9565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d77602683613f55565b9150614d8282614d1b565b604082019050919050565b60006020820190508181036000830152614da681614d6a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614de3601b83613f55565b9150614dee82614dad565b602082019050919050565b60006020820190508181036000830152614e1281614dd6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614e75602483613f55565b9150614e8082614e19565b604082019050919050565b60006020820190508181036000830152614ea481614e68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f07602283613f55565b9150614f1282614eab565b604082019050919050565b60006020820190508181036000830152614f3681614efa565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f99602583613f55565b9150614fa482614f3d565b604082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061502b602383613f55565b915061503682614fcf565b604082019050919050565b6000602082019050818103600083015261505a8161501e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615097601683613f55565b91506150a282615061565b602082019050919050565b600060208201905081810360008301526150c68161508a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615129603583613f55565b9150615134826150cd565b604082019050919050565b600060208201905081810360008301526151588161511c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615195601383613f55565b91506151a08261515f565b602082019050919050565b600060208201905081810360008301526151c481615188565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615227603683613f55565b9150615232826151cb565b604082019050919050565b600060208201905081810360008301526152568161521a565b9050919050565b600061526882614064565b915061527383614064565b925082820390508181111561528b5761528a614670565b5b92915050565b60006060820190506152a660008301866141b7565b6152b360208301856141b7565b6152c060408301846141b7565b949350505050565b600081905092915050565b50565b60006152e36000836152c8565b91506152ee826152d3565b600082019050919050565b6000615304826152d6565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061536a602183613f55565b91506153758261530e565b604082019050919050565b600060208201905081810360008301526153998161535d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506153de81614038565b92915050565b6000602082840312156153fa576153f9613ffc565b5b6000615408848285016153cf565b91505092915050565b6000819050919050565b600061543661543161542c84615411565b61413d565b614064565b9050919050565b6154468161541b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548181614026565b82525050565b60006154938383615478565b60208301905092915050565b6000602082019050919050565b60006154b78261544c565b6154c18185615457565b93506154cc83615468565b8060005b838110156154fd5781516154e48882615487565b97506154ef8361549f565b9250506001810190506154d0565b5085935050505092915050565b600060a08201905061551f60008301886141b7565b61552c602083018761543d565b818103604083015261553e81866154ac565b905061554d6060830185614325565b61555a60808301846141b7565b9695505050505050565b600060c0820190506155796000830189614325565b61558660208301886141b7565b615593604083018761543d565b6155a0606083018661543d565b6155ad6080830185614325565b6155ba60a08301846141b7565b979650505050505050565b6000815190506155d48161406e565b92915050565b6000806000606084860312156155f3576155f2613ffc565b5b6000615601868287016155c5565b9350506020615612868287016155c5565b9250506040615623868287016155c5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ca703f160e5b209c54b72900789e72d98277709e4dd5e54e2286be641f38eba864736f6c63430008110033

Deployed Bytecode Sourcemap

30602:16226:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10874:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32068:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30681:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9823:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31600:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31816:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38941:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31776:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36257:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31642:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37394:676;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11526:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31730:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9664:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12291:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30739:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39367:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31687:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31489:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31019:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9995:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23202:148;;;;;;;;;;;;;:::i;:::-;;36724:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30818:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31412;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35530:148;;;;;;;;;;;;;:::i;:::-;;22558:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31524:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36965:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38271:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46496:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35688:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13013:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31056:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10336:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38723:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32291:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30979:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38079:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36500:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30859:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35862:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31378:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10575:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30901:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31449:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39158:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23506:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31562:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30941:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8700:100;8754:13;8787:5;8780:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8700:100;:::o;10874:169::-;10957:4;10974:39;10983:12;:10;:12::i;:::-;10997:7;11006:6;10974:8;:39::i;:::-;11031:4;11024:11;;10874:169;;;;:::o;32068:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;30681:51::-;;;:::o;9823:108::-;9884:7;9911:12;;9904:19;;9823:108;:::o;31600:35::-;;;;:::o;31816:33::-;;;;:::o;38941:209::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39024:17:::1;39044:21;39024:41;;39084:10;39076:28;;:66;39138:3;39118:16;39106:9;:28;;;;:::i;:::-;39105:36;;;;:::i;:::-;39076:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39013:137;38941:209:::0;:::o;31776:33::-;;;;:::o;36257:234::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36376:4:::1;36370;36366:1;36350:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36349:31;;;;:::i;:::-;36339:6;:41;;36331:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36476:6;36466;:17;;;;:::i;:::-;36443:20;:40;;;;36257:234:::0;:::o;31642:35::-;;;;:::o;37394:676::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37639:13:::1;37620:16;:32;;;;37682:13;37663:16;:32;;;;37730:22;37706:21;:46;;;;37787:22;37763:21;:46;;;;37843:21;37820:20;:44;;;;37897:21;37875:20;:43;;;;37964:16;;37945;;:35;;;;:::i;:::-;37929:13;:51;;;;38026:2;38009:13;;:19;;38001:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37394:676:::0;;;;;;:::o;11526:355::-;11666:4;11683:36;11693:6;11701:9;11712:6;11683:9;:36::i;:::-;11730:121;11739:6;11747:12;:10;:12::i;:::-;11761:89;11799:6;11761:89;;;;;;;;;;;;;;;;;:11;:19;11773:6;11761:19;;;;;;;;;;;;;;;:33;11781:12;:10;:12::i;:::-;11761:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11730:8;:121::i;:::-;11869:4;11862:11;;11526:355;;;;;:::o;31730:36::-;;;;:::o;9664:93::-;9722:5;9747:2;9740:9;;9664:93;:::o;12291:218::-;12379:4;12396:83;12405:12;:10;:12::i;:::-;12419:7;12428:50;12467:10;12428:11;:25;12440:12;:10;:12::i;:::-;12428:25;;;;;;;;;;;;;;;:34;12454:7;12428:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;12396:8;:83::i;:::-;12497:4;12490:11;;12291:218;;;;:::o;30739:38::-;;;:::o;39367:125::-;39432:4;39456:19;:28;39476:7;39456:28;;;;;;;;;;;;;;;;;;;;;;;;;39449:35;;39367:125;;;:::o;31687:36::-;;;;:::o;37075:310::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37192:13:::1;37174:15;:31;;;;37234:13;37216:15;:31;;;;37291:15;;37273;;:33;;;;:::i;:::-;37258:12;:48;;;;37341:2;37325:12;;:18;;37317:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37075:310:::0;;:::o;31489:28::-;;;;:::o;31019:30::-;;;;;;;;;;;;;:::o;9995:127::-;10069:7;10096:9;:18;10106:7;10096:18;;;;;;;;;;;;;;;;10089:25;;9995:127;;;:::o;23202:148::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23309:1:::1;23272:40;;23293:6;;;;;;;;;;;23272:40;;;;;;;;;;;;23340:1;23323:6;;:19;;;;;;;;;;;;;;;;;;23202:148::o:0;36724:144::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36856:4:::1;36814:31;:39;36846:6;36814:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36724:144:::0;;:::o;30818:30::-;;;;;;;;;;;;;:::o;31412:::-;;;;:::o;35530:148::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35601:4:::1;35585:13;;:20;;;;;;;;;;;;;;;;;;35630:4;35616:11;;:18;;;;;;;;;;;;;;;;;;35658:12;35645:10;:25;;;;35530:148::o:0;22558:79::-;22596:7;22623:6;;;;;;;;;;;22616:13;;22558:79;:::o;31524:31::-;;;;:::o;36965:101::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37051:7:::1;37037:11;;:21;;;;;;;;;;;;;;;;;;36965:101:::0;:::o;8920:104::-;8976:13;9009:7;9002:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8920:104;:::o;38271:245::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38378:13:::1;38370:21;;:4;:21;;::::0;38362:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38467:41;38496:4;38502:5;38467:28;:41::i;:::-;38271:245:::0;;:::o;46496:329::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46622:41:::1;46631:7;:5;:7::i;:::-;46640;:5;:7::i;:::-;46649:13;:11;:13::i;:::-;46622:8;:41::i;:::-;46679:9;46674:144;46698:10;;:17;;46694:1;:21;46674:144;;;46737:69;46750:10;46762;;46773:1;46762:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46795:10;:8;:10::i;:::-;46789:2;:16;;;;:::i;:::-;46777:6;;46784:1;46777:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;46737:12;:69::i;:::-;;46717:3;;;;;:::i;:::-;;;;46674:144;;;;46496:329:::0;;;;:::o;35688:102::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35777:5:::1;35756:18;;:26;;;;;;;;;;;;;;;;;;35688:102:::0;:::o;13013:269::-;13106:4;13123:129;13132:12;:10;:12::i;:::-;13146:7;13155:96;13194:15;13155:96;;;;;;;;;;;;;;;;;:11;:25;13167:12;:10;:12::i;:::-;13155:25;;;;;;;;;;;;;;;:34;13181:7;13155:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;13123:8;:129::i;:::-;13270:4;13263:11;;13013:269;;;;:::o;31056:37::-;;;;;;;;;;;;;:::o;10336:175::-;10422:4;10439:42;10449:12;:10;:12::i;:::-;10463:9;10474:6;10439:9;:42::i;:::-;10499:4;10492:11;;10336:175;;;;:::o;38723:208::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38860:15:::1;;;;;;;;;;;38817:59;;38840:18;38817:59;;;;;;;;;;;;38905:18;38887:15;;:36;;;;;;;;;;;;;;;;;;38723:208:::0;:::o;32291:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30979:33::-;;;;;;;;;;;;;:::o;38079:182::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38195:8:::1;38164:19;:28;38184:7;38164:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38235:7;38219:34;;;38244:8;38219:34;;;;;;:::i;:::-;;;;;;;;38079:182:::0;;:::o;36500:215::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36622:4:::1;36616;36612:1;36596:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36595:31;;;;:::i;:::-;36585:6;:41;;36577:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36700:6;36690;:17;;;;:::i;:::-;36678:9;:29;;;;36500:215:::0;:::o;30859:35::-;;;;:::o;35862:386::-;35943:4;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36000:6:::1;35996:1;35980:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35967:9;:39;;35959:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;36116:4;36112:1;36096:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36083:9;:37;;36075:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36209:9;36188:18;:30;;;;36236:4;36229:11;;35862:386:::0;;;:::o;31378:27::-;;;;:::o;10575:151::-;10664:7;10691:11;:18;10703:5;10691:18;;;;;;;;;;;;;;;:27;10710:7;10691:27;;;;;;;;;;;;;;;;10684:34;;10575:151;;;;:::o;30901:33::-;;;;:::o;31449:30::-;;;;:::o;39158:200::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39252:20:::1;39282:14;39252:45;;39307:13;:22;;;39330:10;39342:7;39307:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39242:116;39158:200:::0;;:::o;23506:244::-;22781:12;:10;:12::i;:::-;22771:22;;:6;;;;;;;;;;;:22;;;22763:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23615:1:::1;23595:22;;:8;:22;;::::0;23587:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23705:8;23676:38;;23697:6;;;;;;;;;;;23676:38;;;;;;;;;;;;23734:8;23725:6;;:17;;;;;;;;;;;;;;;;;;23506:244:::0;:::o;31562:31::-;;;;:::o;30941:24::-;;;;:::o;17590:182::-;17648:7;17668:9;17684:1;17680;:5;;;;:::i;:::-;17668:17;;17709:1;17704;:6;;17696:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17763:1;17756:8;;;17590:182;;;;:::o;1391:98::-;1444:7;1471:10;1464:17;;1391:98;:::o;16209:381::-;16362:1;16345:19;;:5;:19;;;16337:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16443:1;16424:21;;:7;:21;;;16416:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16528:6;16498:11;:18;16510:5;16498:18;;;;;;;;;;;;;;;:27;16517:7;16498:27;;;;;;;;;;;;;;;:36;;;;16566:7;16550:32;;16559:5;16550:32;;;16575:6;16550:32;;;;;;:::i;:::-;;;;;;;;16209:381;;;:::o;39552:4429::-;39700:1;39684:18;;:4;:18;;;39676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39777:1;39763:16;;:2;:16;;;39755:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39844:1;39834:6;:11;39831:92;;39862:28;39878:4;39884:2;39888:1;39862:15;:28::i;:::-;39905:7;;39831:92;39980:7;:5;:7::i;:::-;39972:15;;:4;:15;;;;:49;;;;;40014:7;:5;:7::i;:::-;40008:13;;:2;:13;;;;39972:49;:86;;;;;40056:1;40042:16;;:2;:16;;;;39972:86;:128;;;;;40093:6;40079:21;;:2;:21;;;;39972:128;:158;;;;;40122:8;;;;;;;;;;;40121:9;39972:158;39950:1230;;;40168:13;;;;;;;;;;;40164:148;;40213:19;:25;40233:4;40213:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40242:19;:23;40262:2;40242:23;;;;;;;;;;;;;;;;;;;;;;;;;40213:52;40205:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40164:148;40396:25;:31;40422:4;40396:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40432:31;:35;40464:2;40432:35;;;;;;;;;;;;;;;;;;;;;;;;;40431:36;40396:71;40392:777;;;40514:20;;40504:6;:30;;40496:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40653:9;;40636:13;40646:2;40636:9;:13::i;:::-;40627:6;:22;;;;:::i;:::-;:35;;40619:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40392:777;;;40765:25;:29;40791:2;40765:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40799:31;:37;40831:4;40799:37;;;;;;;;;;;;;;;;;;;;;;;;;40798:38;40765:71;40761:408;;;40883:20;;40873:6;:30;;40865:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40761:408;;;41009:31;:35;41041:2;41009:35;;;;;;;;;;;;;;;;;;;;;;;;;41005:164;;41102:9;;41085:13;41095:2;41085:9;:13::i;:::-;41076:6;:22;;;;:::i;:::-;:35;;41068:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41005:164;40761:408;40392:777;39950:1230;41234:10;41255:13;41247:21;;:4;:21;;;41234:34;;41284:5;41283:6;:28;;;;;41293:18;;;;;;;;;;;41283:28;41279:995;;;41366:1;41332:24;:30;41357:4;41332:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41436:15;41423:8;41389:24;:30;41414:4;41389:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41332:120;41328:539;;;41493:21;;41474:16;:40;;;;41552:21;;41533:16;:40;;;;41627:16;;41608;;:35;;;;:::i;:::-;41592:13;:51;;;;41328:539;;;41703:20;;41684:16;:39;;;;41761:20;;41742:16;:39;;;;41835:16;;41816;;:35;;;;:::i;:::-;41800:13;:51;;;;41328:539;41279:995;;;41935:1;41903:24;:28;41928:2;41903:28;;;;;;;;;;;;;;;;:33;41899:120;;41988:15;41957:24;:28;41982:2;41957:28;;;;;;;;;;;;;;;:46;;;;41899:120;42041:18;;;;;;;;;;;42036:227;;42099:20;;42080:16;:39;;;;42157:20;;42138:16;:39;;;;42231:16;;42212;;:35;;;;:::i;:::-;42196:13;:51;;;;42036:227;41279:995;42287:28;42318:24;42336:4;42318:9;:24::i;:::-;42287:55;;42356:12;42395:18;;42371:20;:42;;42356:57;;42445:7;:35;;;;;42469:11;;;;;;;;;;;42445:35;:61;;;;;42498:8;;;;;;;;;;;42497:9;42445:61;:110;;;;;42524:25;:31;42550:4;42524:31;;;;;;;;;;;;;;;;;;;;;;;;;42523:32;42445:110;:153;;;;;42573:19;:25;42593:4;42573:25;;;;;;;;;;;;;;;;;;;;;;;;;42572:26;42445:153;:194;;;;;42616:19;:23;42636:2;42616:23;;;;;;;;;;;;;;;;;;;;;;;;;42615:24;42445:194;42427:328;;;42677:4;42666:8;;:15;;;;;;;;;;;;;;;;;;42699:10;:8;:10::i;:::-;42738:5;42727:8;;:16;;;;;;;;;;;;;;;;;;42427:328;42768:12;42784:8;;;;;;;;;;;42783:9;42768:24;;42894:19;:25;42914:4;42894:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42923:19;:23;42943:2;42923:23;;;;;;;;;;;;;;;;;;;;;;;;;42894:52;42891:99;;;42973:5;42963:15;;42891:99;43003:12;43107:7;43104:823;;;43158:25;:29;43184:2;43158:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43207:1;43191:13;;:17;43158:50;43154:620;;;43235:34;43265:3;43235:25;43246:13;;43235:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43228:41;;43336:13;;43317:16;;43310:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43288:18;;:61;;;;;;;:::i;:::-;;;;;;;;43416:13;;43397:16;;43390:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43368:18;;:61;;;;;;;:::i;:::-;;;;;;;;43154:620;;;43490:25;:31;43516:4;43490:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43540:1;43525:12;;:16;43490:51;43487:287;;;43569:33;43598:3;43569:24;43580:12;;43569:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43562:40;;43668:12;;43650:15;;43643:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43621:18;;:59;;;;;;;:::i;:::-;;;;;;;;43746:12;;43728:15;;43721:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43699:18;;:59;;;;;;;:::i;:::-;;;;;;;;43487:287;43154:620;43801:1;43794:4;:8;43791:93;;;43826:42;43842:4;43856;43863;43826:15;:42::i;:::-;43791:93;43911:4;43901:14;;;;;:::i;:::-;;;43104:823;43940:33;43956:4;43962:2;43966:6;43940:15;:33::i;:::-;39665:4316;;;;;39552:4429;;;;:::o;18496:193::-;18582:7;18615:1;18610;:6;;18618:12;18602:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18642:9;18658:1;18654;:5;;;;:::i;:::-;18642:17;;18680:1;18673:8;;;18496:193;;;;;:::o;38525:189::-;38642:5;38608:25;:31;38634:4;38608:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38700:5;38666:40;;38694:4;38666:40;;;;;;;;;;;;38525:189;;:::o;13773:575::-;13931:1;13913:20;;:6;:20;;;13905:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14015:1;13994:23;;:9;:23;;;13986:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14071:47;14092:6;14100:9;14111:6;14071:20;:47::i;:::-;14152:71;14174:6;14152:71;;;;;;;;;;;;;;;;;:9;:17;14162:6;14152:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;14132:9;:17;14142:6;14132:17;;;;;;;;;;;;;;;:91;;;;14257:32;14282:6;14257:9;:20;14267:9;14257:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;14234:9;:20;14244:9;14234:20;;;;;;;;;;;;;;;:55;;;;14322:9;14305:35;;14314:6;14305:35;;;14333:6;14305:35;;;;;;:::i;:::-;;;;;;;;13773:575;;;:::o;45125:1363::-;45164:23;45190:24;45208:4;45190:9;:24::i;:::-;45164:50;;45225:25;45274:18;;45253;;:39;;;;:::i;:::-;45225:67;;45303:12;45351:1;45332:15;:20;:46;;;;45377:1;45356:17;:22;45332:46;45329:60;;;45381:7;;;;;45329:60;45444:2;45423:18;;:23;;;;:::i;:::-;45405:15;:41;45402:111;;;45499:2;45478:18;;:23;;;;:::i;:::-;45460:41;;45402:111;45575:23;45660:1;45640:17;45619:18;;45601:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45575:86;;45672:26;45701:36;45721:15;45701;:19;;:36;;;;:::i;:::-;45672:65;;45751:25;45779:21;45751:49;;45814:36;45831:18;45814:16;:36::i;:::-;45865:18;45886:44;45912:17;45886:21;:25;;:44;;;;:::i;:::-;45865:65;;45944:23;45970:57;46009:17;45970:34;45985:18;;45970:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45944:83;;46038:23;46077:15;46064:10;:28;;;;:::i;:::-;46038:54;;46130:1;46109:18;:22;;;;46163:1;46142:18;:22;;;;46202:1;46184:15;:19;:42;;;;;46225:1;46207:15;:19;46184:42;46181:210;;;46242:46;46255:15;46272;46242:12;:46::i;:::-;46308:71;46323:18;46343:15;46360:18;;46308:71;;;;;;;;:::i;:::-;;;;;;;;46181:210;46425:15;;;;;;;;;;;46417:29;;46454:21;46417:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46404:76;;;;;45153:1335;;;;;;;;;45125:1363;:::o;18949:473::-;19007:7;19257:1;19252;:6;19248:47;;19282:1;19275:8;;;;19248:47;19308:9;19324:1;19320;:5;;;;:::i;:::-;19308:17;;19353:1;19348;19344;:5;;;;:::i;:::-;:10;19336:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19413:1;19406:8;;;18949:473;;;;;:::o;19899:132::-;19957:7;19984:39;19988:1;19991;19984:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19977:46;;19899:132;;;;:::o;17194:125::-;;;;:::o;18056:136::-;18114:7;18141:43;18145:1;18148;18141:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;18134:50;;18056:136;;;;:::o;43990:597::-;44119:21;44157:1;44143:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44119:40;;44188:4;44170;44175:1;44170:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44214:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44204:4;44209:1;44204:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44250:62;44267:4;44282:15;44300:11;44250:8;:62::i;:::-;44352:15;:66;;;44433:11;44459:1;44503:4;44530;44550:15;44352:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44045:542;43990:597;:::o;44596:520::-;44744:62;44761:4;44776:15;44794:11;44744:8;:62::i;:::-;44850:15;:31;;;44889:9;44922:4;44942:11;44968:1;45011;45062:4;45082:15;44850:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44596:520;;:::o;20528:279::-;20614:7;20646:1;20642;:5;20649:12;20634:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20673:9;20689:1;20685;:5;;;;:::i;:::-;20673:17;;20798:1;20791:8;;;20528:279;;;;;:::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;1553:117;1662:1;1659;1652: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:1057::-;5550:6;5558;5566;5574;5582;5590;5639:3;5627:9;5618:7;5614:23;5610:33;5607:120;;;5646:79;;:::i;:::-;5607:120;5766:1;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5737:117;5893:2;5919:53;5964:7;5955:6;5944:9;5940:22;5919:53;:::i;:::-;5909:63;;5864:118;6021:2;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5992:118;6149:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6120:118;6277:3;6304:53;6349:7;6340:6;6329:9;6325:22;6304:53;:::i;:::-;6294:63;;6248:119;6406:3;6433:53;6478:7;6469:6;6458:9;6454:22;6433:53;:::i;:::-;6423:63;;6377:119;5446:1057;;;;;;;;:::o;6509:619::-;6586:6;6594;6602;6651:2;6639:9;6630:7;6626:23;6622:32;6619:119;;;6657:79;;:::i;:::-;6619:119;6777:1;6802:53;6847:7;6838:6;6827:9;6823:22;6802:53;:::i;:::-;6792:63;;6748:117;6904:2;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6875:118;7032:2;7058:53;7103:7;7094:6;7083:9;7079:22;7058:53;:::i;:::-;7048:63;;7003:118;6509:619;;;;;:::o;7134:86::-;7169:7;7209:4;7202:5;7198:16;7187:27;;7134:86;;;:::o;7226:112::-;7309:22;7325:5;7309:22;:::i;:::-;7304:3;7297:35;7226:112;;:::o;7344:214::-;7433:4;7471:2;7460:9;7456:18;7448:26;;7484:67;7548:1;7537:9;7533:17;7524:6;7484:67;:::i;:::-;7344:214;;;;:::o;7564:118::-;7651:24;7669:5;7651:24;:::i;:::-;7646:3;7639:37;7564:118;;:::o;7688:222::-;7781:4;7819:2;7808:9;7804:18;7796:26;;7832:71;7900:1;7889:9;7885:17;7876:6;7832:71;:::i;:::-;7688:222;;;;:::o;7916:474::-;7984:6;7992;8041:2;8029:9;8020:7;8016:23;8012:32;8009:119;;;8047:79;;:::i;:::-;8009:119;8167:1;8192:53;8237:7;8228:6;8217:9;8213:22;8192:53;:::i;:::-;8182:63;;8138:117;8294:2;8320:53;8365:7;8356:6;8345:9;8341:22;8320:53;:::i;:::-;8310:63;;8265:118;7916:474;;;;;:::o;8396:116::-;8466:21;8481:5;8466:21;:::i;:::-;8459:5;8456:32;8446:60;;8502:1;8499;8492:12;8446:60;8396:116;:::o;8518:133::-;8561:5;8599:6;8586:20;8577:29;;8615:30;8639:5;8615:30;:::i;:::-;8518:133;;;;:::o;8657:468::-;8722:6;8730;8779:2;8767:9;8758:7;8754:23;8750:32;8747:119;;;8785:79;;:::i;:::-;8747:119;8905:1;8930:53;8975:7;8966:6;8955:9;8951:22;8930:53;:::i;:::-;8920:63;;8876:117;9032:2;9058:50;9100:7;9091:6;9080:9;9076:22;9058:50;:::i;:::-;9048:60;;9003:115;8657:468;;;;;:::o;9131:323::-;9187:6;9236:2;9224:9;9215:7;9211:23;9207:32;9204:119;;;9242:79;;:::i;:::-;9204:119;9362:1;9387:50;9429:7;9420:6;9409:9;9405:22;9387:50;:::i;:::-;9377:60;;9333:114;9131:323;;;;:::o;9460:117::-;9569:1;9566;9559:12;9583:117;9692:1;9689;9682:12;9706:117;9815:1;9812;9805:12;9846:568;9919:8;9929:6;9979:3;9972:4;9964:6;9960:17;9956:27;9946:122;;9987:79;;:::i;:::-;9946:122;10100:6;10087:20;10077:30;;10130:18;10122:6;10119:30;10116:117;;;10152:79;;:::i;:::-;10116:117;10266:4;10258:6;10254:17;10242:29;;10320:3;10312:4;10304:6;10300:17;10290:8;10286:32;10283:41;10280:128;;;10327:79;;:::i;:::-;10280:128;9846:568;;;;;:::o;10437:::-;10510:8;10520:6;10570:3;10563:4;10555:6;10551:17;10547:27;10537:122;;10578:79;;:::i;:::-;10537:122;10691:6;10678:20;10668:30;;10721:18;10713:6;10710:30;10707:117;;;10743:79;;:::i;:::-;10707:117;10857:4;10849:6;10845:17;10833:29;;10911:3;10903:4;10895:6;10891:17;10881:8;10877:32;10874:41;10871:128;;;10918:79;;:::i;:::-;10871:128;10437:568;;;;;:::o;11011:934::-;11133:6;11141;11149;11157;11206:2;11194:9;11185:7;11181:23;11177:32;11174:119;;;11212:79;;:::i;:::-;11174:119;11360:1;11349:9;11345:17;11332:31;11390:18;11382:6;11379:30;11376:117;;;11412:79;;:::i;:::-;11376:117;11525:80;11597:7;11588:6;11577:9;11573:22;11525:80;:::i;:::-;11507:98;;;;11303:312;11682:2;11671:9;11667:18;11654:32;11713:18;11705:6;11702:30;11699:117;;;11735:79;;:::i;:::-;11699:117;11848:80;11920:7;11911:6;11900:9;11896:22;11848:80;:::i;:::-;11830:98;;;;11625:313;11011:934;;;;;;;:::o;11951:474::-;12019:6;12027;12076:2;12064:9;12055:7;12051:23;12047:32;12044:119;;;12082:79;;:::i;:::-;12044:119;12202:1;12227:53;12272:7;12263:6;12252:9;12248:22;12227:53;:::i;:::-;12217:63;;12173:117;12329:2;12355:53;12400:7;12391:6;12380:9;12376:22;12355:53;:::i;:::-;12345:63;;12300:118;11951:474;;;;;:::o;12431:180::-;12479:77;12476:1;12469:88;12576:4;12573:1;12566:15;12600:4;12597:1;12590:15;12617:320;12661:6;12698:1;12692:4;12688:12;12678:22;;12745:1;12739:4;12735:12;12766:18;12756:81;;12822:4;12814:6;12810:17;12800:27;;12756:81;12884:2;12876:6;12873:14;12853:18;12850:38;12847:84;;12903:18;;:::i;:::-;12847:84;12668:269;12617:320;;;:::o;12943:182::-;13083:34;13079:1;13071:6;13067:14;13060:58;12943:182;:::o;13131:366::-;13273:3;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13370:93;13459:3;13370:93;:::i;:::-;13488:2;13483:3;13479:12;13472:19;;13131:366;;;:::o;13503:419::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13756:9;13750:4;13746:20;13742:1;13731:9;13727:17;13720:47;13784:131;13910:4;13784:131;:::i;:::-;13776:139;;13503:419;;;:::o;13928:180::-;13976:77;13973:1;13966:88;14073:4;14070:1;14063:15;14097:4;14094:1;14087:15;14114:410;14154:7;14177:20;14195:1;14177:20;:::i;:::-;14172:25;;14211:20;14229:1;14211:20;:::i;:::-;14206:25;;14266:1;14263;14259:9;14288:30;14306:11;14288:30;:::i;:::-;14277:41;;14467:1;14458:7;14454:15;14451:1;14448:22;14428:1;14421:9;14401:83;14378:139;;14497:18;;:::i;:::-;14378:139;14162:362;14114:410;;;;:::o;14530:180::-;14578:77;14575:1;14568:88;14675:4;14672:1;14665:15;14699:4;14696:1;14689:15;14716:185;14756:1;14773:20;14791:1;14773:20;:::i;:::-;14768:25;;14807:20;14825:1;14807:20;:::i;:::-;14802:25;;14846:1;14836:35;;14851:18;;:::i;:::-;14836:35;14893:1;14890;14886:9;14881:14;;14716:185;;;;:::o;14907:234::-;15047:34;15043:1;15035:6;15031:14;15024:58;15116:17;15111:2;15103:6;15099:15;15092:42;14907:234;:::o;15147:366::-;15289:3;15310:67;15374:2;15369:3;15310:67;:::i;:::-;15303:74;;15386:93;15475:3;15386:93;:::i;:::-;15504:2;15499:3;15495:12;15488:19;;15147:366;;;:::o;15519:419::-;15685:4;15723:2;15712:9;15708:18;15700:26;;15772:9;15766:4;15762:20;15758:1;15747:9;15743:17;15736:47;15800:131;15926:4;15800:131;:::i;:::-;15792:139;;15519:419;;;:::o;15944:191::-;15984:3;16003:20;16021:1;16003:20;:::i;:::-;15998:25;;16037:20;16055:1;16037:20;:::i;:::-;16032:25;;16080:1;16077;16073:9;16066:16;;16101:3;16098:1;16095:10;16092:36;;;16108:18;;:::i;:::-;16092:36;15944:191;;;;:::o;16141:179::-;16281:31;16277:1;16269:6;16265:14;16258:55;16141:179;:::o;16326:366::-;16468:3;16489:67;16553:2;16548:3;16489:67;:::i;:::-;16482:74;;16565:93;16654:3;16565:93;:::i;:::-;16683:2;16678:3;16674:12;16667:19;;16326:366;;;:::o;16698:419::-;16864:4;16902:2;16891:9;16887:18;16879:26;;16951:9;16945:4;16941:20;16937:1;16926:9;16922:17;16915:47;16979:131;17105:4;16979:131;:::i;:::-;16971:139;;16698:419;;;:::o;17123:244::-;17263:34;17259:1;17251:6;17247:14;17240:58;17332:27;17327:2;17319:6;17315:15;17308:52;17123:244;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:102;18398:8;18445:5;18442:1;18438:13;18417:34;;18356:102;;;:::o;18464:848::-;18525:5;18532:4;18556:6;18547:15;;18580:5;18571:14;;18594:712;18615:1;18605:8;18602:15;18594:712;;;18710:4;18705:3;18701:14;18695:4;18692:24;18689:50;;;18719:18;;:::i;:::-;18689:50;18769:1;18759:8;18755:16;18752:451;;;19184:4;19177:5;19173:16;19164:25;;18752:451;19234:4;19228;19224:15;19216:23;;19264:32;19287:8;19264:32;:::i;:::-;19252:44;;18594:712;;;18464:848;;;;;;;:::o;19318:1073::-;19372:5;19563:8;19553:40;;19584:1;19575:10;;19586:5;;19553:40;19612:4;19602:36;;19629:1;19620:10;;19631:5;;19602:36;19698:4;19746:1;19741:27;;;;19782:1;19777:191;;;;19691:277;;19741:27;19759:1;19750:10;;19761:5;;;19777:191;19822:3;19812:8;19809:17;19806:43;;;19829:18;;:::i;:::-;19806:43;19878:8;19875:1;19871:16;19862:25;;19913:3;19906:5;19903:14;19900:40;;;19920:18;;:::i;:::-;19900:40;19953:5;;;19691:277;;20077:2;20067:8;20064:16;20058:3;20052:4;20049:13;20045:36;20027:2;20017:8;20014:16;20009:2;20003:4;20000:12;19996:35;19980:111;19977:246;;;20133:8;20127:4;20123:19;20114:28;;20168:3;20161:5;20158:14;20155:40;;;20175:18;;:::i;:::-;20155:40;20208:5;;19977:246;20248:42;20286:3;20276:8;20270:4;20267:1;20248:42;:::i;:::-;20233:57;;;;20322:4;20317:3;20313:14;20306:5;20303:25;20300:51;;;20331:18;;:::i;:::-;20300:51;20380:4;20373:5;20369:16;20360:25;;19318:1073;;;;;;:::o;20397:281::-;20455:5;20479:23;20497:4;20479:23;:::i;:::-;20471:31;;20523:25;20539:8;20523:25;:::i;:::-;20511:37;;20567:104;20604:66;20594:8;20588:4;20567:104;:::i;:::-;20558:113;;20397:281;;;;:::o;20684:233::-;20723:3;20746:24;20764:5;20746:24;:::i;:::-;20737:33;;20792:66;20785:5;20782:77;20779:103;;20862:18;;:::i;:::-;20779:103;20909:1;20902:5;20898:13;20891:20;;20684:233;;;:::o;20923:223::-;21063:34;21059:1;21051:6;21047:14;21040:58;21132:6;21127:2;21119:6;21115:15;21108:31;20923:223;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:240::-;22089:34;22085:1;22077:6;22073:14;22066:58;22158:23;22153:2;22145:6;22141:15;22134:48;21949:240;:::o;22195:366::-;22337:3;22358:67;22422:2;22417:3;22358:67;:::i;:::-;22351:74;;22434:93;22523:3;22434:93;:::i;:::-;22552:2;22547:3;22543:12;22536:19;;22195:366;;;:::o;22567:419::-;22733:4;22771:2;22760:9;22756:18;22748:26;;22820:9;22814:4;22810:20;22806:1;22795:9;22791:17;22784:47;22848:131;22974:4;22848:131;:::i;:::-;22840:139;;22567:419;;;:::o;22992:239::-;23132:34;23128:1;23120:6;23116:14;23109:58;23201:22;23196:2;23188:6;23184:15;23177:47;22992:239;:::o;23237:366::-;23379:3;23400:67;23464:2;23459:3;23400:67;:::i;:::-;23393:74;;23476:93;23565:3;23476:93;:::i;:::-;23594:2;23589:3;23585:12;23578:19;;23237:366;;;:::o;23609:419::-;23775:4;23813:2;23802:9;23798:18;23790:26;;23862:9;23856:4;23852:20;23848:1;23837:9;23833:17;23826:47;23890:131;24016:4;23890:131;:::i;:::-;23882:139;;23609:419;;;:::o;24034:332::-;24155:4;24193:2;24182:9;24178:18;24170:26;;24206:71;24274:1;24263:9;24259:17;24250:6;24206:71;:::i;:::-;24287:72;24355:2;24344:9;24340:18;24331:6;24287:72;:::i;:::-;24034:332;;;;;:::o;24372:137::-;24426:5;24457:6;24451:13;24442:22;;24473:30;24497:5;24473:30;:::i;:::-;24372:137;;;;:::o;24515:345::-;24582:6;24631:2;24619:9;24610:7;24606:23;24602:32;24599:119;;;24637:79;;:::i;:::-;24599:119;24757:1;24782:61;24835:7;24826:6;24815:9;24811:22;24782:61;:::i;:::-;24772:71;;24728:125;24515:345;;;;:::o;24866:225::-;25006:34;25002:1;24994:6;24990:14;24983:58;25075:8;25070:2;25062:6;25058:15;25051:33;24866:225;:::o;25097:366::-;25239:3;25260:67;25324:2;25319:3;25260:67;:::i;:::-;25253:74;;25336:93;25425:3;25336:93;:::i;:::-;25454:2;25449:3;25445:12;25438:19;;25097:366;;;:::o;25469:419::-;25635:4;25673:2;25662:9;25658:18;25650:26;;25722:9;25716:4;25712:20;25708:1;25697:9;25693:17;25686:47;25750:131;25876:4;25750:131;:::i;:::-;25742:139;;25469:419;;;:::o;25894:177::-;26034:29;26030:1;26022:6;26018:14;26011:53;25894:177;:::o;26077:366::-;26219:3;26240:67;26304:2;26299:3;26240:67;:::i;:::-;26233:74;;26316:93;26405:3;26316:93;:::i;:::-;26434:2;26429:3;26425:12;26418:19;;26077:366;;;:::o;26449:419::-;26615:4;26653:2;26642:9;26638:18;26630:26;;26702:9;26696:4;26692:20;26688:1;26677:9;26673:17;26666:47;26730:131;26856:4;26730:131;:::i;:::-;26722:139;;26449:419;;;:::o;26874:223::-;27014:34;27010:1;27002:6;26998:14;26991:58;27083:6;27078:2;27070:6;27066:15;27059:31;26874:223;:::o;27103:366::-;27245:3;27266:67;27330:2;27325:3;27266:67;:::i;:::-;27259:74;;27342:93;27431:3;27342:93;:::i;:::-;27460:2;27455:3;27451:12;27444:19;;27103:366;;;:::o;27475:419::-;27641:4;27679:2;27668:9;27664:18;27656:26;;27728:9;27722:4;27718:20;27714:1;27703:9;27699:17;27692:47;27756:131;27882:4;27756:131;:::i;:::-;27748:139;;27475:419;;;:::o;27900:221::-;28040:34;28036:1;28028:6;28024:14;28017:58;28109:4;28104:2;28096:6;28092:15;28085:29;27900:221;:::o;28127:366::-;28269:3;28290:67;28354:2;28349:3;28290:67;:::i;:::-;28283:74;;28366:93;28455:3;28366:93;:::i;:::-;28484:2;28479:3;28475:12;28468:19;;28127:366;;;:::o;28499:419::-;28665:4;28703:2;28692:9;28688:18;28680:26;;28752:9;28746:4;28742:20;28738:1;28727:9;28723:17;28716:47;28780:131;28906:4;28780:131;:::i;:::-;28772:139;;28499:419;;;:::o;28924:224::-;29064:34;29060:1;29052:6;29048:14;29041:58;29133:7;29128:2;29120:6;29116:15;29109:32;28924:224;:::o;29154:366::-;29296:3;29317:67;29381:2;29376:3;29317:67;:::i;:::-;29310:74;;29393:93;29482:3;29393:93;:::i;:::-;29511:2;29506:3;29502:12;29495:19;;29154:366;;;:::o;29526:419::-;29692:4;29730:2;29719:9;29715:18;29707:26;;29779:9;29773:4;29769:20;29765:1;29754:9;29750:17;29743:47;29807:131;29933:4;29807:131;:::i;:::-;29799:139;;29526:419;;;:::o;29951:222::-;30091:34;30087:1;30079:6;30075:14;30068:58;30160:5;30155:2;30147:6;30143:15;30136:30;29951:222;:::o;30179:366::-;30321:3;30342:67;30406:2;30401:3;30342:67;:::i;:::-;30335:74;;30418:93;30507:3;30418:93;:::i;:::-;30536:2;30531:3;30527:12;30520:19;;30179:366;;;:::o;30551:419::-;30717:4;30755:2;30744:9;30740:18;30732:26;;30804:9;30798:4;30794:20;30790:1;30779:9;30775:17;30768:47;30832:131;30958:4;30832:131;:::i;:::-;30824:139;;30551:419;;;:::o;30976:172::-;31116:24;31112:1;31104:6;31100:14;31093:48;30976:172;:::o;31154:366::-;31296:3;31317:67;31381:2;31376:3;31317:67;:::i;:::-;31310:74;;31393:93;31482:3;31393:93;:::i;:::-;31511:2;31506:3;31502:12;31495:19;;31154:366;;;:::o;31526:419::-;31692:4;31730:2;31719:9;31715:18;31707:26;;31779:9;31773:4;31769:20;31765:1;31754:9;31750:17;31743:47;31807:131;31933:4;31807:131;:::i;:::-;31799:139;;31526:419;;;:::o;31951:240::-;32091:34;32087:1;32079:6;32075:14;32068:58;32160:23;32155:2;32147:6;32143:15;32136:48;31951:240;:::o;32197:366::-;32339:3;32360:67;32424:2;32419:3;32360:67;:::i;:::-;32353:74;;32436:93;32525:3;32436:93;:::i;:::-;32554:2;32549:3;32545:12;32538:19;;32197:366;;;:::o;32569:419::-;32735:4;32773:2;32762:9;32758:18;32750:26;;32822:9;32816:4;32812:20;32808:1;32797:9;32793:17;32786:47;32850:131;32976:4;32850:131;:::i;:::-;32842:139;;32569:419;;;:::o;32994:169::-;33134:21;33130:1;33122:6;33118:14;33111:45;32994:169;:::o;33169:366::-;33311:3;33332:67;33396:2;33391:3;33332:67;:::i;:::-;33325:74;;33408:93;33497:3;33408:93;:::i;:::-;33526:2;33521:3;33517:12;33510:19;;33169:366;;;:::o;33541:419::-;33707:4;33745:2;33734:9;33730:18;33722:26;;33794:9;33788:4;33784:20;33780:1;33769:9;33765:17;33758:47;33822:131;33948:4;33822:131;:::i;:::-;33814:139;;33541:419;;;:::o;33966:241::-;34106:34;34102:1;34094:6;34090:14;34083:58;34175:24;34170:2;34162:6;34158:15;34151:49;33966:241;:::o;34213:366::-;34355:3;34376:67;34440:2;34435:3;34376:67;:::i;:::-;34369:74;;34452:93;34541:3;34452:93;:::i;:::-;34570:2;34565:3;34561:12;34554:19;;34213:366;;;:::o;34585:419::-;34751:4;34789:2;34778:9;34774:18;34766:26;;34838:9;34832:4;34828:20;34824:1;34813:9;34809:17;34802:47;34866:131;34992:4;34866:131;:::i;:::-;34858:139;;34585:419;;;:::o;35010:194::-;35050:4;35070:20;35088:1;35070:20;:::i;:::-;35065:25;;35104:20;35122:1;35104:20;:::i;:::-;35099:25;;35148:1;35145;35141:9;35133:17;;35172:1;35166:4;35163:11;35160:37;;;35177:18;;:::i;:::-;35160:37;35010:194;;;;:::o;35210:442::-;35359:4;35397:2;35386:9;35382:18;35374:26;;35410:71;35478:1;35467:9;35463:17;35454:6;35410:71;:::i;:::-;35491:72;35559:2;35548:9;35544:18;35535:6;35491:72;:::i;:::-;35573;35641:2;35630:9;35626:18;35617:6;35573:72;:::i;:::-;35210:442;;;;;;:::o;35658:147::-;35759:11;35796:3;35781:18;;35658:147;;;;:::o;35811:114::-;;:::o;35931:398::-;36090:3;36111:83;36192:1;36187:3;36111:83;:::i;:::-;36104:90;;36203:93;36292:3;36203:93;:::i;:::-;36321:1;36316:3;36312:11;36305:18;;35931:398;;;:::o;36335:379::-;36519:3;36541:147;36684:3;36541:147;:::i;:::-;36534:154;;36705:3;36698:10;;36335:379;;;:::o;36720:220::-;36860:34;36856:1;36848:6;36844:14;36837:58;36929:3;36924:2;36916:6;36912:15;36905:28;36720:220;:::o;36946:366::-;37088:3;37109:67;37173:2;37168:3;37109:67;:::i;:::-;37102:74;;37185:93;37274:3;37185:93;:::i;:::-;37303:2;37298:3;37294:12;37287:19;;36946:366;;;:::o;37318:419::-;37484:4;37522:2;37511:9;37507:18;37499:26;;37571:9;37565:4;37561:20;37557:1;37546:9;37542:17;37535:47;37599:131;37725:4;37599:131;:::i;:::-;37591:139;;37318:419;;;:::o;37743:180::-;37791:77;37788:1;37781:88;37888:4;37885:1;37878:15;37912:4;37909:1;37902:15;37929:143;37986:5;38017:6;38011:13;38002:22;;38033:33;38060:5;38033:33;:::i;:::-;37929:143;;;;:::o;38078:351::-;38148:6;38197:2;38185:9;38176:7;38172:23;38168:32;38165:119;;;38203:79;;:::i;:::-;38165:119;38323:1;38348:64;38404:7;38395:6;38384:9;38380:22;38348:64;:::i;:::-;38338:74;;38294:128;38078:351;;;;:::o;38435:85::-;38480:7;38509:5;38498:16;;38435:85;;;:::o;38526:158::-;38584:9;38617:61;38635:42;38644:32;38670:5;38644:32;:::i;:::-;38635:42;:::i;:::-;38617:61;:::i;:::-;38604:74;;38526:158;;;:::o;38690:147::-;38785:45;38824:5;38785:45;:::i;:::-;38780:3;38773:58;38690:147;;:::o;38843:114::-;38910:6;38944:5;38938:12;38928:22;;38843:114;;;:::o;38963:184::-;39062:11;39096:6;39091:3;39084:19;39136:4;39131:3;39127:14;39112:29;;38963:184;;;;:::o;39153:132::-;39220:4;39243:3;39235:11;;39273:4;39268:3;39264:14;39256:22;;39153:132;;;:::o;39291:108::-;39368:24;39386:5;39368:24;:::i;:::-;39363:3;39356:37;39291:108;;:::o;39405:179::-;39474:10;39495:46;39537:3;39529:6;39495:46;:::i;:::-;39573:4;39568:3;39564:14;39550:28;;39405:179;;;;:::o;39590:113::-;39660:4;39692;39687:3;39683:14;39675:22;;39590:113;;;:::o;39739:732::-;39858:3;39887:54;39935:5;39887:54;:::i;:::-;39957:86;40036:6;40031:3;39957:86;:::i;:::-;39950:93;;40067:56;40117:5;40067:56;:::i;:::-;40146:7;40177:1;40162:284;40187:6;40184:1;40181:13;40162:284;;;40263:6;40257:13;40290:63;40349:3;40334:13;40290:63;:::i;:::-;40283:70;;40376:60;40429:6;40376:60;:::i;:::-;40366:70;;40222:224;40209:1;40206;40202:9;40197:14;;40162:284;;;40166:14;40462:3;40455:10;;39863:608;;;39739:732;;;;:::o;40477:831::-;40740:4;40778:3;40767:9;40763:19;40755:27;;40792:71;40860:1;40849:9;40845:17;40836:6;40792:71;:::i;:::-;40873:80;40949:2;40938:9;40934:18;40925:6;40873:80;:::i;:::-;41000:9;40994:4;40990:20;40985:2;40974:9;40970:18;40963:48;41028:108;41131:4;41122:6;41028:108;:::i;:::-;41020:116;;41146:72;41214:2;41203:9;41199:18;41190:6;41146:72;:::i;:::-;41228:73;41296:3;41285:9;41281:19;41272:6;41228:73;:::i;:::-;40477:831;;;;;;;;:::o;41314:807::-;41563:4;41601:3;41590:9;41586:19;41578:27;;41615:71;41683:1;41672:9;41668:17;41659:6;41615:71;:::i;:::-;41696:72;41764:2;41753:9;41749:18;41740:6;41696:72;:::i;:::-;41778:80;41854:2;41843:9;41839:18;41830:6;41778:80;:::i;:::-;41868;41944:2;41933:9;41929:18;41920:6;41868:80;:::i;:::-;41958:73;42026:3;42015:9;42011:19;42002:6;41958:73;:::i;:::-;42041;42109:3;42098:9;42094:19;42085:6;42041:73;:::i;:::-;41314:807;;;;;;;;;:::o;42127:143::-;42184:5;42215:6;42209:13;42200:22;;42231:33;42258:5;42231:33;:::i;:::-;42127:143;;;;:::o;42276:663::-;42364:6;42372;42380;42429:2;42417:9;42408:7;42404:23;42400:32;42397:119;;;42435:79;;:::i;:::-;42397:119;42555:1;42580:64;42636:7;42627:6;42616:9;42612:22;42580:64;:::i;:::-;42570:74;;42526:128;42693:2;42719:64;42775:7;42766:6;42755:9;42751:22;42719:64;:::i;:::-;42709:74;;42664:129;42832:2;42858:64;42914:7;42905:6;42894:9;42890:22;42858:64;:::i;:::-;42848:74;;42803:129;42276:663;;;;;:::o

Swarm Source

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