ETH Price: $2,757.30 (+5.04%)

Token

For Fawkes Sake (FFS)
 

Overview

Max Total Supply

1,000,000,000 FFS

Holders

137

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,890,259.677936358844726563 FFS

Value
$0.00
0xaa8878459a4b0fab6a2a476017c6edcf0cfcd9bf
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:
FFS

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-29
*/

// 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) {
        return msg.data;
    }
}


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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


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

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

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

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

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



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _createTokens(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

   
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

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

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

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

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address[] memory _users) external onlyOwner {
        for(uint8 i = 0; i < _users.length; i++) {
            _whiteList[_users[i]] = true;
        }
    }
}


contract FFS is ERC20, Ownable, LockToken {

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping (address => bool) public automatedMarketMakerPairs;

    // Blacklist bots
    mapping(address => bool) public _isBlacklisted;

    uint256 public maxTransactionAmount = 1000000000 * (10**18);
    uint256 public swapTokensAtAmount = 400000 * (10**18);
    uint256 public maxWalletToken = 1000000 * (10**18);
   
    uint256 public liquidityBuyFee = 1; // on buy
    uint256 public teamBuyFee = 1; // only on buy
    uint256 public liquiditySellFee = 2; // on sell 
    uint256 public marketingSellFee = 2; // only on sell
    uint256 public burnSellFee = 2; // only on sell

    uint256 public marketingTokens;
    uint256 public liquidityTokens;
    uint256 public teamTokens;
 
    address payable private marketingWallet = payable(0xF141257E561159EfA101bbE63d430513231357D2);
    address payable private teamWallet = payable(0x7BaBb179f032b9990f1bA03E607e3eaA95459481);
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
  
    // exlcude from fees
    mapping (address => bool) private _isExcludedFromFees;
    
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue);

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("For Fawkes Sake", "FFS") {
    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;


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

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTokens(owner(), 1000000000 * (10**18));
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) open(from, to) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');

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

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
            require(amount <= maxTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }

        if (automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }
    
       
        if(!inSwapAndLiquify && automatedMarketMakerPairs[to] && 
            swapAndLiquifyEnabled && 
            (marketingTokens >= swapTokensAtAmount ||
            liquidityTokens >= swapTokensAtAmount ||
            teamTokens >= swapTokensAtAmount))

            {
                swapAndLiquify();
        }
             

         // if any account belongs to _isExcludedFromFee account then remove the fee
        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 marketingShare;
            uint256 liquidityShare;
            uint256 teamShare;
            uint256 burnShare;
            
            if(automatedMarketMakerPairs[from]) {
                
                if(teamBuyFee > 0) {
                    teamShare = amount.mul(teamBuyFee).div(100);
                    teamTokens += teamShare;
                    super._transfer(from, address(this), teamShare);
                }

                if(liquidityBuyFee > 0) {
                    liquidityShare = amount.mul(liquidityBuyFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

            }

            if(automatedMarketMakerPairs[to]) {
               
                if(marketingSellFee > 0) {
                    marketingShare = amount.mul(marketingSellFee).div(100);
                    marketingTokens += marketingShare;
                    super._transfer(from, address(this), marketingShare);
                }

                if(liquiditySellFee > 0) {
                    liquidityShare = amount.mul(liquiditySellFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

                if(burnSellFee > 0) {
                    burnShare = amount.mul(burnSellFee).div(100);
                    super._transfer(from, deadWallet, burnShare);
                }

            }

            amount = amount.sub(marketingShare.add(liquidityShare).add(teamShare).add(burnShare));

        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            // split the contract balance into halves
            uint256 half = swapTokensAtAmount.div(2);
            uint256 otherHalf = swapTokensAtAmount.sub(half);

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

            // swap tokens for ETH
            swapTokensForEth(half, address(this));

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

            // add liquidity to uniswap
            addLiquidity(otherHalf, newBalance);
            emit SwapAndLiquify(half, newBalance, otherHalf);
            liquidityTokens -= swapTokensAtAmount;
        }

        if(marketingTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, marketingWallet);
            marketingTokens -= swapTokensAtAmount;
        }

        if(teamTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, teamWallet);
            teamTokens -= swapTokensAtAmount;
        }
          
    }

    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
            owner(),
            block.timestamp
        );
    }

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

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

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

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

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

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }


    function updateBuyFee(uint256 _liqFee, uint256 _teamFee) public onlyOwner() {
        require(_liqFee.add(_teamFee) <= 6, "tax too high");
        liquidityBuyFee = _liqFee;
        teamBuyFee = _teamFee;
    }

    function updateSellFee(uint256 _liqFee, uint256 _markFee, uint256 _burnFee) public onlyOwner() {
        require(_liqFee.add(_markFee).add(_burnFee) <= 6, "tax too high");
        liquiditySellFee = _liqFee;
        marketingSellFee = _markFee;
        burnSellFee = _burnFee;
    }

    function blacklistBots(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }

    function updateWallets(address payable _markWallet, address payable _teamWallet) public onlyOwner {  
        marketingWallet = _markWallet;
        teamWallet = _teamWallet;
    }

    function setMaxTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxTransactionAmount = _maxTxAmount;
        require(maxTransactionAmount >= totalSupply().div(400), "value too low");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMaxWalletToken(uint256 _newValue) external onlyOwner {
        uint256 prevValue = maxWalletToken;
  	    maxWalletToken = _newValue;
        require(maxWalletToken >= totalSupply().div(400), "value too low");
        emit MaxWalletAmountUpdated(prevValue, _newValue);
  	}

    receive() external payable {

  	}
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"includeToWhiteList","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":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_markFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_markWallet","type":"address"},{"internalType":"address payable","name":"_teamWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600560146101000a81548160ff0219169083151502179055506b033b2e3c9fd0803ce8000000600a556954b40b1f852bda000000600b5569d3c21bcecceda1000000600c556001600d556001600e556002600f556002601055600260115573f141257e561159efa101bbe63d430513231357d2601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737babb179f032b9990f1ba03e607e3eaa95459481601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760156101000a81548160ff0219169083151502179055503480156200017957600080fd5b506040518060400160405280600f81526020017f466f72204661776b65732053616b6500000000000000000000000000000000008152506040518060400160405280600381526020017f46465300000000000000000000000000000000000000000000000000000000008152508160039081620001f7919062000db3565b50806004908162000209919062000db3565b5050506200022c62000220620005ba60201b60201c565b620005c260201b60201c565b6001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000343573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000369919062000f04565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f7919062000f04565b6040518363ffffffff1660e01b81526004016200041692919062000f47565b6020604051808303816000875af115801562000436573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045c919062000f04565b905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620004f5620004e76200068860201b60201c565b6001620006b260201b60201c565b6200052a601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b260201b60201c565b6200055f601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b260201b60201c565b62000572306001620006b260201b60201c565b620005858160016200088160201b60201c565b620005b2620005996200068860201b60201c565b6b033b2e3c9fd0803ce8000000620009b760201b60201c565b50506200126b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006c2620005ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006e86200068860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007389062000fd5565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503620007d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cd906200106d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008759190620010ac565b60405180910390a25050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000916576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090d906200113f565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2090620011b1565b60405180910390fd5b62000a3d6000838362000b2f60201b60201c565b806002600082825462000a51919062001202565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000aa8919062001202565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0f91906200124e565b60405180910390a362000b2b6000838362000b3460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bbb57607f821691505b60208210810362000bd15762000bd062000b73565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c3b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bfc565b62000c47868362000bfc565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c9462000c8e62000c888462000c5f565b62000c69565b62000c5f565b9050919050565b6000819050919050565b62000cb08362000c73565b62000cc862000cbf8262000c9b565b84845462000c09565b825550505050565b600090565b62000cdf62000cd0565b62000cec81848462000ca5565b505050565b5b8181101562000d145762000d0860008262000cd5565b60018101905062000cf2565b5050565b601f82111562000d635762000d2d8162000bd7565b62000d388462000bec565b8101602085101562000d48578190505b62000d6062000d578562000bec565b83018262000cf1565b50505b505050565b600082821c905092915050565b600062000d886000198460080262000d68565b1980831691505092915050565b600062000da3838362000d75565b9150826002028217905092915050565b62000dbe8262000b39565b67ffffffffffffffff81111562000dda5762000dd962000b44565b5b62000de6825462000ba2565b62000df382828562000d18565b600060209050601f83116001811462000e2b576000841562000e16578287015190505b62000e22858262000d95565b86555062000e92565b601f19841662000e3b8662000bd7565b60005b8281101562000e655784890151825560018201915060208501945060208101905062000e3e565b8683101562000e85578489015162000e81601f89168262000d75565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ecc8262000e9f565b9050919050565b62000ede8162000ebf565b811462000eea57600080fd5b50565b60008151905062000efe8162000ed3565b92915050565b60006020828403121562000f1d5762000f1c62000e9a565b5b600062000f2d8482850162000eed565b91505092915050565b62000f418162000ebf565b82525050565b600060408201905062000f5e600083018562000f36565b62000f6d602083018462000f36565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fbd60208362000f74565b915062000fca8262000f85565b602082019050919050565b6000602082019050818103600083015262000ff08162000fae565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b600062001055602a8362000f74565b9150620010628262000ff7565b604082019050919050565b60006020820190508181036000830152620010888162001046565b9050919050565b60008115159050919050565b620010a6816200108f565b82525050565b6000602082019050620010c360008301846200109b565b92915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200112760388362000f74565b91506200113482620010c9565b604082019050919050565b600060208201905081810360008301526200115a8162001118565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001199601f8362000f74565b9150620011a68262001161565b602082019050919050565b60006020820190508181036000830152620011cc816200118a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200120f8262000c5f565b91506200121c8362000c5f565b9250828201905080821115620012375762001236620011d3565b5b92915050565b620012488162000c5f565b82525050565b60006020820190506200126560008301846200123d565b92915050565b608051614b796200128e6000396000818161100a01526116ae0152614b796000f3fe6080604052600436106102815760003560e01c806385141a771161014f578063c0246668116100c1578063e2f456051161007a578063e2f45605146109cf578063e6c75f71146109fa578063e7f444b314610a25578063e8ba854f14610a50578063f2fde38b14610a79578063fb201b1d14610aa257610288565b8063c0246668146108bf578063c3e3c7bc146108e8578063c49b9a8014610913578063c8c8ebe41461093c578063ccb6135814610967578063dd62ed3e1461099257610288565b80639a7a23d6116101135780639a7a23d61461078d578063a457c2d7146107b6578063a6d4ec32146107f3578063a9059cbb1461081c578063aba88f0214610859578063b62496f51461088257610288565b806385141a77146106b85780638b27306d146106e35780638da5cb5b1461070e57806391d55f411461073957806395d89b411461076257610288565b8063313ce567116101f35780634fbee193116101ac5780634fbee193146105aa578063610e34b9146105e757806365b8dbc01461061057806370a0823114610639578063715018a6146106765780637e7613771461068d57610288565b8063313ce5671461049657806339509351146104c157806347535d7b146104fe57806349bd5a5e146105295780634a74bb02146105545780634b8ce6021461057f57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d5780631cdd3be3146103c85780631d38ff96146104055780631e293c101461043057806323b872dd1461045957610288565b806306fdde031461028d578063095ea7b3146102b8578063099d0d30146102f557806309e89af7146103205780630b6bb6f51461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab9565b6040516102af91906135e9565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906136b3565b610b4b565b6040516102ec919061370e565b60405180910390f35b34801561030157600080fd5b5061030a610b69565b6040516103179190613738565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613753565b610b6f565b005b34801561035557600080fd5b50610370600480360381019061036b91906138c8565b610bf5565b005b34801561037e57600080fd5b50610387610d0c565b6040516103949190613970565b60405180910390f35b3480156103a957600080fd5b506103b2610d32565b6040516103bf9190613738565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea919061398b565b610d3c565b6040516103fc919061370e565b60405180910390f35b34801561041157600080fd5b5061041a610d5c565b6040516104279190613738565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613753565b610d62565b005b34801561046557600080fd5b50610480600480360381019061047b91906139b8565b610e48565b60405161048d919061370e565b60405180910390f35b3480156104a257600080fd5b506104ab610f40565b6040516104b89190613a27565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906136b3565b610f49565b6040516104f5919061370e565b60405180910390f35b34801561050a57600080fd5b50610513610ff5565b604051610520919061370e565b60405180910390f35b34801561053557600080fd5b5061053e611008565b60405161054b9190613a51565b60405180910390f35b34801561056057600080fd5b5061056961102c565b604051610576919061370e565b60405180910390f35b34801561058b57600080fd5b5061059461103f565b6040516105a19190613738565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc919061398b565b611045565b6040516105de919061370e565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613a6c565b61109b565b005b34801561061c57600080fd5b506106376004803603810190610632919061398b565b61117f565b005b34801561064557600080fd5b50610660600480360381019061065b919061398b565b61134b565b60405161066d9190613738565b60405180910390f35b34801561068257600080fd5b5061068b611393565b005b34801561069957600080fd5b506106a261141b565b6040516106af9190613738565b60405180910390f35b3480156106c457600080fd5b506106cd611421565b6040516106da9190613a51565b60405180910390f35b3480156106ef57600080fd5b506106f8611447565b6040516107059190613738565b60405180910390f35b34801561071a57600080fd5b5061072361144d565b6040516107309190613a51565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613753565b611477565b005b34801561076e57600080fd5b5061077761159e565b60405161078491906135e9565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613ad8565b611630565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906136b3565b611748565b6040516107ea919061370e565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613b18565b611833565b005b34801561082857600080fd5b50610843600480360381019061083e91906136b3565b611931565b604051610850919061370e565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613ad8565b61194f565b005b34801561088e57600080fd5b506108a960048036038101906108a4919061398b565b611a26565b6040516108b6919061370e565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613ad8565b611a46565b005b3480156108f457600080fd5b506108fd611bfd565b60405161090a9190613738565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613b6b565b611c03565b005b34801561094857600080fd5b50610951611cd3565b60405161095e9190613738565b60405180910390f35b34801561097357600080fd5b5061097c611cd9565b6040516109899190613738565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613b98565b611cdf565b6040516109c69190613738565b60405180910390f35b3480156109db57600080fd5b506109e4611d66565b6040516109f19190613738565b60405180910390f35b348015610a0657600080fd5b50610a0f611d6c565b604051610a1c9190613738565b60405180910390f35b348015610a3157600080fd5b50610a3a611d72565b604051610a479190613738565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613c16565b611d78565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b919061398b565b611e7a565b005b348015610aae57600080fd5b50610ab7611f71565b005b606060038054610ac890613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490613c85565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b5050505050905090565b6000610b5f610b5861200a565b8484612012565b6001905092915050565b600f5481565b610b7761200a565b73ffffffffffffffffffffffffffffffffffffffff16610b9561144d565b73ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613d02565b60405180910390fd5b80600b8190555050565b610bfd61200a565b73ffffffffffffffffffffffffffffffffffffffff16610c1b61144d565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613d02565b60405180910390fd5b60005b81518160ff161015610d0857600160066000848460ff1681518110610c9c57610c9b613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d0090613d80565b915050610c74565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600e5481565b610d6a61200a565b73ffffffffffffffffffffffffffffffffffffffff16610d8861144d565b73ffffffffffffffffffffffffffffffffffffffff1614610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590613d02565b60405180910390fd5b80600a81905550610e01610190610df3610d32565b6121db90919063ffffffff16565b600a541015610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613df5565b60405180910390fd5b50565b6000610e558484846121f1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea061200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613e87565b60405180910390fd5b610f3485610f2c61200a565b858403612012565b60019150509392505050565b60006012905090565b6000610feb610f5661200a565b848460016000610f6461200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe69190613ea7565b612012565b6001905092915050565b600560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601760159054906101000a900460ff1681565b60135481565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110a361200a565b73ffffffffffffffffffffffffffffffffffffffff166110c161144d565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613d02565b60405180910390fd5b600661112c8284612b4d90919063ffffffff16565b111561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613f27565b60405180910390fd5b81600d8190555080600e819055505050565b61118761200a565b73ffffffffffffffffffffffffffffffffffffffff166111a561144d565b73ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613d02565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290613fb9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139b61200a565b73ffffffffffffffffffffffffffffffffffffffff166113b961144d565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d02565b60405180910390fd5b6114196000612b63565b565b60115481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f61200a565b73ffffffffffffffffffffffffffffffffffffffff1661149d61144d565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613d02565b60405180910390fd5b6000600c54905081600c8190555061151d61019061150f610d32565b6121db90919063ffffffff16565b600c541015611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613df5565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e738183604051611592929190613fd9565b60405180910390a15050565b6060600480546115ad90613c85565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613c85565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b61163861200a565b73ffffffffffffffffffffffffffffffffffffffff1661165661144d565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390613d02565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061409a565b60405180910390fd5b6117448282612c29565b5050565b6000806001600061175761200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b9061412c565b60405180910390fd5b61182861181f61200a565b85858403612012565b600191505092915050565b61183b61200a565b73ffffffffffffffffffffffffffffffffffffffff1661185961144d565b73ffffffffffffffffffffffffffffffffffffffff16146118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a690613d02565b60405180910390fd5b60066118d6826118c88587612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b1115611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f27565b60405180910390fd5b82600f819055508160108190555080601181905550505050565b600061194561193e61200a565b84846121f1565b6001905092915050565b61195761200a565b73ffffffffffffffffffffffffffffffffffffffff1661197561144d565b73ffffffffffffffffffffffffffffffffffffffff16146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290613d02565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60086020528060005260406000206000915054906101000a900460ff1681565b611a4e61200a565b73ffffffffffffffffffffffffffffffffffffffff16611a6c61144d565b73ffffffffffffffffffffffffffffffffffffffff1614611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613d02565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906141be565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf1919061370e565b60405180910390a25050565b60145481565b611c0b61200a565b73ffffffffffffffffffffffffffffffffffffffff16611c2961144d565b73ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690613d02565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611cc8919061370e565b60405180910390a150565b600a5481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600c5481565b60105481565b611d8061200a565b73ffffffffffffffffffffffffffffffffffffffff16611d9e61144d565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90613d02565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611e8261200a565b73ffffffffffffffffffffffffffffffffffffffff16611ea061144d565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90613d02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614250565b60405180910390fd5b611f6e81612b63565b50565b611f7961200a565b73ffffffffffffffffffffffffffffffffffffffff16611f9761144d565b73ffffffffffffffffffffffffffffffffffffffff1614611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490613d02565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612078906142e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614374565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121ce9190613738565b60405180910390a3505050565b600081836121e991906143c3565b905092915050565b8282600560149054906101000a900460ff16806122575750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122ab5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614440565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614564565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561246c5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a2906145d0565b60405180910390fd5b600083036124c4576124bf85856000612d5c565b612b46565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125685750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b357600a548311156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614662565b60405180910390fd5b5b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126565750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126ac5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127105760006126bc8561134b565b9050600c5484826126cd9190613ea7565b111561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906146f4565b60405180910390fd5b505b601760149054906101000a900460ff161580156127765750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561278e5750601760159054906101000a900460ff165b80156127bc5750600b546012541015806127ac5750600b5460135410155b806127bb5750600b5460145410155b5b156127ca576127c9612fdb565b5b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3a57600080600080600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612980576000600e541115612925576128fe60646128f0600e548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b915081601460008282546129129190613ea7565b92505081905550612924893084612d5c565b5b6000600d54111561297f57612958606461294a600d548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b9250826013600082825461296c9190613ea7565b9250508190555061297e893085612d5c565b5b5b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aea5760006010541115612a2c57612a0560646129f76010548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b93508360126000828254612a199190613ea7565b92505081905550612a2b893086612d5c565b5b6000600f541115612a8657612a5f6064612a51600f548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b92508260136000828254612a739190613ea7565b92505081905550612a85893085612d5c565b5b60006011541115612ae957612ab96064612aab6011548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b9050612ae889601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d5c565b5b5b612b33612b2482612b1685612b08888a612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b886131da90919063ffffffff16565b9650505050505b612b45858585612d5c565b5b5050505050565b60008183612b5b9190613ea7565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb290614786565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc2906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614564565b60405180910390fd5b612e458383836131f0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec290614818565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e9190613ea7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc29190613738565b60405180910390a3612fd58484846131f5565b50505050565b6001601760146101000a81548160ff02191690831515021790555060006130013061134b565b9050600b54601354101580156130195750600b548110155b156130dc5760006130366002600b546121db90919063ffffffff16565b9050600061304f82600b546131da90919063ffffffff16565b9050600047905061306083306131fa565b600061307582476131da90919063ffffffff16565b90506130818382613474565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516130b493929190614838565b60405180910390a1600b54601360008282546130d0919061486f565b92505081905550505050505b600b54601254101580156130f25750600b548110155b1561314157613125600b54601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131fa565b600b5460126000828254613139919061486f565b925050819055505b600b54601454101580156131575750600b548110155b156131a65761318a600b54601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131fa565b600b546014600082825461319e919061486f565b925050819055505b506000601760146101000a81548160ff021916908315150217905550565b600081836131d291906148a3565b905092915050565b600081836131e8919061486f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561321757613216613785565b5b6040519080825280602002602001820160405280156132455781602001602082028036833780820191505090505b509050308160008151811061325d5761325c613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332891906148fa565b8160018151811061333c5761333b613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826133a330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cdf565b10156133d9576133d830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612012565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040161343d959493929190614a20565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b50505050505050565b6134a130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612012565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134ed61144d565b426040518863ffffffff1660e01b815260040161350f96959493929190614a7a565b60606040518083038185885af115801561352d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135529190614af0565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613593578082015181840152602081019050613578565b60008484015250505050565b6000601f19601f8301169050919050565b60006135bb82613559565b6135c58185613564565b93506135d5818560208601613575565b6135de8161359f565b840191505092915050565b6000602082019050818103600083015261360381846135b0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061364a8261361f565b9050919050565b61365a8161363f565b811461366557600080fd5b50565b60008135905061367781613651565b92915050565b6000819050919050565b6136908161367d565b811461369b57600080fd5b50565b6000813590506136ad81613687565b92915050565b600080604083850312156136ca576136c9613615565b5b60006136d885828601613668565b92505060206136e98582860161369e565b9150509250929050565b60008115159050919050565b613708816136f3565b82525050565b600060208201905061372360008301846136ff565b92915050565b6137328161367d565b82525050565b600060208201905061374d6000830184613729565b92915050565b60006020828403121561376957613768613615565b5b60006137778482850161369e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137bd8261359f565b810181811067ffffffffffffffff821117156137dc576137db613785565b5b80604052505050565b60006137ef61360b565b90506137fb82826137b4565b919050565b600067ffffffffffffffff82111561381b5761381a613785565b5b602082029050602081019050919050565b600080fd5b600061384461383f84613800565b6137e5565b905080838252602082019050602084028301858111156138675761386661382c565b5b835b81811015613890578061387c8882613668565b845260208401935050602081019050613869565b5050509392505050565b600082601f8301126138af576138ae613780565b5b81356138bf848260208601613831565b91505092915050565b6000602082840312156138de576138dd613615565b5b600082013567ffffffffffffffff8111156138fc576138fb61361a565b5b6139088482850161389a565b91505092915050565b6000819050919050565b600061393661393161392c8461361f565b613911565b61361f565b9050919050565b60006139488261391b565b9050919050565b600061395a8261393d565b9050919050565b61396a8161394f565b82525050565b60006020820190506139856000830184613961565b92915050565b6000602082840312156139a1576139a0613615565b5b60006139af84828501613668565b91505092915050565b6000806000606084860312156139d1576139d0613615565b5b60006139df86828701613668565b93505060206139f086828701613668565b9250506040613a018682870161369e565b9150509250925092565b600060ff82169050919050565b613a2181613a0b565b82525050565b6000602082019050613a3c6000830184613a18565b92915050565b613a4b8161363f565b82525050565b6000602082019050613a666000830184613a42565b92915050565b60008060408385031215613a8357613a82613615565b5b6000613a918582860161369e565b9250506020613aa28582860161369e565b9150509250929050565b613ab5816136f3565b8114613ac057600080fd5b50565b600081359050613ad281613aac565b92915050565b60008060408385031215613aef57613aee613615565b5b6000613afd85828601613668565b9250506020613b0e85828601613ac3565b9150509250929050565b600080600060608486031215613b3157613b30613615565b5b6000613b3f8682870161369e565b9350506020613b508682870161369e565b9250506040613b618682870161369e565b9150509250925092565b600060208284031215613b8157613b80613615565b5b6000613b8f84828501613ac3565b91505092915050565b60008060408385031215613baf57613bae613615565b5b6000613bbd85828601613668565b9250506020613bce85828601613668565b9150509250929050565b6000613be38261361f565b9050919050565b613bf381613bd8565b8114613bfe57600080fd5b50565b600081359050613c1081613bea565b92915050565b60008060408385031215613c2d57613c2c613615565b5b6000613c3b85828601613c01565b9250506020613c4c85828601613c01565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c9d57607f821691505b602082108103613cb057613caf613c56565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cec602083613564565b9150613cf782613cb6565b602082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8b82613a0b565b915060ff8203613d9e57613d9d613d51565b5b600182019050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613ddf600d83613564565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e71602883613564565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b6000613eb28261367d565b9150613ebd8361367d565b9250828201905080821115613ed557613ed4613d51565b5b92915050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613f11600c83613564565b9150613f1c82613edb565b602082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602383613564565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b6000604082019050613fee6000830185613729565b613ffb6020830184613729565b9392505050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000614084604583613564565b915061408f82614002565b606082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614116602583613564565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006141a8602a83613564565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061423a602683613564565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602483613564565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061435e602283613564565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143ce8261367d565b91506143d98361367d565b9250826143e9576143e8614394565b5b828204905092915050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b600061442a600883613564565b9150614435826143f4565b602082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602583613564565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061454e602383613564565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006145ba601383613564565b91506145c582614584565b602082019050919050565b600060208201905081810360008301526145e9816145ad565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061464c602c83613564565b9150614657826145f0565b604082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006146de602483613564565b91506146e982614682565b604082019050919050565b6000602082019050818103600083015261470d816146d1565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614770603883613564565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614802602683613564565b915061480d826147a6565b604082019050919050565b60006020820190508181036000830152614831816147f5565b9050919050565b600060608201905061484d6000830186613729565b61485a6020830185613729565b6148676040830184613729565b949350505050565b600061487a8261367d565b91506148858361367d565b925082820390508181111561489d5761489c613d51565b5b92915050565b60006148ae8261367d565b91506148b98361367d565b92508282026148c78161367d565b915082820484148315176148de576148dd613d51565b5b5092915050565b6000815190506148f481613651565b92915050565b6000602082840312156149105761490f613615565b5b600061491e848285016148e5565b91505092915050565b6000819050919050565b600061494c61494761494284614927565b613911565b61367d565b9050919050565b61495c81614931565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149978161363f565b82525050565b60006149a9838361498e565b60208301905092915050565b6000602082019050919050565b60006149cd82614962565b6149d7818561496d565b93506149e28361497e565b8060005b83811015614a135781516149fa888261499d565b9750614a05836149b5565b9250506001810190506149e6565b5085935050505092915050565b600060a082019050614a356000830188613729565b614a426020830187614953565b8181036040830152614a5481866149c2565b9050614a636060830185613a42565b614a706080830184613729565b9695505050505050565b600060c082019050614a8f6000830189613a42565b614a9c6020830188613729565b614aa96040830187614953565b614ab66060830186614953565b614ac36080830185613a42565b614ad060a0830184613729565b979650505050505050565b600081519050614aea81613687565b92915050565b600080600060608486031215614b0957614b08613615565b5b6000614b1786828701614adb565b9350506020614b2886828701614adb565b9250506040614b3986828701614adb565b915050925092509256fea26469706673582212202ed315ef0ed28c18b68187dc039e3d9d66554a509714195ffeae4cdb4a16edd264736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806385141a771161014f578063c0246668116100c1578063e2f456051161007a578063e2f45605146109cf578063e6c75f71146109fa578063e7f444b314610a25578063e8ba854f14610a50578063f2fde38b14610a79578063fb201b1d14610aa257610288565b8063c0246668146108bf578063c3e3c7bc146108e8578063c49b9a8014610913578063c8c8ebe41461093c578063ccb6135814610967578063dd62ed3e1461099257610288565b80639a7a23d6116101135780639a7a23d61461078d578063a457c2d7146107b6578063a6d4ec32146107f3578063a9059cbb1461081c578063aba88f0214610859578063b62496f51461088257610288565b806385141a77146106b85780638b27306d146106e35780638da5cb5b1461070e57806391d55f411461073957806395d89b411461076257610288565b8063313ce567116101f35780634fbee193116101ac5780634fbee193146105aa578063610e34b9146105e757806365b8dbc01461061057806370a0823114610639578063715018a6146106765780637e7613771461068d57610288565b8063313ce5671461049657806339509351146104c157806347535d7b146104fe57806349bd5a5e146105295780634a74bb02146105545780634b8ce6021461057f57610288565b80631694505e116102455780631694505e1461037257806318160ddd1461039d5780631cdd3be3146103c85780631d38ff96146104055780631e293c101461043057806323b872dd1461045957610288565b806306fdde031461028d578063095ea7b3146102b8578063099d0d30146102f557806309e89af7146103205780630b6bb6f51461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ab9565b6040516102af91906135e9565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906136b3565b610b4b565b6040516102ec919061370e565b60405180910390f35b34801561030157600080fd5b5061030a610b69565b6040516103179190613738565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613753565b610b6f565b005b34801561035557600080fd5b50610370600480360381019061036b91906138c8565b610bf5565b005b34801561037e57600080fd5b50610387610d0c565b6040516103949190613970565b60405180910390f35b3480156103a957600080fd5b506103b2610d32565b6040516103bf9190613738565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea919061398b565b610d3c565b6040516103fc919061370e565b60405180910390f35b34801561041157600080fd5b5061041a610d5c565b6040516104279190613738565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190613753565b610d62565b005b34801561046557600080fd5b50610480600480360381019061047b91906139b8565b610e48565b60405161048d919061370e565b60405180910390f35b3480156104a257600080fd5b506104ab610f40565b6040516104b89190613a27565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906136b3565b610f49565b6040516104f5919061370e565b60405180910390f35b34801561050a57600080fd5b50610513610ff5565b604051610520919061370e565b60405180910390f35b34801561053557600080fd5b5061053e611008565b60405161054b9190613a51565b60405180910390f35b34801561056057600080fd5b5061056961102c565b604051610576919061370e565b60405180910390f35b34801561058b57600080fd5b5061059461103f565b6040516105a19190613738565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc919061398b565b611045565b6040516105de919061370e565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613a6c565b61109b565b005b34801561061c57600080fd5b506106376004803603810190610632919061398b565b61117f565b005b34801561064557600080fd5b50610660600480360381019061065b919061398b565b61134b565b60405161066d9190613738565b60405180910390f35b34801561068257600080fd5b5061068b611393565b005b34801561069957600080fd5b506106a261141b565b6040516106af9190613738565b60405180910390f35b3480156106c457600080fd5b506106cd611421565b6040516106da9190613a51565b60405180910390f35b3480156106ef57600080fd5b506106f8611447565b6040516107059190613738565b60405180910390f35b34801561071a57600080fd5b5061072361144d565b6040516107309190613a51565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b9190613753565b611477565b005b34801561076e57600080fd5b5061077761159e565b60405161078491906135e9565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613ad8565b611630565b005b3480156107c257600080fd5b506107dd60048036038101906107d891906136b3565b611748565b6040516107ea919061370e565b60405180910390f35b3480156107ff57600080fd5b5061081a60048036038101906108159190613b18565b611833565b005b34801561082857600080fd5b50610843600480360381019061083e91906136b3565b611931565b604051610850919061370e565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613ad8565b61194f565b005b34801561088e57600080fd5b506108a960048036038101906108a4919061398b565b611a26565b6040516108b6919061370e565b60405180910390f35b3480156108cb57600080fd5b506108e660048036038101906108e19190613ad8565b611a46565b005b3480156108f457600080fd5b506108fd611bfd565b60405161090a9190613738565b60405180910390f35b34801561091f57600080fd5b5061093a60048036038101906109359190613b6b565b611c03565b005b34801561094857600080fd5b50610951611cd3565b60405161095e9190613738565b60405180910390f35b34801561097357600080fd5b5061097c611cd9565b6040516109899190613738565b60405180910390f35b34801561099e57600080fd5b506109b960048036038101906109b49190613b98565b611cdf565b6040516109c69190613738565b60405180910390f35b3480156109db57600080fd5b506109e4611d66565b6040516109f19190613738565b60405180910390f35b348015610a0657600080fd5b50610a0f611d6c565b604051610a1c9190613738565b60405180910390f35b348015610a3157600080fd5b50610a3a611d72565b604051610a479190613738565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613c16565b611d78565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b919061398b565b611e7a565b005b348015610aae57600080fd5b50610ab7611f71565b005b606060038054610ac890613c85565b80601f0160208091040260200160405190810160405280929190818152602001828054610af490613c85565b8015610b415780601f10610b1657610100808354040283529160200191610b41565b820191906000526020600020905b815481529060010190602001808311610b2457829003601f168201915b5050505050905090565b6000610b5f610b5861200a565b8484612012565b6001905092915050565b600f5481565b610b7761200a565b73ffffffffffffffffffffffffffffffffffffffff16610b9561144d565b73ffffffffffffffffffffffffffffffffffffffff1614610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613d02565b60405180910390fd5b80600b8190555050565b610bfd61200a565b73ffffffffffffffffffffffffffffffffffffffff16610c1b61144d565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613d02565b60405180910390fd5b60005b81518160ff161015610d0857600160066000848460ff1681518110610c9c57610c9b613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610d0090613d80565b915050610c74565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60096020528060005260406000206000915054906101000a900460ff1681565b600e5481565b610d6a61200a565b73ffffffffffffffffffffffffffffffffffffffff16610d8861144d565b73ffffffffffffffffffffffffffffffffffffffff1614610dde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd590613d02565b60405180910390fd5b80600a81905550610e01610190610df3610d32565b6121db90919063ffffffff16565b600a541015610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c90613df5565b60405180910390fd5b50565b6000610e558484846121f1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ea061200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790613e87565b60405180910390fd5b610f3485610f2c61200a565b858403612012565b60019150509392505050565b60006012905090565b6000610feb610f5661200a565b848460016000610f6461200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fe69190613ea7565b612012565b6001905092915050565b600560149054906101000a900460ff1681565b7f00000000000000000000000058683c14982fded8d912d0325f7c3388c5c5b10381565b601760159054906101000a900460ff1681565b60135481565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110a361200a565b73ffffffffffffffffffffffffffffffffffffffff166110c161144d565b73ffffffffffffffffffffffffffffffffffffffff1614611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613d02565b60405180910390fd5b600661112c8284612b4d90919063ffffffff16565b111561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490613f27565b60405180910390fd5b81600d8190555080600e819055505050565b61118761200a565b73ffffffffffffffffffffffffffffffffffffffff166111a561144d565b73ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f290613d02565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290613fb9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61139b61200a565b73ffffffffffffffffffffffffffffffffffffffff166113b961144d565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d02565b60405180910390fd5b6114196000612b63565b565b60115481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f61200a565b73ffffffffffffffffffffffffffffffffffffffff1661149d61144d565b73ffffffffffffffffffffffffffffffffffffffff16146114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90613d02565b60405180910390fd5b6000600c54905081600c8190555061151d61019061150f610d32565b6121db90919063ffffffff16565b600c541015611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890613df5565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e738183604051611592929190613fd9565b60405180910390a15050565b6060600480546115ad90613c85565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613c85565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b61163861200a565b73ffffffffffffffffffffffffffffffffffffffff1661165661144d565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a390613d02565b60405180910390fd5b7f00000000000000000000000058683c14982fded8d912d0325f7c3388c5c5b10373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061409a565b60405180910390fd5b6117448282612c29565b5050565b6000806001600061175761200a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b9061412c565b60405180910390fd5b61182861181f61200a565b85858403612012565b600191505092915050565b61183b61200a565b73ffffffffffffffffffffffffffffffffffffffff1661185961144d565b73ffffffffffffffffffffffffffffffffffffffff16146118af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a690613d02565b60405180910390fd5b60066118d6826118c88587612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b1115611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90613f27565b60405180910390fd5b82600f819055508160108190555080601181905550505050565b600061194561193e61200a565b84846121f1565b6001905092915050565b61195761200a565b73ffffffffffffffffffffffffffffffffffffffff1661197561144d565b73ffffffffffffffffffffffffffffffffffffffff16146119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c290613d02565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60086020528060005260406000206000915054906101000a900460ff1681565b611a4e61200a565b73ffffffffffffffffffffffffffffffffffffffff16611a6c61144d565b73ffffffffffffffffffffffffffffffffffffffff1614611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990613d02565b60405180910390fd5b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906141be565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611bf1919061370e565b60405180910390a25050565b60145481565b611c0b61200a565b73ffffffffffffffffffffffffffffffffffffffff16611c2961144d565b73ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690613d02565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611cc8919061370e565b60405180910390a150565b600a5481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b600c5481565b60105481565b611d8061200a565b73ffffffffffffffffffffffffffffffffffffffff16611d9e61144d565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90613d02565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611e8261200a565b73ffffffffffffffffffffffffffffffffffffffff16611ea061144d565b73ffffffffffffffffffffffffffffffffffffffff1614611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90613d02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5c90614250565b60405180910390fd5b611f6e81612b63565b50565b611f7961200a565b73ffffffffffffffffffffffffffffffffffffffff16611f9761144d565b73ffffffffffffffffffffffffffffffffffffffff1614611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490613d02565b60405180910390fd5b6001600560146101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612081576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612078906142e2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614374565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121ce9190613738565b60405180910390a3505050565b600081836121e991906143c3565b905092915050565b8282600560149054906101000a900460ff16806122575750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806122ab5750600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614440565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612350906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90614564565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561246c5750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a2906145d0565b60405180910390fd5b600083036124c4576124bf85856000612d5c565b612b46565b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125685750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b357600a548311156125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a990614662565b60405180910390fd5b5b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126565750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126ac5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127105760006126bc8561134b565b9050600c5484826126cd9190613ea7565b111561270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906146f4565b60405180910390fd5b505b601760149054906101000a900460ff161580156127765750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561278e5750601760159054906101000a900460ff165b80156127bc5750600b546012541015806127ac5750600b5460135410155b806127bb5750600b5460145410155b5b156127ca576127c9612fdb565b5b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3a57600080600080600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612980576000600e541115612925576128fe60646128f0600e548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b915081601460008282546129129190613ea7565b92505081905550612924893084612d5c565b5b6000600d54111561297f57612958606461294a600d548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b9250826013600082825461296c9190613ea7565b9250508190555061297e893085612d5c565b5b5b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aea5760006010541115612a2c57612a0560646129f76010548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b93508360126000828254612a199190613ea7565b92505081905550612a2b893086612d5c565b5b6000600f541115612a8657612a5f6064612a51600f548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b92508260136000828254612a739190613ea7565b92505081905550612a85893085612d5c565b5b60006011541115612ae957612ab96064612aab6011548a6131c490919063ffffffff16565b6121db90919063ffffffff16565b9050612ae889601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612d5c565b5b5b612b33612b2482612b1685612b08888a612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b612b4d90919063ffffffff16565b886131da90919063ffffffff16565b9650505050505b612b45858585612d5c565b5b5050505050565b60008183612b5b9190613ea7565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb290614786565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc2906144d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614564565b60405180910390fd5b612e458383836131f0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec290614818565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f5e9190613ea7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc29190613738565b60405180910390a3612fd58484846131f5565b50505050565b6001601760146101000a81548160ff02191690831515021790555060006130013061134b565b9050600b54601354101580156130195750600b548110155b156130dc5760006130366002600b546121db90919063ffffffff16565b9050600061304f82600b546131da90919063ffffffff16565b9050600047905061306083306131fa565b600061307582476131da90919063ffffffff16565b90506130818382613474565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516130b493929190614838565b60405180910390a1600b54601360008282546130d0919061486f565b92505081905550505050505b600b54601254101580156130f25750600b548110155b1561314157613125600b54601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131fa565b600b5460126000828254613139919061486f565b925050819055505b600b54601454101580156131575750600b548110155b156131a65761318a600b54601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166131fa565b600b546014600082825461319e919061486f565b925050819055505b506000601760146101000a81548160ff021916908315150217905550565b600081836131d291906148a3565b905092915050565b600081836131e8919061486f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561321757613216613785565b5b6040519080825280602002602001820160405280156132455781602001602082028036833780820191505090505b509050308160008151811061325d5761325c613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613304573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332891906148fa565b8160018151811061333c5761333b613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826133a330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cdf565b10156133d9576133d830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019612012565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b815260040161343d959493929190614a20565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b50505050505050565b6134a130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612012565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134ed61144d565b426040518863ffffffff1660e01b815260040161350f96959493929190614a7a565b60606040518083038185885af115801561352d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135529190614af0565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613593578082015181840152602081019050613578565b60008484015250505050565b6000601f19601f8301169050919050565b60006135bb82613559565b6135c58185613564565b93506135d5818560208601613575565b6135de8161359f565b840191505092915050565b6000602082019050818103600083015261360381846135b0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061364a8261361f565b9050919050565b61365a8161363f565b811461366557600080fd5b50565b60008135905061367781613651565b92915050565b6000819050919050565b6136908161367d565b811461369b57600080fd5b50565b6000813590506136ad81613687565b92915050565b600080604083850312156136ca576136c9613615565b5b60006136d885828601613668565b92505060206136e98582860161369e565b9150509250929050565b60008115159050919050565b613708816136f3565b82525050565b600060208201905061372360008301846136ff565b92915050565b6137328161367d565b82525050565b600060208201905061374d6000830184613729565b92915050565b60006020828403121561376957613768613615565b5b60006137778482850161369e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6137bd8261359f565b810181811067ffffffffffffffff821117156137dc576137db613785565b5b80604052505050565b60006137ef61360b565b90506137fb82826137b4565b919050565b600067ffffffffffffffff82111561381b5761381a613785565b5b602082029050602081019050919050565b600080fd5b600061384461383f84613800565b6137e5565b905080838252602082019050602084028301858111156138675761386661382c565b5b835b81811015613890578061387c8882613668565b845260208401935050602081019050613869565b5050509392505050565b600082601f8301126138af576138ae613780565b5b81356138bf848260208601613831565b91505092915050565b6000602082840312156138de576138dd613615565b5b600082013567ffffffffffffffff8111156138fc576138fb61361a565b5b6139088482850161389a565b91505092915050565b6000819050919050565b600061393661393161392c8461361f565b613911565b61361f565b9050919050565b60006139488261391b565b9050919050565b600061395a8261393d565b9050919050565b61396a8161394f565b82525050565b60006020820190506139856000830184613961565b92915050565b6000602082840312156139a1576139a0613615565b5b60006139af84828501613668565b91505092915050565b6000806000606084860312156139d1576139d0613615565b5b60006139df86828701613668565b93505060206139f086828701613668565b9250506040613a018682870161369e565b9150509250925092565b600060ff82169050919050565b613a2181613a0b565b82525050565b6000602082019050613a3c6000830184613a18565b92915050565b613a4b8161363f565b82525050565b6000602082019050613a666000830184613a42565b92915050565b60008060408385031215613a8357613a82613615565b5b6000613a918582860161369e565b9250506020613aa28582860161369e565b9150509250929050565b613ab5816136f3565b8114613ac057600080fd5b50565b600081359050613ad281613aac565b92915050565b60008060408385031215613aef57613aee613615565b5b6000613afd85828601613668565b9250506020613b0e85828601613ac3565b9150509250929050565b600080600060608486031215613b3157613b30613615565b5b6000613b3f8682870161369e565b9350506020613b508682870161369e565b9250506040613b618682870161369e565b9150509250925092565b600060208284031215613b8157613b80613615565b5b6000613b8f84828501613ac3565b91505092915050565b60008060408385031215613baf57613bae613615565b5b6000613bbd85828601613668565b9250506020613bce85828601613668565b9150509250929050565b6000613be38261361f565b9050919050565b613bf381613bd8565b8114613bfe57600080fd5b50565b600081359050613c1081613bea565b92915050565b60008060408385031215613c2d57613c2c613615565b5b6000613c3b85828601613c01565b9250506020613c4c85828601613c01565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c9d57607f821691505b602082108103613cb057613caf613c56565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cec602083613564565b9150613cf782613cb6565b602082019050919050565b60006020820190508181036000830152613d1b81613cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8b82613a0b565b915060ff8203613d9e57613d9d613d51565b5b600182019050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b6000613ddf600d83613564565b9150613dea82613da9565b602082019050919050565b60006020820190508181036000830152613e0e81613dd2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613e71602883613564565b9150613e7c82613e15565b604082019050919050565b60006020820190508181036000830152613ea081613e64565b9050919050565b6000613eb28261367d565b9150613ebd8361367d565b9250828201905080821115613ed557613ed4613d51565b5b92915050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000613f11600c83613564565b9150613f1c82613edb565b602082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f54686520726f7574657220616c7265616479206861732074686174206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602383613564565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b6000604082019050613fee6000830185613729565b613ffb6020830184613729565b9392505050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000614084604583613564565b915061408f82614002565b606082019050919050565b600060208201905081810360008301526140b381614077565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614116602583613564565b9150614121826140ba565b604082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006141a8602a83613564565b91506141b38261414c565b604082019050919050565b600060208201905081810360008301526141d78161419b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061423a602683613564565b9150614245826141de565b604082019050919050565b600060208201905081810360008301526142698161422d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602483613564565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061435e602283613564565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143ce8261367d565b91506143d98361367d565b9250826143e9576143e8614394565b5b828204905092915050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b600061442a600883613564565b9150614435826143f4565b602082019050919050565b600060208201905081810360008301526144598161441d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602583613564565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061454e602383613564565b9150614559826144f2565b604082019050919050565b6000602082019050818103600083015261457d81614541565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b60006145ba601383613564565b91506145c582614584565b602082019050919050565b600060208201905081810360008301526145e9816145ad565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061464c602c83613564565b9150614657826145f0565b604082019050919050565b6000602082019050818103600083015261467b8161463f565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b60006146de602483613564565b91506146e982614682565b604082019050919050565b6000602082019050818103600083015261470d816146d1565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614770603883613564565b915061477b82614714565b604082019050919050565b6000602082019050818103600083015261479f81614763565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614802602683613564565b915061480d826147a6565b604082019050919050565b60006020820190508181036000830152614831816147f5565b9050919050565b600060608201905061484d6000830186613729565b61485a6020830185613729565b6148676040830184613729565b949350505050565b600061487a8261367d565b91506148858361367d565b925082820390508181111561489d5761489c613d51565b5b92915050565b60006148ae8261367d565b91506148b98361367d565b92508282026148c78161367d565b915082820484148315176148de576148dd613d51565b5b5092915050565b6000815190506148f481613651565b92915050565b6000602082840312156149105761490f613615565b5b600061491e848285016148e5565b91505092915050565b6000819050919050565b600061494c61494761494284614927565b613911565b61367d565b9050919050565b61495c81614931565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149978161363f565b82525050565b60006149a9838361498e565b60208301905092915050565b6000602082019050919050565b60006149cd82614962565b6149d7818561496d565b93506149e28361497e565b8060005b83811015614a135781516149fa888261499d565b9750614a05836149b5565b9250506001810190506149e6565b5085935050505092915050565b600060a082019050614a356000830188613729565b614a426020830187614953565b8181036040830152614a5481866149c2565b9050614a636060830185613a42565b614a706080830184613729565b9695505050505050565b600060c082019050614a8f6000830189613a42565b614a9c6020830188613729565b614aa96040830187614953565b614ab66060830186614953565b614ac36080830185613a42565b614ad060a0830184613729565b979650505050505050565b600081519050614aea81613687565b92915050565b600080600060608486031215614b0957614b08613615565b5b6000614b1786828701614adb565b9350506020614b2886828701614adb565b9250506040614b3986828701614adb565b915050925092509256fea26469706673582212202ed315ef0ed28c18b68187dc039e3d9d66554a509714195ffeae4cdb4a16edd264736f6c63430008110033

Deployed Bytecode Sourcemap

38552:12199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9037:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49964:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38357:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38638:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7990:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38823:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39117:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49445:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9688:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7832:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10589:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37937:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38686:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39754:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39372:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50092:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48609:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47716:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8161:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1879:94;;;;;;;;;;;;;:::i;:::-;;39280:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39639:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39335:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1228:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50408:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7089:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48031:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11307:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48831:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8501:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49126:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38733:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49666:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39409:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50229:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38878:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39066:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8739:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38944:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39004:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39222:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49254:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38277:72;;;;;;;;;;;;;:::i;:::-;;6870:100;6924:13;6957:5;6950:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6870:100;:::o;9037:169::-;9120:4;9137:39;9146:12;:10;:12::i;:::-;9160:7;9169:6;9137:8;:39::i;:::-;9194:4;9187:11;;9037:169;;;;:::o;39168:35::-;;;;:::o;49964:116::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50064:8:::1;50043:18;:29;;;;49964:116:::0;:::o;38357:186::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38444:7:::1;38440:96;38461:6;:13;38457:1;:17;;;38440:96;;;38520:4;38496:10;:21;38507:6;38514:1;38507:9;;;;;;;;;;:::i;:::-;;;;;;;;38496:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;38476:3;;;;;:::i;:::-;;;;38440:96;;;;38357:186:::0;:::o;38638:41::-;;;;;;;;;;;;;:::o;7990:108::-;8051:7;8078:12;;8071:19;;7990:108;:::o;38823:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;39117:29::-;;;;:::o;49445:209::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49551:12:::1;49528:20;:35;;;;49606:22;49624:3;49606:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;49582:20;;:46;;49574:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49445:209:::0;:::o;9688:492::-;9828:4;9845:36;9855:6;9863:9;9874:6;9845:9;:36::i;:::-;9894:24;9921:11;:19;9933:6;9921:19;;;;;;;;;;;;;;;:33;9941:12;:10;:12::i;:::-;9921:33;;;;;;;;;;;;;;;;9894:60;;9993:6;9973:16;:26;;9965:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10080:57;10089:6;10097:12;:10;:12::i;:::-;10130:6;10111:16;:25;10080:8;:57::i;:::-;10168:4;10161:11;;;9688:492;;;;;:::o;7832:93::-;7890:5;7915:2;7908:9;;7832:93;:::o;10589:215::-;10677:4;10694:80;10703:12;:10;:12::i;:::-;10717:7;10763:10;10726:11;:25;10738:12;:10;:12::i;:::-;10726:25;;;;;;;;;;;;;;;:34;10752:7;10726:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10694:8;:80::i;:::-;10792:4;10785:11;;10589:215;;;;:::o;37937:26::-;;;;;;;;;;;;;:::o;38686:38::-;;;:::o;39754:40::-;;;;;;;;;;;;;:::o;39372:30::-;;;;:::o;50092:125::-;50157:4;50181:19;:28;50201:7;50181:28;;;;;;;;;;;;;;;;;;;;;;;;;50174:35;;50092:125;;;:::o;48609:214::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48729:1:::1;48704:21;48716:8;48704:7;:11;;:21;;;;:::i;:::-;:26;;48696:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48776:7;48758:15;:25;;;;48807:8;48794:10;:21;;;;48609:214:::0;;:::o;47716:307::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47825:15:::1;;;;;;;;;;;47803:38;;:10;:38;;::::0;47795:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47939:15;;;;;;;;;;;47897:59;;47919:10;47897:59;;;;;;;;;;;;48004:10;47967:15;;:48;;;;;;;;;;;;;;;;;;47716:307:::0;:::o;8161:127::-;8235:7;8262:9;:18;8272:7;8262:18;;;;;;;;;;;;;;;;8255:25;;8161:127;;;:::o;1879:94::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1944:21:::1;1962:1;1944:9;:21::i;:::-;1879:94::o:0;39280:30::-;;;;:::o;39639:70::-;;;;;;;;;;;;;:::o;39335:30::-;;;;:::o;1228:87::-;1274:7;1301:6;;;;;;;;;;;1294:13;;1228:87;:::o;50408:290::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50484:17:::1;50504:14;;50484:34;;50545:9;50528:14;:26;;;;50591:22;50609:3;50591:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;50573:14;;:40;;50565:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50647:44;50670:9;50681;50647:44;;;;;;;:::i;:::-;;;;;;;;50473:225;50408:290:::0;:::o;7089:104::-;7145:13;7178:7;7171:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7089:104;:::o;48031:254::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48138:13:::1;48130:21;;:4;:21;;::::0;48122:103:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;48236:41;48265:4;48271:5;48236:28;:41::i;:::-;48031:254:::0;;:::o;11307:413::-;11400:4;11417:24;11444:11;:25;11456:12;:10;:12::i;:::-;11444:25;;;;;;;;;;;;;;;:34;11470:7;11444:34;;;;;;;;;;;;;;;;11417:61;;11517:15;11497:16;:35;;11489:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11610:67;11619:12;:10;:12::i;:::-;11633:7;11661:15;11642:16;:34;11610:8;:67::i;:::-;11708:4;11701:11;;;11307:413;;;;:::o;48831:287::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48984:1:::1;48945:35;48971:8;48945:21;48957:8;48945:7;:11;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;:40;;48937:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49032:7;49013:16;:26;;;;49069:8;49050:16;:27;;;;49102:8;49088:11;:22;;;;48831:287:::0;;;:::o;8501:175::-;8587:4;8604:42;8614:12;:10;:12::i;:::-;8628:9;8639:6;8604:9;:42::i;:::-;8664:4;8657:11;;8501:175;;;;:::o;49126:120::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49233:5:::1;49207:14;:23;49222:7;49207:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49126:120:::0;;:::o;38733:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;49666:290::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49791:8:::1;49759:40;;:19;:28;49779:7;49759:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;49751:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;49888:8;49857:19;:28;49877:7;49857:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;49930:7;49914:34;;;49939:8;49914:34;;;;;;:::i;:::-;;;;;;;;49666:290:::0;;:::o;39409:25::-;;;;:::o;50229:171::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50330:8:::1;50306:21;;:32;;;;;;;;;;;;;;;;;;50354:38;50383:8;50354:38;;;;;;:::i;:::-;;;;;;;;50229:171:::0;:::o;38878:59::-;;;;:::o;39066:34::-;;;;:::o;8739:151::-;8828:7;8855:11;:18;8867:5;8855:18;;;;;;;;;;;;;;;:27;8874:7;8855:27;;;;;;;;;;;;;;;;8848:34;;8739:151;;;;:::o;38944:53::-;;;;:::o;39004:50::-;;;;:::o;39222:35::-;;;;:::o;49254:183::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49383:11:::1;49365:15;;:29;;;;;;;;;;;;;;;;;;49418:11;49405:10;;:24;;;;;;;;;;;;;;;;;;49254:183:::0;;:::o;2128:192::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:1:::1;2217:22;;:8;:22;;::::0;2209:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:19;2303:8;2293:9;:19::i;:::-;2128:192:::0;:::o;38277:72::-;1459:12;:10;:12::i;:::-;1448:23;;:7;:5;:7::i;:::-;:23;;;1440:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38337:4:::1;38328:6;;:13;;;;;;;;;;;;;;;;;;38277:72::o:0;102:98::-;155:7;182:10;175:17;;102:98;:::o;14080:380::-;14233:1;14216:19;;:5;:19;;;14208:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14314:1;14295:21;;:7;:21;;;14287:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14398:6;14368:11;:18;14380:5;14368:18;;;;;;;;;;;;;;;:27;14387:7;14368:27;;;;;;;;;;;;;;;:36;;;;14436:7;14420:32;;14429:5;14420:32;;;14445:6;14420:32;;;;;;:::i;:::-;;;;;;;;14080:380;;;:::o;26931:98::-;26989:7;27020:1;27016;:5;;;;:::i;:::-;27009:12;;26931:98;;;;:::o;41629:3210::-;41729:4;41735:2;38079:6;;;;;;;;;;;:26;;;;38089:10;:16;38100:4;38089:16;;;;;;;;;;;;;;;;;;;;;;;;;38079:26;:44;;;;38109:10;:14;38120:2;38109:14;;;;;;;;;;;;;;;;;;;;;;;;;38079:44;38071:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41792:1:::1;41776:18;;:4;:18;;::::0;41768:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41869:1;41855:16;;:2;:16;;::::0;41847:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41931:14;:20;41946:4;41931:20;;;;;;;;;;;;;;;;;;;;;;;;;41930:21;:44;;;;;41956:14;:18;41971:2;41956:18;;;;;;;;;;;;;;;;;;;;;;;;;41955:19;41930:44;41922:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;42024:1;42014:6;:11:::0;42011:92:::1;;42042:28;42058:4;42064:2;42068:1;42042:15;:28::i;:::-;42085:7;;42011:92;42119:19;:25;42139:4;42119:25;;;;;;;;;;;;;;;;;;;;;;;;;42118:26;:54;;;;;42149:19;:23;42169:2;42149:23;;;;;;;;;;;;;;;;;;;;;;;;;42148:24;42118:54;42115:172;;;42206:20;;42196:6;:30;;42188:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42115:172;42303:25;:31;42329:4;42303:31;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;42339:19;:25;42359:4;42339:25;;;;;;;;;;;;;;;;;;;;;;;;;42338:26;42303:61;:89;;;;;42369:19;:23;42389:2;42369:23;;;;;;;;;;;;;;;;;;;;;;;;;42368:24;42303:89;42299:285;;;42409:32;42444:13;42454:2;42444:9;:13::i;:::-;42409:48;;42517:14;;42507:6;42480:24;:33;;;;:::i;:::-;:51;;42472:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42394:190;42299:285;42613:16;;;;;;;;;;;42612:17;:50;;;;;42633:25;:29;42659:2;42633:29;;;;;;;;;;;;;;;;;;;;;;;;;42612:50;:89;;;;;42680:21;;;;;;;;;;;42612:89;:249;;;;;42739:18;;42720:15;;:37;;:91;;;;42793:18;;42774:15;;:37;;42720:91;:140;;;;42842:18;;42828:10;;:32;;42720:140;42612:249;42609:316;;;42897:16;:14;:16::i;:::-;42609:316;43042:19;:25;43062:4;43042:25;;;;;;;;;;;;;;;;;;;;;;;;;43041:26;:54;;;;;43072:19;:23;43092:2;43072:23;;;;;;;;;;;;;;;;;;;;;;;;;43071:24;43041:54;43038:1746;;;43112:22;43149::::0;43186:17:::1;43218::::0;43267:25:::1;:31;43293:4;43267:31;;;;;;;;;;;;;;;;;;;;;;;;;43264:582;;;43353:1;43340:10;;:14;43337:221;;;43391:31;43418:3;43391:22;43402:10;;43391:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;43379:43;;43459:9;43445:10;;:23;;;;;;;:::i;:::-;;;;;;;;43491:47;43507:4;43521;43528:9;43491:15;:47::i;:::-;43337:221;43599:1;43581:15;;:19;43578:251;;;43642:36;43674:3;43642:27;43653:15;;43642:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;43625:53;;43720:14;43701:15;;:33;;;;;;;:::i;:::-;;;;;;;;43757:52;43773:4;43787;43794:14;43757:15;:52::i;:::-;43578:251;43264:582;43865:25;:29;43891:2;43865:29;;;;;;;;;;;;;;;;;;;;;;;;;43862:807;;;43954:1;43935:16;;:20;43932:253;;;43997:37;44030:3;43997:28;44008:16;;43997:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;43980:54;;44076:14;44057:15;;:33;;;;;;;:::i;:::-;;;;;;;;44113:52;44129:4;44143;44150:14;44113:15;:52::i;:::-;43932:253;44227:1;44208:16;;:20;44205:253;;;44270:37;44303:3;44270:28;44281:16;;44270:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;44253:54;;44349:14;44330:15;;:33;;;;;;;:::i;:::-;;;;;;;;44386:52;44402:4;44416;44423:14;44386:15;:52::i;:::-;44205:253;44495:1;44481:11;;:15;44478:174;;;44533:32;44561:3;44533:23;44544:11;;44533:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44521:44;;44588;44604:4;44610:10;;;;;;;;;;;44622:9;44588:15;:44::i;:::-;44478:174;43862:807;44694:76;44705:64;44759:9;44705:49;44744:9;44705:34;44724:14;44705;:18;;:34;;;;:::i;:::-;:38;;:49;;;;:::i;:::-;:53;;:64;;;;:::i;:::-;44694:6;:10;;:76;;;;:::i;:::-;44685:85;;43097:1687;;;;43038:1746;44796:33;44812:4;44818:2;44822:6;44796:15;:33::i;:::-;38147:1;41629:3210:::0;;;;;:::o;25794:98::-;25852:7;25883:1;25879;:5;;;;:::i;:::-;25872:12;;25794:98;;;;:::o;2328:173::-;2384:16;2403:6;;;;;;;;;;;2384:25;;2429:8;2420:6;;:17;;;;;;;;;;;;;;;;;;2484:8;2453:40;;2474:8;2453:40;;;;;;;;;;;;2373:128;2328:173;:::o;48293:306::-;48419:5;48384:40;;:25;:31;48410:4;48384:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;48376:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;48530:5;48496:25;:31;48522:4;48496:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;48585:5;48551:40;;48579:4;48551:40;;;;;;;;;;;;48293:306;;:::o;12210:733::-;12368:1;12350:20;;:6;:20;;;12342:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12452:1;12431:23;;:9;:23;;;12423:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12507:47;12528:6;12536:9;12547:6;12507:20;:47::i;:::-;12567:21;12591:9;:17;12601:6;12591:17;;;;;;;;;;;;;;;;12567:41;;12644:6;12627:13;:23;;12619:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12765:6;12749:13;:22;12729:9;:17;12739:6;12729:17;;;;;;;;;;;;;;;:42;;;;12817:6;12793:9;:20;12803:9;12793:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12858:9;12841:35;;12850:6;12841:35;;;12869:6;12841:35;;;;;;:::i;:::-;;;;;;;;12889:46;12909:6;12917:9;12928:6;12889:19;:46::i;:::-;12331:612;12210:733;;;:::o;44847:1637::-;40458:4;40439:16;;:23;;;;;;;;;;;;;;;;;;44904:28:::1;44935:24;44953:4;44935:9;:24::i;:::-;44904:55;;44992:18;;44973:15;;:37;;:83;;;;;45038:18;;45014:20;:42;;44973:83;44970:1046;;;45128:12;45143:25;45166:1;45143:18;;:22;;:25;;;;:::i;:::-;45128:40;;45183:17;45203:28;45226:4;45203:18;;:22;;:28;;;;:::i;:::-;45183:48;;45529:22;45554:21;45529:46;;45628:37;45645:4;45659;45628:16;:37::i;:::-;45734:18;45755:41;45781:14;45755:21;:25;;:41;;;;:::i;:::-;45734:62;;45854:35;45867:9;45878:10;45854:12;:35::i;:::-;45909:43;45924:4;45930:10;45942:9;45909:43;;;;;;;;:::i;:::-;;;;;;;;45986:18;;45967:15;;:37;;;;;;;:::i;:::-;;;;;;;;45058:958;;;;44970:1046;46050:18;;46031:15;;:37;;:83;;;;;46096:18;;46072:20;:42;;46031:83;46028:220;;;46131:53;46148:18;;46168:15;;;;;;;;;;;46131:16;:53::i;:::-;46218:18;;46199:15;;:37;;;;;;;:::i;:::-;;;;;;;;46028:220;46277:18;;46263:10;;:32;;:78;;;;;46323:18;;46299:20;:42;;46263:78;46260:205;;;46358:48;46375:18;;46395:10;;;;;;;;;;;46358:16;:48::i;:::-;46435:18;;46421:10;;:32;;;;;;;:::i;:::-;;;;;;;;46260:205;44893:1591;40504:5:::0;40485:16;;:24;;;;;;;;;;;;;;;;;;44847:1637::o;26532:98::-;26590:7;26621:1;26617;:5;;;;:::i;:::-;26610:12;;26532:98;;;;:::o;26175:::-;26233:7;26264:1;26260;:5;;;;:::i;:::-;26253:12;;26175:98;;;;:::o;15060:125::-;;;;:::o;15789:124::-;;;;:::o;47013:695::-;47152:21;47190:1;47176:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47152:40;;47221:4;47203;47208:1;47203:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47247:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47237:4;47242:1;47237:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47338:11;47285:50;47303:4;47318:15;;;;;;;;;;;47285:9;:50::i;:::-;:64;47282:156;;;47364:62;47381:4;47396:15;;;;;;;;;;;47423:1;47414:11;47364:8;:62::i;:::-;47282:156;47476:15;;;;;;;;;;;:66;;;47557:11;47583:1;47627:4;47646:3;47664:15;47476:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47081:627;47013:695;;:::o;46492:513::-;46640:62;46657:4;46672:15;;;;;;;;;;;46690:11;46640:8;:62::i;:::-;46745:15;;;;;;;;;;;:31;;;46784:9;46817:4;46837:11;46863:1;46906;46949:7;:5;:7::i;:::-;46971:15;46745:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46492:513;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:117::-;4242:1;4239;4232:12;4256:180;4304:77;4301:1;4294:88;4401:4;4398:1;4391:15;4425:4;4422:1;4415:15;4442:281;4525:27;4547:4;4525:27;:::i;:::-;4517:6;4513:40;4655:6;4643:10;4640:22;4619:18;4607:10;4604:34;4601:62;4598:88;;;4666:18;;:::i;:::-;4598:88;4706:10;4702:2;4695:22;4485:238;4442:281;;:::o;4729:129::-;4763:6;4790:20;;:::i;:::-;4780:30;;4819:33;4847:4;4839:6;4819:33;:::i;:::-;4729:129;;;:::o;4864:311::-;4941:4;5031:18;5023:6;5020:30;5017:56;;;5053:18;;:::i;:::-;5017:56;5103:4;5095:6;5091:17;5083:25;;5163:4;5157;5153:15;5145:23;;4864:311;;;:::o;5181:117::-;5290:1;5287;5280:12;5321:710;5417:5;5442:81;5458:64;5515:6;5458:64;:::i;:::-;5442:81;:::i;:::-;5433:90;;5543:5;5572:6;5565:5;5558:21;5606:4;5599:5;5595:16;5588:23;;5659:4;5651:6;5647:17;5639:6;5635:30;5688:3;5680:6;5677:15;5674:122;;;5707:79;;:::i;:::-;5674:122;5822:6;5805:220;5839:6;5834:3;5831:15;5805:220;;;5914:3;5943:37;5976:3;5964:10;5943:37;:::i;:::-;5938:3;5931:50;6010:4;6005:3;6001:14;5994:21;;5881:144;5865:4;5860:3;5856:14;5849:21;;5805:220;;;5809:21;5423:608;;5321:710;;;;;:::o;6054:370::-;6125:5;6174:3;6167:4;6159:6;6155:17;6151:27;6141:122;;6182:79;;:::i;:::-;6141:122;6299:6;6286:20;6324:94;6414:3;6406:6;6399:4;6391:6;6387:17;6324:94;:::i;:::-;6315:103;;6131:293;6054:370;;;;:::o;6430:539::-;6514:6;6563:2;6551:9;6542:7;6538:23;6534:32;6531:119;;;6569:79;;:::i;:::-;6531:119;6717:1;6706:9;6702:17;6689:31;6747:18;6739:6;6736:30;6733:117;;;6769:79;;:::i;:::-;6733:117;6874:78;6944:7;6935:6;6924:9;6920:22;6874:78;:::i;:::-;6864:88;;6660:302;6430:539;;;;:::o;6975:60::-;7003:3;7024:5;7017:12;;6975:60;;;:::o;7041:142::-;7091:9;7124:53;7142:34;7151:24;7169:5;7151:24;:::i;:::-;7142:34;:::i;:::-;7124:53;:::i;:::-;7111:66;;7041:142;;;:::o;7189:126::-;7239:9;7272:37;7303:5;7272:37;:::i;:::-;7259:50;;7189:126;;;:::o;7321:153::-;7398:9;7431:37;7462:5;7431:37;:::i;:::-;7418:50;;7321:153;;;:::o;7480:185::-;7594:64;7652:5;7594:64;:::i;:::-;7589:3;7582:77;7480:185;;:::o;7671:276::-;7791:4;7829:2;7818:9;7814:18;7806:26;;7842:98;7937:1;7926:9;7922:17;7913:6;7842:98;:::i;:::-;7671:276;;;;:::o;7953:329::-;8012:6;8061:2;8049:9;8040:7;8036:23;8032:32;8029:119;;;8067:79;;:::i;:::-;8029:119;8187:1;8212:53;8257:7;8248:6;8237:9;8233:22;8212:53;:::i;:::-;8202:63;;8158:117;7953:329;;;;:::o;8288:619::-;8365:6;8373;8381;8430:2;8418:9;8409:7;8405:23;8401:32;8398:119;;;8436:79;;:::i;:::-;8398:119;8556:1;8581:53;8626:7;8617:6;8606:9;8602:22;8581:53;:::i;:::-;8571:63;;8527:117;8683:2;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8654:118;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8288:619;;;;;:::o;8913:86::-;8948:7;8988:4;8981:5;8977:16;8966:27;;8913:86;;;:::o;9005:112::-;9088:22;9104:5;9088:22;:::i;:::-;9083:3;9076:35;9005:112;;:::o;9123:214::-;9212:4;9250:2;9239:9;9235:18;9227:26;;9263:67;9327:1;9316:9;9312:17;9303:6;9263:67;:::i;:::-;9123:214;;;;:::o;9343:118::-;9430:24;9448:5;9430:24;:::i;:::-;9425:3;9418:37;9343:118;;:::o;9467:222::-;9560:4;9598:2;9587:9;9583:18;9575:26;;9611:71;9679:1;9668:9;9664:17;9655:6;9611:71;:::i;:::-;9467:222;;;;:::o;9695:474::-;9763:6;9771;9820:2;9808:9;9799:7;9795:23;9791:32;9788:119;;;9826:79;;:::i;:::-;9788:119;9946:1;9971:53;10016:7;10007:6;9996:9;9992:22;9971:53;:::i;:::-;9961:63;;9917:117;10073:2;10099:53;10144:7;10135:6;10124:9;10120:22;10099:53;:::i;:::-;10089:63;;10044:118;9695:474;;;;;:::o;10175:116::-;10245:21;10260:5;10245:21;:::i;:::-;10238:5;10235:32;10225:60;;10281:1;10278;10271:12;10225:60;10175:116;:::o;10297:133::-;10340:5;10378:6;10365:20;10356:29;;10394:30;10418:5;10394:30;:::i;:::-;10297:133;;;;:::o;10436:468::-;10501:6;10509;10558:2;10546:9;10537:7;10533:23;10529:32;10526:119;;;10564:79;;:::i;:::-;10526:119;10684:1;10709:53;10754:7;10745:6;10734:9;10730:22;10709:53;:::i;:::-;10699:63;;10655:117;10811:2;10837:50;10879:7;10870:6;10859:9;10855:22;10837:50;:::i;:::-;10827:60;;10782:115;10436:468;;;;;:::o;10910:619::-;10987:6;10995;11003;11052:2;11040:9;11031:7;11027:23;11023:32;11020:119;;;11058:79;;:::i;:::-;11020:119;11178:1;11203:53;11248:7;11239:6;11228:9;11224:22;11203:53;:::i;:::-;11193:63;;11149:117;11305:2;11331:53;11376:7;11367:6;11356:9;11352:22;11331:53;:::i;:::-;11321:63;;11276:118;11433:2;11459:53;11504:7;11495:6;11484:9;11480:22;11459:53;:::i;:::-;11449:63;;11404:118;10910:619;;;;;:::o;11535:323::-;11591:6;11640:2;11628:9;11619:7;11615:23;11611:32;11608:119;;;11646:79;;:::i;:::-;11608:119;11766:1;11791:50;11833:7;11824:6;11813:9;11809:22;11791:50;:::i;:::-;11781:60;;11737:114;11535:323;;;;:::o;11864:474::-;11932:6;11940;11989:2;11977:9;11968:7;11964:23;11960:32;11957:119;;;11995:79;;:::i;:::-;11957:119;12115:1;12140:53;12185:7;12176:6;12165:9;12161:22;12140:53;:::i;:::-;12130:63;;12086:117;12242:2;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12213:118;11864:474;;;;;:::o;12344:104::-;12389:7;12418:24;12436:5;12418:24;:::i;:::-;12407:35;;12344:104;;;:::o;12454:138::-;12535:32;12561:5;12535:32;:::i;:::-;12528:5;12525:43;12515:71;;12582:1;12579;12572:12;12515:71;12454:138;:::o;12598:155::-;12652:5;12690:6;12677:20;12668:29;;12706:41;12741:5;12706:41;:::i;:::-;12598:155;;;;:::o;12759:506::-;12843:6;12851;12900:2;12888:9;12879:7;12875:23;12871:32;12868:119;;;12906:79;;:::i;:::-;12868:119;13026:1;13051:61;13104:7;13095:6;13084:9;13080:22;13051:61;:::i;:::-;13041:71;;12997:125;13161:2;13187:61;13240:7;13231:6;13220:9;13216:22;13187:61;:::i;:::-;13177:71;;13132:126;12759:506;;;;;:::o;13271:180::-;13319:77;13316:1;13309:88;13416:4;13413:1;13406:15;13440:4;13437:1;13430:15;13457:320;13501:6;13538:1;13532:4;13528:12;13518:22;;13585:1;13579:4;13575:12;13606:18;13596:81;;13662:4;13654:6;13650:17;13640:27;;13596:81;13724:2;13716:6;13713:14;13693:18;13690:38;13687:84;;13743:18;;:::i;:::-;13687:84;13508:269;13457:320;;;:::o;13783:182::-;13923:34;13919:1;13911:6;13907:14;13900:58;13783:182;:::o;13971:366::-;14113:3;14134:67;14198:2;14193:3;14134:67;:::i;:::-;14127:74;;14210:93;14299:3;14210:93;:::i;:::-;14328:2;14323:3;14319:12;14312:19;;13971:366;;;:::o;14343:419::-;14509:4;14547:2;14536:9;14532:18;14524:26;;14596:9;14590:4;14586:20;14582:1;14571:9;14567:17;14560:47;14624:131;14750:4;14624:131;:::i;:::-;14616:139;;14343:419;;;:::o;14768:180::-;14816:77;14813:1;14806:88;14913:4;14910:1;14903:15;14937:4;14934:1;14927:15;14954:180;15002:77;14999:1;14992:88;15099:4;15096:1;15089:15;15123:4;15120:1;15113:15;15140:167;15177:3;15200:22;15216:5;15200:22;:::i;:::-;15191:31;;15244:4;15237:5;15234:15;15231:41;;15252:18;;:::i;:::-;15231:41;15299:1;15292:5;15288:13;15281:20;;15140:167;;;:::o;15313:163::-;15453:15;15449:1;15441:6;15437:14;15430:39;15313:163;:::o;15482:366::-;15624:3;15645:67;15709:2;15704:3;15645:67;:::i;:::-;15638:74;;15721:93;15810:3;15721:93;:::i;:::-;15839:2;15834:3;15830:12;15823:19;;15482:366;;;:::o;15854:419::-;16020:4;16058:2;16047:9;16043:18;16035:26;;16107:9;16101:4;16097:20;16093:1;16082:9;16078:17;16071:47;16135:131;16261:4;16135:131;:::i;:::-;16127:139;;15854:419;;;:::o;16279:227::-;16419:34;16415:1;16407:6;16403:14;16396:58;16488:10;16483:2;16475:6;16471:15;16464:35;16279:227;:::o;16512:366::-;16654:3;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16751:93;16840:3;16751:93;:::i;:::-;16869:2;16864:3;16860:12;16853:19;;16512:366;;;:::o;16884:419::-;17050:4;17088:2;17077:9;17073:18;17065:26;;17137:9;17131:4;17127:20;17123:1;17112:9;17108:17;17101:47;17165:131;17291:4;17165:131;:::i;:::-;17157:139;;16884:419;;;:::o;17309:191::-;17349:3;17368:20;17386:1;17368:20;:::i;:::-;17363:25;;17402:20;17420:1;17402:20;:::i;:::-;17397:25;;17445:1;17442;17438:9;17431:16;;17466:3;17463:1;17460:10;17457:36;;;17473:18;;:::i;:::-;17457:36;17309:191;;;;:::o;17506:162::-;17646:14;17642:1;17634:6;17630:14;17623:38;17506:162;:::o;17674:366::-;17816:3;17837:67;17901:2;17896:3;17837:67;:::i;:::-;17830:74;;17913:93;18002:3;17913:93;:::i;:::-;18031:2;18026:3;18022:12;18015:19;;17674:366;;;:::o;18046:419::-;18212:4;18250:2;18239:9;18235:18;18227:26;;18299:9;18293:4;18289:20;18285:1;18274:9;18270:17;18263:47;18327:131;18453:4;18327:131;:::i;:::-;18319:139;;18046:419;;;:::o;18471:222::-;18611:34;18607:1;18599:6;18595:14;18588:58;18680:5;18675:2;18667:6;18663:15;18656:30;18471:222;:::o;18699:366::-;18841:3;18862:67;18926:2;18921:3;18862:67;:::i;:::-;18855:74;;18938:93;19027:3;18938:93;:::i;:::-;19056:2;19051:3;19047:12;19040:19;;18699:366;;;:::o;19071:419::-;19237:4;19275:2;19264:9;19260:18;19252:26;;19324:9;19318:4;19314:20;19310:1;19299:9;19295:17;19288:47;19352:131;19478:4;19352:131;:::i;:::-;19344:139;;19071:419;;;:::o;19496:332::-;19617:4;19655:2;19644:9;19640:18;19632:26;;19668:71;19736:1;19725:9;19721:17;19712:6;19668:71;:::i;:::-;19749:72;19817:2;19806:9;19802:18;19793:6;19749:72;:::i;:::-;19496:332;;;;;:::o;19834:293::-;19974:34;19970:1;19962:6;19958:14;19951:58;20043:34;20038:2;20030:6;20026:15;20019:59;20112:7;20107:2;20099:6;20095:15;20088:32;19834:293;:::o;20133:366::-;20275:3;20296:67;20360:2;20355:3;20296:67;:::i;:::-;20289:74;;20372:93;20461:3;20372:93;:::i;:::-;20490:2;20485:3;20481:12;20474:19;;20133:366;;;:::o;20505:419::-;20671:4;20709:2;20698:9;20694:18;20686:26;;20758:9;20752:4;20748:20;20744:1;20733:9;20729:17;20722:47;20786:131;20912:4;20786:131;:::i;:::-;20778:139;;20505:419;;;:::o;20930:224::-;21070:34;21066:1;21058:6;21054:14;21047:58;21139:7;21134:2;21126:6;21122:15;21115:32;20930:224;:::o;21160:366::-;21302:3;21323:67;21387:2;21382:3;21323:67;:::i;:::-;21316:74;;21399:93;21488:3;21399:93;:::i;:::-;21517:2;21512:3;21508:12;21501:19;;21160:366;;;:::o;21532:419::-;21698:4;21736:2;21725:9;21721:18;21713:26;;21785:9;21779:4;21775:20;21771:1;21760:9;21756:17;21749:47;21813:131;21939:4;21813:131;:::i;:::-;21805:139;;21532:419;;;:::o;21957:229::-;22097:34;22093:1;22085:6;22081:14;22074:58;22166:12;22161:2;22153:6;22149:15;22142:37;21957:229;:::o;22192:366::-;22334:3;22355:67;22419:2;22414:3;22355:67;:::i;:::-;22348:74;;22431:93;22520:3;22431:93;:::i;:::-;22549:2;22544:3;22540:12;22533:19;;22192:366;;;:::o;22564:419::-;22730:4;22768:2;22757:9;22753:18;22745:26;;22817:9;22811:4;22807:20;22803:1;22792:9;22788:17;22781:47;22845:131;22971:4;22845:131;:::i;:::-;22837:139;;22564:419;;;:::o;22989:225::-;23129:34;23125:1;23117:6;23113:14;23106:58;23198:8;23193:2;23185:6;23181:15;23174:33;22989:225;:::o;23220:366::-;23362:3;23383:67;23447:2;23442:3;23383:67;:::i;:::-;23376:74;;23459:93;23548:3;23459:93;:::i;:::-;23577:2;23572:3;23568:12;23561:19;;23220:366;;;:::o;23592:419::-;23758:4;23796:2;23785:9;23781:18;23773:26;;23845:9;23839:4;23835:20;23831:1;23820:9;23816:17;23809:47;23873:131;23999:4;23873:131;:::i;:::-;23865:139;;23592:419;;;:::o;24017:223::-;24157:34;24153:1;24145:6;24141:14;24134:58;24226:6;24221:2;24213:6;24209:15;24202:31;24017:223;:::o;24246:366::-;24388:3;24409:67;24473:2;24468:3;24409:67;:::i;:::-;24402:74;;24485:93;24574:3;24485:93;:::i;:::-;24603:2;24598:3;24594:12;24587:19;;24246:366;;;:::o;24618:419::-;24784:4;24822:2;24811:9;24807:18;24799:26;;24871:9;24865:4;24861:20;24857:1;24846:9;24842:17;24835:47;24899:131;25025:4;24899:131;:::i;:::-;24891:139;;24618:419;;;:::o;25043:221::-;25183:34;25179:1;25171:6;25167:14;25160:58;25252:4;25247:2;25239:6;25235:15;25228:29;25043:221;:::o;25270:366::-;25412:3;25433:67;25497:2;25492:3;25433:67;:::i;:::-;25426:74;;25509:93;25598:3;25509:93;:::i;:::-;25627:2;25622:3;25618:12;25611:19;;25270:366;;;:::o;25642:419::-;25808:4;25846:2;25835:9;25831:18;25823:26;;25895:9;25889:4;25885:20;25881:1;25870:9;25866:17;25859:47;25923:131;26049:4;25923:131;:::i;:::-;25915:139;;25642:419;;;:::o;26067:180::-;26115:77;26112:1;26105:88;26212:4;26209:1;26202:15;26236:4;26233:1;26226:15;26253:185;26293:1;26310:20;26328:1;26310:20;:::i;:::-;26305:25;;26344:20;26362:1;26344:20;:::i;:::-;26339:25;;26383:1;26373:35;;26388:18;;:::i;:::-;26373:35;26430:1;26427;26423:9;26418:14;;26253:185;;;;:::o;26444:158::-;26584:10;26580:1;26572:6;26568:14;26561:34;26444:158;:::o;26608:365::-;26750:3;26771:66;26835:1;26830:3;26771:66;:::i;:::-;26764:73;;26846:93;26935:3;26846:93;:::i;:::-;26964:2;26959:3;26955:12;26948:19;;26608:365;;;:::o;26979:419::-;27145:4;27183:2;27172:9;27168:18;27160:26;;27232:9;27226:4;27222:20;27218:1;27207:9;27203:17;27196:47;27260:131;27386:4;27260:131;:::i;:::-;27252:139;;26979:419;;;:::o;27404:224::-;27544:34;27540:1;27532:6;27528:14;27521:58;27613:7;27608:2;27600:6;27596:15;27589:32;27404:224;:::o;27634:366::-;27776:3;27797:67;27861:2;27856:3;27797:67;:::i;:::-;27790:74;;27873:93;27962:3;27873:93;:::i;:::-;27991:2;27986:3;27982:12;27975:19;;27634:366;;;:::o;28006:419::-;28172:4;28210:2;28199:9;28195:18;28187:26;;28259:9;28253:4;28249:20;28245:1;28234:9;28230:17;28223:47;28287:131;28413:4;28287:131;:::i;:::-;28279:139;;28006:419;;;:::o;28431:222::-;28571:34;28567:1;28559:6;28555:14;28548:58;28640:5;28635:2;28627:6;28623:15;28616:30;28431:222;:::o;28659:366::-;28801:3;28822:67;28886:2;28881:3;28822:67;:::i;:::-;28815:74;;28898:93;28987:3;28898:93;:::i;:::-;29016:2;29011:3;29007:12;29000:19;;28659:366;;;:::o;29031:419::-;29197:4;29235:2;29224:9;29220:18;29212:26;;29284:9;29278:4;29274:20;29270:1;29259:9;29255:17;29248:47;29312:131;29438:4;29312:131;:::i;:::-;29304:139;;29031:419;;;:::o;29456:169::-;29596:21;29592:1;29584:6;29580:14;29573:45;29456:169;:::o;29631:366::-;29773:3;29794:67;29858:2;29853:3;29794:67;:::i;:::-;29787:74;;29870:93;29959:3;29870:93;:::i;:::-;29988:2;29983:3;29979:12;29972:19;;29631:366;;;:::o;30003:419::-;30169:4;30207:2;30196:9;30192:18;30184:26;;30256:9;30250:4;30246:20;30242:1;30231:9;30227:17;30220:47;30284:131;30410:4;30284:131;:::i;:::-;30276:139;;30003:419;;;:::o;30428:231::-;30568:34;30564:1;30556:6;30552:14;30545:58;30637:14;30632:2;30624:6;30620:15;30613:39;30428:231;:::o;30665:366::-;30807:3;30828:67;30892:2;30887:3;30828:67;:::i;:::-;30821:74;;30904:93;30993:3;30904:93;:::i;:::-;31022:2;31017:3;31013:12;31006:19;;30665:366;;;:::o;31037:419::-;31203:4;31241:2;31230:9;31226:18;31218:26;;31290:9;31284:4;31280:20;31276:1;31265:9;31261:17;31254:47;31318:131;31444:4;31318:131;:::i;:::-;31310:139;;31037:419;;;:::o;31462:223::-;31602:34;31598:1;31590:6;31586:14;31579:58;31671:6;31666:2;31658:6;31654:15;31647:31;31462:223;:::o;31691:366::-;31833:3;31854:67;31918:2;31913:3;31854:67;:::i;:::-;31847:74;;31930:93;32019:3;31930:93;:::i;:::-;32048:2;32043:3;32039:12;32032:19;;31691:366;;;:::o;32063:419::-;32229:4;32267:2;32256:9;32252:18;32244:26;;32316:9;32310:4;32306:20;32302:1;32291:9;32287:17;32280:47;32344:131;32470:4;32344:131;:::i;:::-;32336:139;;32063:419;;;:::o;32488:243::-;32628:34;32624:1;32616:6;32612:14;32605:58;32697:26;32692:2;32684:6;32680:15;32673:51;32488:243;:::o;32737:366::-;32879:3;32900:67;32964:2;32959:3;32900:67;:::i;:::-;32893:74;;32976:93;33065:3;32976:93;:::i;:::-;33094:2;33089:3;33085:12;33078:19;;32737:366;;;:::o;33109:419::-;33275:4;33313:2;33302:9;33298:18;33290:26;;33362:9;33356:4;33352:20;33348:1;33337:9;33333:17;33326:47;33390:131;33516:4;33390:131;:::i;:::-;33382:139;;33109:419;;;:::o;33534:225::-;33674:34;33670:1;33662:6;33658:14;33651:58;33743:8;33738:2;33730:6;33726:15;33719:33;33534:225;:::o;33765:366::-;33907:3;33928:67;33992:2;33987:3;33928:67;:::i;:::-;33921:74;;34004:93;34093:3;34004:93;:::i;:::-;34122:2;34117:3;34113:12;34106:19;;33765:366;;;:::o;34137:419::-;34303:4;34341:2;34330:9;34326:18;34318:26;;34390:9;34384:4;34380:20;34376:1;34365:9;34361:17;34354:47;34418:131;34544:4;34418:131;:::i;:::-;34410:139;;34137:419;;;:::o;34562:442::-;34711:4;34749:2;34738:9;34734:18;34726:26;;34762:71;34830:1;34819:9;34815:17;34806:6;34762:71;:::i;:::-;34843:72;34911:2;34900:9;34896:18;34887:6;34843:72;:::i;:::-;34925;34993:2;34982:9;34978:18;34969:6;34925:72;:::i;:::-;34562:442;;;;;;:::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:410::-;35250:7;35273:20;35291:1;35273:20;:::i;:::-;35268:25;;35307:20;35325:1;35307:20;:::i;:::-;35302:25;;35362:1;35359;35355:9;35384:30;35402:11;35384:30;:::i;:::-;35373:41;;35563:1;35554:7;35550:15;35547:1;35544:22;35524:1;35517:9;35497:83;35474:139;;35593:18;;:::i;:::-;35474:139;35258:362;35210:410;;;;:::o;35626:143::-;35683:5;35714:6;35708:13;35699:22;;35730:33;35757:5;35730:33;:::i;:::-;35626:143;;;;:::o;35775:351::-;35845:6;35894:2;35882:9;35873:7;35869:23;35865:32;35862:119;;;35900:79;;:::i;:::-;35862:119;36020:1;36045:64;36101:7;36092:6;36081:9;36077:22;36045:64;:::i;:::-;36035:74;;35991:128;35775:351;;;;:::o;36132:85::-;36177:7;36206:5;36195:16;;36132:85;;;:::o;36223:158::-;36281:9;36314:61;36332:42;36341:32;36367:5;36341:32;:::i;:::-;36332:42;:::i;:::-;36314:61;:::i;:::-;36301:74;;36223:158;;;:::o;36387:147::-;36482:45;36521:5;36482:45;:::i;:::-;36477:3;36470:58;36387:147;;:::o;36540:114::-;36607:6;36641:5;36635:12;36625:22;;36540:114;;;:::o;36660:184::-;36759:11;36793:6;36788:3;36781:19;36833:4;36828:3;36824:14;36809:29;;36660:184;;;;:::o;36850:132::-;36917:4;36940:3;36932:11;;36970:4;36965:3;36961:14;36953:22;;36850:132;;;:::o;36988:108::-;37065:24;37083:5;37065:24;:::i;:::-;37060:3;37053:37;36988:108;;:::o;37102:179::-;37171:10;37192:46;37234:3;37226:6;37192:46;:::i;:::-;37270:4;37265:3;37261:14;37247:28;;37102:179;;;;:::o;37287:113::-;37357:4;37389;37384:3;37380:14;37372:22;;37287:113;;;:::o;37436:732::-;37555:3;37584:54;37632:5;37584:54;:::i;:::-;37654:86;37733:6;37728:3;37654:86;:::i;:::-;37647:93;;37764:56;37814:5;37764:56;:::i;:::-;37843:7;37874:1;37859:284;37884:6;37881:1;37878:13;37859:284;;;37960:6;37954:13;37987:63;38046:3;38031:13;37987:63;:::i;:::-;37980:70;;38073:60;38126:6;38073:60;:::i;:::-;38063:70;;37919:224;37906:1;37903;37899:9;37894:14;;37859:284;;;37863:14;38159:3;38152:10;;37560:608;;;37436:732;;;;:::o;38174:831::-;38437:4;38475:3;38464:9;38460:19;38452:27;;38489:71;38557:1;38546:9;38542:17;38533:6;38489:71;:::i;:::-;38570:80;38646:2;38635:9;38631:18;38622:6;38570:80;:::i;:::-;38697:9;38691:4;38687:20;38682:2;38671:9;38667:18;38660:48;38725:108;38828:4;38819:6;38725:108;:::i;:::-;38717:116;;38843:72;38911:2;38900:9;38896:18;38887:6;38843:72;:::i;:::-;38925:73;38993:3;38982:9;38978:19;38969:6;38925:73;:::i;:::-;38174:831;;;;;;;;:::o;39011:807::-;39260:4;39298:3;39287:9;39283:19;39275:27;;39312:71;39380:1;39369:9;39365:17;39356:6;39312:71;:::i;:::-;39393:72;39461:2;39450:9;39446:18;39437:6;39393:72;:::i;:::-;39475:80;39551:2;39540:9;39536:18;39527:6;39475:80;:::i;:::-;39565;39641:2;39630:9;39626:18;39617:6;39565:80;:::i;:::-;39655:73;39723:3;39712:9;39708:19;39699:6;39655:73;:::i;:::-;39738;39806:3;39795:9;39791:19;39782:6;39738:73;:::i;:::-;39011:807;;;;;;;;;:::o;39824:143::-;39881:5;39912:6;39906:13;39897:22;;39928:33;39955:5;39928:33;:::i;:::-;39824:143;;;;:::o;39973:663::-;40061:6;40069;40077;40126:2;40114:9;40105:7;40101:23;40097:32;40094:119;;;40132:79;;:::i;:::-;40094:119;40252:1;40277:64;40333:7;40324:6;40313:9;40309:22;40277:64;:::i;:::-;40267:74;;40223:128;40390:2;40416:64;40472:7;40463:6;40452:9;40448:22;40416:64;:::i;:::-;40406:74;;40361:129;40529:2;40555:64;40611:7;40602:6;40591:9;40587:22;40555:64;:::i;:::-;40545:74;;40500:129;39973:663;;;;;:::o

Swarm Source

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