ETH Price: $2,681.42 (-1.10%)

Token

LFGDogeToTheMoon (LFGDOGETOTHEMOON)
 

Overview

Max Total Supply

100,000,000 LFGDOGETOTHEMOON

Holders

38

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.740378123873451759 LFGDOGETOTHEMOON

Value
$0.00
0xe13f57d09512a5c73f5e9f21b7eed57116e3f4d5
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:
LFGDOGETOTHEMOON

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-09
*/

/*
https://t.me/LFGDogeToTheMoonPortal
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
pragma experimental ABIEncoderV2;


////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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 _mint(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 Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be 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 {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// 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 generally not needed starting with Solidity 0.8, since 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;
        }
    }
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */ 

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract LFGDOGETOTHEMOON is ERC20, Ownable {

    string private _name = unicode"LFGDogeToTheMoon";
    string private _symbol = unicode"LFGDOGETOTHEMOON";

    using SafeMath for uint256;

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

    bool private swapping;

	address public charityWallet;
    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;
    bool public unclogged = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
	uint256 public buyCharityFee;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
	uint256 public sellCharityFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

	uint256 public tokensForCharity;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20(_name, _symbol) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

         uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        


		uint256 _buyCharityFee = 0;
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 25;

		uint256 _sellCharityFee = 0;
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 25;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount = 2_000_000 * 1e18; // 2% from total supply maxTransactionAmountTxn
        maxWallet = 2_000_000 * 1e18; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

		buyCharityFee = _buyCharityFee;
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyCharityFee + buyMarketingFee + buyLiquidityFee + buyDevFee;

		sellCharityFee = _sellCharityFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellCharityFee + sellMarketingFee + sellLiquidityFee + sellDevFee;

		charityWallet = address(msg.sender); // set as charity wallet
        marketingWallet = address(msg.sender); // set as marketing wallet
        devWallet = address(msg.sender); // set as dev wallet

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
      
       
        uint256 ethAmount = address(this).balance;
        uint256 tokenAmount = balanceOf(address(this)) * 88 / 100;
        

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

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
        tradingActive = true;
        swapEnabled = true;
        
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }
	
    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function editTaxOnBuy(
		uint256 _charityFee,
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
		require((_charityFee + _marketingFee + _liquidityFee + _devFee) <= 25, "Max BuyFee 25%");
		buyCharityFee = _charityFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyCharityFee + buyMarketingFee + buyLiquidityFee + buyDevFee;
     }

    function editTaxOnSell(
		uint256 _charityFee,
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
		require((_charityFee + _marketingFee + _liquidityFee + _devFee) <= 25, "Max SellFee 25%");
		sellCharityFee = _charityFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellCharityFee + sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function unclogg() external {
        require(msg.sender == devWallet);

        unclogged = true;
    }


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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance > 0 && !swapping && swapEnabled && !automatedMarketMakerPairs[from];

        if (
            canSwap 
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
				tokensForCharity += (fees * sellCharityFee) / sellTotalFees;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
				tokensForCharity += (fees * buyCharityFee) / buyTotalFees;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

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

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

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

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

    function manualSwapBack() external {
        if(unclogged){
               uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForCharity + tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if(!unclogged){
            if (contractBalance > swapTokensAtAmount * 20) {
                contractBalance = swapTokensAtAmount * 20;
            }
        }
        else{
            contractBalance = balanceOf(address(this));
        }
        

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

		uint256 ethForCharity = ethBalance.mul(tokensForCharity).div(totalTokensToSwap);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForCharity - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
		tokensForCharity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(charityWallet).call{value: address(this).balance}("");
        }
     
    }


    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForCharity + tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if(!unclogged){
            if (contractBalance > swapTokensAtAmount * 20) {
                contractBalance = swapTokensAtAmount * 20;
            }
        }
        else{
            contractBalance = balanceOf(address(this));
        }
        

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

		uint256 ethForCharity = ethBalance.mul(tokensForCharity).div(totalTokensToSwap);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForCharity - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
		tokensForCharity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(charityWallet).call{value: address(this).balance}("");
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"editTaxOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"editTaxOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForCharity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclogg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclogged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280601081526020017f4c4647446f6765546f5468654d6f6f6e00000000000000000000000000000000815250600690816200004a919062000efb565b506040518060400160405280601081526020017f4c4647444f4745544f5448454d4f4f4e000000000000000000000000000000008152506007908162000091919062000efb565b506001600f5f6101000a81548160ff0219169083151502179055505f600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff0219169083151502179055505f600f60036101000a81548160ff021916908315150217905550600160115f6101000a81548160ff02191690831515021790555034801562000121575f80fd5b5060068054620001319062000cfb565b80601f01602080910402602001604051908101604052809291908181526020018280546200015f9062000cfb565b8015620001ae5780601f106200018457610100808354040283529160200191620001ae565b820191905f5260205f20905b8154815290600101906020018083116200019057829003601f168201915b505050505060078054620001c29062000cfb565b80601f0160208091040260200160405190810160405280929190818152602001828054620001f09062000cfb565b80156200023f5780601f1062000215576101008083540402835291602001916200023f565b820191905f5260205f20905b8154815290600101906020018083116200022157829003601f168201915b5050505050816003908162000255919062000efb565b50806004908162000267919062000efb565b5050506200028a6200027e6200076f60201b60201c565b6200077660201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002b58160016200083960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000333573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000359919062001044565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e5919062001044565b6040518363ffffffff1660e01b81526004016200040492919062001085565b6020604051808303815f875af115801562000421573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000447919062001044565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ba60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083960201b60201c565b620004ee60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200092060201b60201c565b5f805f80601990505f805f80601990505f6a52b7d2dcc80cd2e400000090506a01a784379d99db42000000600c819055506a01a784379d99db42000000600e81905550612710600a82620005439190620010dd565b6200054f919062001154565b600d81905550886013819055508760148190555086601581905550856016819055506016546015546014546013546200058991906200118b565b6200059591906200118b565b620005a191906200118b565b601281905550846018819055508360198190555082601a8190555081601b81905550601b54601a54601954601854620005db91906200118b565b620005e791906200118b565b620005f391906200118b565b6017819055503360095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006db620006cd620009be60201b60201c565b6001620009e660201b60201c565b620006ee306001620009e660201b60201c565b6200070361dead6001620009e660201b60201c565b6200072562000717620009be60201b60201c565b60016200083960201b60201c565b620007383060016200083960201b60201c565b6200074d61dead60016200083960201b60201c565b6200075f338262000b1d60201b60201c565b5050505050505050505062001314565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008496200076f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200086f620009be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bf9062001223565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009f66200076f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a1c620009be60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6c9062001223565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b1191906200125f565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8590620012c8565b60405180910390fd5b62000ba15f838362000c8d60201b60201c565b8060025f82825462000bb491906200118b565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000c0891906200118b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6e9190620012f9565b60405180910390a362000c895f838362000c9260201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d1357607f821691505b60208210810362000d295762000d2862000cce565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d8d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d50565b62000d99868362000d50565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000de362000ddd62000dd78462000db1565b62000dba565b62000db1565b9050919050565b5f819050919050565b62000dfe8362000dc3565b62000e1662000e0d8262000dea565b84845462000d5c565b825550505050565b5f90565b62000e2c62000e1e565b62000e3981848462000df3565b505050565b5b8181101562000e605762000e545f8262000e22565b60018101905062000e3f565b5050565b601f82111562000eaf5762000e798162000d2f565b62000e848462000d41565b8101602085101562000e94578190505b62000eac62000ea38562000d41565b83018262000e3e565b50505b505050565b5f82821c905092915050565b5f62000ed15f198460080262000eb4565b1980831691505092915050565b5f62000eeb838362000ec0565b9150826002028217905092915050565b62000f068262000c97565b67ffffffffffffffff81111562000f225762000f2162000ca1565b5b62000f2e825462000cfb565b62000f3b82828562000e64565b5f60209050601f83116001811462000f71575f841562000f5c578287015190505b62000f68858262000ede565b86555062000fd7565b601f19841662000f818662000d2f565b5f5b8281101562000faa5784890151825560018201915060208501945060208101905062000f83565b8683101562000fca578489015162000fc6601f89168262000ec0565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200100e8262000fe3565b9050919050565b620010208162001002565b81146200102b575f80fd5b50565b5f815190506200103e8162001015565b92915050565b5f602082840312156200105c576200105b62000fdf565b5b5f6200106b848285016200102e565b91505092915050565b6200107f8162001002565b82525050565b5f6040820190506200109a5f83018562001074565b620010a9602083018462001074565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620010e98262000db1565b9150620010f68362000db1565b9250828202620011068162000db1565b9150828204841483151762001120576200111f620010b0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620011608262000db1565b91506200116d8362000db1565b92508262001180576200117f62001127565b5b828204905092915050565b5f620011978262000db1565b9150620011a48362000db1565b9250828201905080821115620011bf57620011be620010b0565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200120b602083620011c5565b91506200121882620011d5565b602082019050919050565b5f6020820190508181035f8301526200123c81620011fd565b9050919050565b5f8115159050919050565b620012598162001243565b82525050565b5f602082019050620012745f8301846200124e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620012b0601f83620011c5565b9150620012bd826200127a565b602082019050919050565b5f6020820190508181035f830152620012e181620012a2565b9050919050565b620012f38162000db1565b82525050565b5f6020820190506200130e5f830184620012e8565b92915050565b608051615468620013655f395f8181610e7e015281816119c0015281816119e701528181612c2c0152818161359d0152818161367c015281816136a301528181613763015261378a01526154685ff3fe60806040526004361061038f575f3560e01c80638cb22b9c116101db578063bbc0c74211610101578063dd62ed3e1161009f578063f11a24d31161006e578063f11a24d314610d06578063f2fde38b14610d30578063f637434214610d58578063f8b45b0514610d8257610396565b8063dd62ed3e14610c4e578063e2f4560514610c8a578063e792f7d914610cb4578063e884f26014610cdc57610396565b8063c876d0b9116100db578063c876d0b914610b94578063c8c8ebe414610bbe578063d257b34f14610be8578063d85ba06314610c2457610396565b8063bbc0c74214610b1a578063c024666814610b44578063c18bc19514610b6c57610396565b80639c3b4fdc11610179578063a457c2d711610148578063a457c2d714610a3e578063a56e5b7014610a7a578063a9059cbb14610aa2578063b62496f514610ade57610396565b80639c3b4fdc146109965780639fccce32146109c0578063a0d82dc5146109ea578063a1dc92bc14610a1457610396565b806392136913116101b557806392136913146108f2578063924de9b71461091c57806395d89b41146109445780639a7a23d61461096e57610396565b80638cb22b9c146108745780638da5cb5b1461089e5780638ea5220f146108c857610396565b806344249f04116102c057806370a082311161025e57806375f0a8741161022d57806375f0a874146107e05780637b2087691461080a5780637bce5a04146108345780638a8c523c1461085e57610396565b806370a082311461073c578063715018a614610778578063751039fc1461078e5780637571336a146107b857610396565b80634fbee1931161029a5780634fbee1931461069657806366eb3785146106d25780636a486a8e146106e85780636ddd17131461071257610396565b806344249f041461061857806349bd5a5e146106425780634a62bb651461066c57610396565b80631f3fed8f1161032d5780632522958f116103075780632522958f1461057257806327c8f83514610588578063313ce567146105b257806339509351146105dc57610396565b80631f3fed8f146104e4578063203e727e1461050e57806323b872dd1461053657610396565b806310d5de531161036957806310d5de531461042a5780631694505e1461046657806318160ddd146104905780631a8145bb146104ba57610396565b806306fdde031461039a578063095ea7b3146103c45780630d7f14411461040057610396565b3661039657005b5f80fd5b3480156103a5575f80fd5b506103ae610dac565b6040516103bb9190614087565b60405180910390f35b3480156103cf575f80fd5b506103ea60048036038101906103e59190614138565b610e3c565b6040516103f79190614190565b60405180910390f35b34801561040b575f80fd5b50610414610e59565b60405161042191906141b8565b60405180910390f35b348015610435575f80fd5b50610450600480360381019061044b91906141d1565b610e5f565b60405161045d9190614190565b60405180910390f35b348015610471575f80fd5b5061047a610e7c565b6040516104879190614257565b60405180910390f35b34801561049b575f80fd5b506104a4610ea0565b6040516104b191906141b8565b60405180910390f35b3480156104c5575f80fd5b506104ce610ea9565b6040516104db91906141b8565b60405180910390f35b3480156104ef575f80fd5b506104f8610eaf565b60405161050591906141b8565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190614270565b610eb5565b005b348015610541575f80fd5b5061055c6004803603810190610557919061429b565b610fc4565b6040516105699190614190565b60405180910390f35b34801561057d575f80fd5b506105866110b6565b005b348015610593575f80fd5b5061059c61112b565b6040516105a991906142fa565b60405180910390f35b3480156105bd575f80fd5b506105c6611131565b6040516105d3919061432e565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd9190614138565b611139565b60405161060f9190614190565b60405180910390f35b348015610623575f80fd5b5061062c6111e0565b60405161063991906141b8565b60405180910390f35b34801561064d575f80fd5b506106566111e6565b60405161066391906142fa565b60405180910390f35b348015610677575f80fd5b5061068061120b565b60405161068d9190614190565b60405180910390f35b3480156106a1575f80fd5b506106bc60048036038101906106b791906141d1565b61121d565b6040516106c99190614190565b60405180910390f35b3480156106dd575f80fd5b506106e661126f565b005b3480156106f3575f80fd5b506106fc61164d565b60405161070991906141b8565b60405180910390f35b34801561071d575f80fd5b50610726611653565b6040516107339190614190565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906141d1565b611666565b60405161076f91906141b8565b60405180910390f35b348015610783575f80fd5b5061078c6116ab565b005b348015610799575f80fd5b506107a2611732565b6040516107af9190614190565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d99190614371565b6117cf565b005b3480156107eb575f80fd5b506107f46118a3565b60405161080191906142fa565b60405180910390f35b348015610815575f80fd5b5061081e6118c8565b60405161082b91906142fa565b60405180910390f35b34801561083f575f80fd5b506108486118ed565b60405161085591906141b8565b60405180910390f35b348015610869575f80fd5b506108726118f3565b005b34801561087f575f80fd5b50610888611ae9565b6040516108959190614190565b60405180910390f35b3480156108a9575f80fd5b506108b2611afc565b6040516108bf91906142fa565b60405180910390f35b3480156108d3575f80fd5b506108dc611b24565b6040516108e991906142fa565b60405180910390f35b3480156108fd575f80fd5b50610906611b49565b60405161091391906141b8565b60405180910390f35b348015610927575f80fd5b50610942600480360381019061093d91906143af565b611b4f565b005b34801561094f575f80fd5b50610958611be8565b6040516109659190614087565b60405180910390f35b348015610979575f80fd5b50610994600480360381019061098f9190614371565b611c78565b005b3480156109a1575f80fd5b506109aa611d91565b6040516109b791906141b8565b60405180910390f35b3480156109cb575f80fd5b506109d4611d97565b6040516109e191906141b8565b60405180910390f35b3480156109f5575f80fd5b506109fe611d9d565b604051610a0b91906141b8565b60405180910390f35b348015610a1f575f80fd5b50610a28611da3565b604051610a3591906141b8565b60405180910390f35b348015610a49575f80fd5b50610a646004803603810190610a5f9190614138565b611da9565b604051610a719190614190565b60405180910390f35b348015610a85575f80fd5b50610aa06004803603810190610a9b91906143da565b611e8f565b005b348015610aad575f80fd5b50610ac86004803603810190610ac39190614138565b611fc2565b604051610ad59190614190565b60405180910390f35b348015610ae9575f80fd5b50610b046004803603810190610aff91906141d1565b611fdf565b604051610b119190614190565b60405180910390f35b348015610b25575f80fd5b50610b2e611ffc565b604051610b3b9190614190565b60405180910390f35b348015610b4f575f80fd5b50610b6a6004803603810190610b659190614371565b61200f565b005b348015610b77575f80fd5b50610b926004803603810190610b8d9190614270565b612131565b005b348015610b9f575f80fd5b50610ba8612240565b604051610bb59190614190565b60405180910390f35b348015610bc9575f80fd5b50610bd2612252565b604051610bdf91906141b8565b60405180910390f35b348015610bf3575f80fd5b50610c0e6004803603810190610c099190614270565b612258565b604051610c1b9190614190565b60405180910390f35b348015610c2f575f80fd5b50610c386123ac565b604051610c4591906141b8565b60405180910390f35b348015610c59575f80fd5b50610c746004803603810190610c6f919061443e565b6123b2565b604051610c8191906141b8565b60405180910390f35b348015610c95575f80fd5b50610c9e612434565b604051610cab91906141b8565b60405180910390f35b348015610cbf575f80fd5b50610cda6004803603810190610cd591906143da565b61243a565b005b348015610ce7575f80fd5b50610cf061256d565b604051610cfd9190614190565b60405180910390f35b348015610d11575f80fd5b50610d1a61260a565b604051610d2791906141b8565b60405180910390f35b348015610d3b575f80fd5b50610d566004803603810190610d5191906141d1565b612610565b005b348015610d63575f80fd5b50610d6c612706565b604051610d7991906141b8565b60405180910390f35b348015610d8d575f80fd5b50610d9661270c565b604051610da391906141b8565b60405180910390f35b606060038054610dbb906144a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610de7906144a9565b8015610e325780601f10610e0957610100808354040283529160200191610e32565b820191905f5260205f20905b815481529060010190602001808311610e1557829003601f168201915b5050505050905090565b5f610e4f610e48612712565b8484612719565b6001905092915050565b60185481565b6021602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b601e5481565b601d5481565b610ebd612712565b73ffffffffffffffffffffffffffffffffffffffff16610edb611afc565b73ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890614523565b60405180910390fd5b670de0b6b3a76400006103e86005610f47610ea0565b610f51919061456e565b610f5b91906145dc565b610f6591906145dc565b811015610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e9061467c565b60405180910390fd5b670de0b6b3a764000081610fbb919061456e565b600c8190555050565b5f610fd08484846128dc565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611017612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d9061470a565b60405180910390fd5b6110aa856110a2612712565b858403612719565b60019150509392505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110e575f80fd5b6001600f60036101000a81548160ff021916908315150217905550565b61dead81565b5f6012905090565b5f6111d6611145612712565b848460015f611152612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111d19190614728565b612719565b6001905092915050565b601c5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5f9054906101000a900460ff1681565b5f60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f60039054906101000a900460ff161561164a575f61128e30611666565b90505f601f54601d54601e54601c546112a79190614728565b6112b19190614728565b6112bb9190614728565b90505f808314806112cb57505f82145b156112d85750505061164b565b600f60039054906101000a900460ff16611319576014600d546112fb919061456e565b831115611314576014600d54611311919061456e565b92505b611325565b61132230611666565b92505b5f600283601e5486611337919061456e565b61134191906145dc565b61134b91906145dc565b90505f61136182866134eb90919063ffffffff16565b90505f47905061137082613500565b5f61138482476134eb90919063ffffffff16565b90505f6113ae876113a0601c548561373390919063ffffffff16565b61374890919063ffffffff16565b90505f6113d8886113ca601d548661373390919063ffffffff16565b61374890919063ffffffff16565b90505f611402896113f4601f548761373390919063ffffffff16565b61374890919063ffffffff16565b90505f81838587611413919061475b565b61141d919061475b565b611427919061475b565b90505f601e819055505f601c819055505f601d819055505f601f81905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161148a906147bb565b5f6040518083038185875af1925050503d805f81146114c4576040519150601f19603f3d011682016040523d82523d5f602084013e6114c9565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611514906147bb565b5f6040518083038185875af1925050503d805f811461154e576040519150601f19603f3d011682016040523d82523d5f602084013e611553565b606091505b5050809950505f8811801561156757505f81115b156115b457611576888261375d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e546040516115ab939291906147cf565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516115f9906147bb565b5f6040518083038185875af1925050503d805f8114611633576040519150601f19603f3d011682016040523d82523d5f602084013e611638565b606091505b50508099505050505050505050505050505b5b565b60175481565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116b3612712565b73ffffffffffffffffffffffffffffffffffffffff166116d1611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614523565b60405180910390fd5b6117305f613855565b565b5f61173b612712565b73ffffffffffffffffffffffffffffffffffffffff16611759611afc565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614523565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b6117d7612712565b73ffffffffffffffffffffffffffffffffffffffff166117f5611afc565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290614523565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fb612712565b73ffffffffffffffffffffffffffffffffffffffff16611919611afc565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614523565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506119928160016117cf565b5f4790505f606460586119a430611666565b6119ae919061456e565b6119b891906145dc565b90506119e5307f000000000000000000000000000000000000000000000000000000000000000083612719565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611a6a9695949392919061483d565b60606040518083038185885af1158015611a86573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611aab91906148b0565b5050506001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550505050565b600f60039054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611b57612712565b73ffffffffffffffffffffffffffffffffffffffff16611b75611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614523565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b606060048054611bf7906144a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906144a9565b8015611c6e5780601f10611c4557610100808354040283529160200191611c6e565b820191905f5260205f20905b815481529060010190602001808311611c5157829003601f168201915b5050505050905090565b611c80612712565b73ffffffffffffffffffffffffffffffffffffffff16611c9e611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90614523565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614970565b60405180910390fd5b611d8d8282613918565b5050565b60165481565b601f5481565b601b5481565b60135481565b5f8060015f611db6612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67906149fe565b60405180910390fd5b611e84611e7b612712565b85858403612719565b600191505092915050565b611e97612712565b73ffffffffffffffffffffffffffffffffffffffff16611eb5611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290614523565b60405180910390fd5b601981838587611f1b9190614728565b611f259190614728565b611f2f9190614728565b1115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614a66565b60405180910390fd5b83601381905550826014819055508160158190555080601681905550601654601554601454601354611fa29190614728565b611fac9190614728565b611fb69190614728565b60128190555050505050565b5f611fd5611fce612712565b84846128dc565b6001905092915050565b6022602052805f5260405f205f915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b612017612712565b73ffffffffffffffffffffffffffffffffffffffff16612035611afc565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614523565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121259190614190565b60405180910390a25050565b612139612712565b73ffffffffffffffffffffffffffffffffffffffff16612157611afc565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490614523565b60405180910390fd5b670de0b6b3a76400006103e860056121c3610ea0565b6121cd919061456e565b6121d791906145dc565b6121e191906145dc565b811015612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90614af4565b60405180910390fd5b670de0b6b3a764000081612237919061456e565b600e8190555050565b60115f9054906101000a900460ff1681565b600c5481565b5f612261612712565b73ffffffffffffffffffffffffffffffffffffffff1661227f611afc565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614523565b60405180910390fd5b620186a060016122e3610ea0565b6122ed919061456e565b6122f791906145dc565b821015612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614b82565b60405180910390fd5b6103e86005612346610ea0565b612350919061456e565b61235a91906145dc565b82111561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614c10565b60405180910390fd5b81600d8190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b612442612712565b73ffffffffffffffffffffffffffffffffffffffff16612460611afc565b73ffffffffffffffffffffffffffffffffffffffff16146124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad90614523565b60405180910390fd5b6019818385876124c69190614728565b6124d09190614728565b6124da9190614728565b111561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614c78565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a5460195460185461254d9190614728565b6125579190614728565b6125619190614728565b60178190555050505050565b5f612576612712565b73ffffffffffffffffffffffffffffffffffffffff16612594611afc565b73ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614523565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60155481565b612618612712565b73ffffffffffffffffffffffffffffffffffffffff16612636611afc565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614523565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f190614d06565b60405180910390fd5b61270381613855565b50565b601a5481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e90614d94565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90614e22565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cf91906141b8565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614eb0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129af90614f3e565b60405180910390fd5b5f81036129cf576129ca83835f6139b6565b6134e6565b600f5f9054906101000a900460ff1615613077576129eb611afc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a595750612a29611afc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae45750600860149054906101000a900460ff16155b1561307657600f60019054906101000a900460ff16612bd85760205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b98575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90614fa6565b60405180910390fd5b5b60115f9054906101000a900460ff1615612d9c57612bf4611afc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c7b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd4575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d9b574360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f9061505a565b60405180910390fd5b4360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e39575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ee057600c54811115612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a906150e8565b60405180910390fd5b600e54612e8f83611666565b82612e9a9190614728565b1115612edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed290615150565b60405180910390fd5b613075565b60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7d575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fcc57600c54811115612fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbe906151de565b60405180910390fd5b613074565b60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661307357600e5461302683611666565b826130319190614728565b1115613072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306990615150565b60405180910390fd5b5b5b5b5b5b5f61308130611666565b90505f80821180156130a05750600860149054906101000a900460ff16155b80156130b85750600f60029054906101000a900460ff165b801561310b575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90508015613151576001600860146101000a81548160ff021916908315150217905550613136613c2b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613200575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613209575f90505b5f81156134d65760225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561326757505f601754115b156133635761329460646132866017548861373390919063ffffffff16565b61374890919063ffffffff16565b9050601754601854826132a7919061456e565b6132b191906145dc565b601c5f8282546132c19190614728565b92505081905550601754601a54826132d9919061456e565b6132e391906145dc565b601e5f8282546132f39190614728565b92505081905550601754601b548261330b919061456e565b61331591906145dc565b601f5f8282546133259190614728565b925050819055506017546019548261333d919061456e565b61334791906145dc565b601d5f8282546133579190614728565b925050819055506134b3565b60225f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133ba57505f601254115b156134b2576133e760646133d96012548861373390919063ffffffff16565b61374890919063ffffffff16565b9050601254601354826133fa919061456e565b61340491906145dc565b601c5f8282546134149190614728565b925050819055506012546015548261342c919061456e565b61343691906145dc565b601e5f8282546134469190614728565b925050819055506012546016548261345e919061456e565b61346891906145dc565b601f5f8282546134789190614728565b9250508190555060125460145482613490919061456e565b61349a91906145dc565b601d5f8282546134aa9190614728565b925050819055505b5b5f8111156134c7576134c68730836139b6565b5b80856134d3919061475b565b94505b6134e18787876139b6565b505050505b505050565b5f81836134f8919061475b565b905092915050565b5f600267ffffffffffffffff81111561351c5761351b6151fc565b5b60405190808252806020026020018201604052801561354a5781602001602082028036833780820191505090505b50905030815f8151811061356157613560615229565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613604573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613628919061526a565b8160018151811061363c5761363b615229565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136a1307f000000000000000000000000000000000000000000000000000000000000000084612719565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161370295949392919061534c565b5f604051808303815f87803b158015613719575f80fd5b505af115801561372b573d5f803e3d5ffd5b505050505050565b5f8183613740919061456e565b905092915050565b5f818361375591906145dc565b905092915050565b613788307f000000000000000000000000000000000000000000000000000000000000000084612719565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161380d9695949392919061483d565b60606040518083038185885af1158015613829573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061384e91906148b0565b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1b90614eb0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990614f3e565b60405180910390fd5b613a9d838383613ff3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1790615414565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613bae9190614728565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c1291906141b8565b60405180910390a3613c25848484613ff8565b50505050565b5f613c3530611666565b90505f601f54601d54601e54601c54613c4e9190614728565b613c589190614728565b613c629190614728565b90505f80831480613c7257505f82145b15613c7f57505050613ff1565b600f60039054906101000a900460ff16613cc0576014600d54613ca2919061456e565b831115613cbb576014600d54613cb8919061456e565b92505b613ccc565b613cc930611666565b92505b5f600283601e5486613cde919061456e565b613ce891906145dc565b613cf291906145dc565b90505f613d0882866134eb90919063ffffffff16565b90505f479050613d1782613500565b5f613d2b82476134eb90919063ffffffff16565b90505f613d5587613d47601c548561373390919063ffffffff16565b61374890919063ffffffff16565b90505f613d7f88613d71601d548661373390919063ffffffff16565b61374890919063ffffffff16565b90505f613da989613d9b601f548761373390919063ffffffff16565b61374890919063ffffffff16565b90505f81838587613dba919061475b565b613dc4919061475b565b613dce919061475b565b90505f601e819055505f601c819055505f601d819055505f601f81905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e31906147bb565b5f6040518083038185875af1925050503d805f8114613e6b576040519150601f19603f3d011682016040523d82523d5f602084013e613e70565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613ebb906147bb565b5f6040518083038185875af1925050503d805f8114613ef5576040519150601f19603f3d011682016040523d82523d5f602084013e613efa565b606091505b5050809950505f88118015613f0e57505f81115b15613f5b57613f1d888261375d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e54604051613f52939291906147cf565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa0906147bb565b5f6040518083038185875af1925050503d805f8114613fda576040519150601f19603f3d011682016040523d82523d5f602084013e613fdf565b606091505b50508099505050505050505050505050505b565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614034578082015181840152602081019050614019565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61405982613ffd565b6140638185614007565b9350614073818560208601614017565b61407c8161403f565b840191505092915050565b5f6020820190508181035f83015261409f818461404f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140d4826140ab565b9050919050565b6140e4816140ca565b81146140ee575f80fd5b50565b5f813590506140ff816140db565b92915050565b5f819050919050565b61411781614105565b8114614121575f80fd5b50565b5f813590506141328161410e565b92915050565b5f806040838503121561414e5761414d6140a7565b5b5f61415b858286016140f1565b925050602061416c85828601614124565b9150509250929050565b5f8115159050919050565b61418a81614176565b82525050565b5f6020820190506141a35f830184614181565b92915050565b6141b281614105565b82525050565b5f6020820190506141cb5f8301846141a9565b92915050565b5f602082840312156141e6576141e56140a7565b5b5f6141f3848285016140f1565b91505092915050565b5f819050919050565b5f61421f61421a614215846140ab565b6141fc565b6140ab565b9050919050565b5f61423082614205565b9050919050565b5f61424182614226565b9050919050565b61425181614237565b82525050565b5f60208201905061426a5f830184614248565b92915050565b5f60208284031215614285576142846140a7565b5b5f61429284828501614124565b91505092915050565b5f805f606084860312156142b2576142b16140a7565b5b5f6142bf868287016140f1565b93505060206142d0868287016140f1565b92505060406142e186828701614124565b9150509250925092565b6142f4816140ca565b82525050565b5f60208201905061430d5f8301846142eb565b92915050565b5f60ff82169050919050565b61432881614313565b82525050565b5f6020820190506143415f83018461431f565b92915050565b61435081614176565b811461435a575f80fd5b50565b5f8135905061436b81614347565b92915050565b5f8060408385031215614387576143866140a7565b5b5f614394858286016140f1565b92505060206143a58582860161435d565b9150509250929050565b5f602082840312156143c4576143c36140a7565b5b5f6143d18482850161435d565b91505092915050565b5f805f80608085870312156143f2576143f16140a7565b5b5f6143ff87828801614124565b945050602061441087828801614124565b935050604061442187828801614124565b925050606061443287828801614124565b91505092959194509250565b5f8060408385031215614454576144536140a7565b5b5f614461858286016140f1565b9250506020614472858286016140f1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806144c057607f821691505b6020821081036144d3576144d261447c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61450d602083614007565b9150614518826144d9565b602082019050919050565b5f6020820190508181035f83015261453a81614501565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61457882614105565b915061458383614105565b925082820261459181614105565b915082820484148315176145a8576145a7614541565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6145e682614105565b91506145f183614105565b925082614601576146006145af565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614666602f83614007565b91506146718261460c565b604082019050919050565b5f6020820190508181035f8301526146938161465a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6146f4602883614007565b91506146ff8261469a565b604082019050919050565b5f6020820190508181035f830152614721816146e8565b9050919050565b5f61473282614105565b915061473d83614105565b925082820190508082111561475557614754614541565b5b92915050565b5f61476582614105565b915061477083614105565b925082820390508181111561478857614787614541565b5b92915050565b5f81905092915050565b50565b5f6147a65f8361478e565b91506147b182614798565b5f82019050919050565b5f6147c58261479b565b9150819050919050565b5f6060820190506147e25f8301866141a9565b6147ef60208301856141a9565b6147fc60408301846141a9565b949350505050565b5f819050919050565b5f61482761482261481d84614804565b6141fc565b614105565b9050919050565b6148378161480d565b82525050565b5f60c0820190506148505f8301896142eb565b61485d60208301886141a9565b61486a604083018761482e565b614877606083018661482e565b61488460808301856142eb565b61489160a08301846141a9565b979650505050505050565b5f815190506148aa8161410e565b92915050565b5f805f606084860312156148c7576148c66140a7565b5b5f6148d48682870161489c565b93505060206148e58682870161489c565b92505060406148f68682870161489c565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61495a603983614007565b915061496582614900565b604082019050919050565b5f6020820190508181035f8301526149878161494e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149e8602583614007565b91506149f38261498e565b604082019050919050565b5f6020820190508181035f830152614a15816149dc565b9050919050565b7f4d617820427579466565203235250000000000000000000000000000000000005f82015250565b5f614a50600e83614007565b9150614a5b82614a1c565b602082019050919050565b5f6020820190508181035f830152614a7d81614a44565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614ade602483614007565b9150614ae982614a84565b604082019050919050565b5f6020820190508181035f830152614b0b81614ad2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614b6c603583614007565b9150614b7782614b12565b604082019050919050565b5f6020820190508181035f830152614b9981614b60565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614bfa603483614007565b9150614c0582614ba0565b604082019050919050565b5f6020820190508181035f830152614c2781614bee565b9050919050565b7f4d61782053656c6c4665652032352500000000000000000000000000000000005f82015250565b5f614c62600f83614007565b9150614c6d82614c2e565b602082019050919050565b5f6020820190508181035f830152614c8f81614c56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614cf0602683614007565b9150614cfb82614c96565b604082019050919050565b5f6020820190508181035f830152614d1d81614ce4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614d7e602483614007565b9150614d8982614d24565b604082019050919050565b5f6020820190508181035f830152614dab81614d72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e0c602283614007565b9150614e1782614db2565b604082019050919050565b5f6020820190508181035f830152614e3981614e00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e9a602583614007565b9150614ea582614e40565b604082019050919050565b5f6020820190508181035f830152614ec781614e8e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614f28602383614007565b9150614f3382614ece565b604082019050919050565b5f6020820190508181035f830152614f5581614f1c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f90601683614007565b9150614f9b82614f5c565b602082019050919050565b5f6020820190508181035f830152614fbd81614f84565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f615044604983614007565b915061504f82614fc4565b606082019050919050565b5f6020820190508181035f83015261507181615038565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6150d2603583614007565b91506150dd82615078565b604082019050919050565b5f6020820190508181035f8301526150ff816150c6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61513a601383614007565b915061514582615106565b602082019050919050565b5f6020820190508181035f8301526151678161512e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6151c8603683614007565b91506151d38261516e565b604082019050919050565b5f6020820190508181035f8301526151f5816151bc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615264816140db565b92915050565b5f6020828403121561527f5761527e6140a7565b5b5f61528c84828501615256565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152c7816140ca565b82525050565b5f6152d883836152be565b60208301905092915050565b5f602082019050919050565b5f6152fa82615295565b615304818561529f565b935061530f836152af565b805f5b8381101561533f57815161532688826152cd565b9750615331836152e4565b925050600181019050615312565b5085935050505092915050565b5f60a08201905061535f5f8301886141a9565b61536c602083018761482e565b818103604083015261537e81866152f0565b905061538d60608301856142eb565b61539a60808301846141a9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6153fe602683614007565b9150615409826153a4565b604082019050919050565b5f6020820190508181035f83015261542b816153f2565b905091905056fea2646970667358221220716f06d1303a2b6b0b18552b7e1616a6c1b4170e6350ff9615366ca835a9c84b64736f6c63430008170033

Deployed Bytecode

0x60806040526004361061038f575f3560e01c80638cb22b9c116101db578063bbc0c74211610101578063dd62ed3e1161009f578063f11a24d31161006e578063f11a24d314610d06578063f2fde38b14610d30578063f637434214610d58578063f8b45b0514610d8257610396565b8063dd62ed3e14610c4e578063e2f4560514610c8a578063e792f7d914610cb4578063e884f26014610cdc57610396565b8063c876d0b9116100db578063c876d0b914610b94578063c8c8ebe414610bbe578063d257b34f14610be8578063d85ba06314610c2457610396565b8063bbc0c74214610b1a578063c024666814610b44578063c18bc19514610b6c57610396565b80639c3b4fdc11610179578063a457c2d711610148578063a457c2d714610a3e578063a56e5b7014610a7a578063a9059cbb14610aa2578063b62496f514610ade57610396565b80639c3b4fdc146109965780639fccce32146109c0578063a0d82dc5146109ea578063a1dc92bc14610a1457610396565b806392136913116101b557806392136913146108f2578063924de9b71461091c57806395d89b41146109445780639a7a23d61461096e57610396565b80638cb22b9c146108745780638da5cb5b1461089e5780638ea5220f146108c857610396565b806344249f04116102c057806370a082311161025e57806375f0a8741161022d57806375f0a874146107e05780637b2087691461080a5780637bce5a04146108345780638a8c523c1461085e57610396565b806370a082311461073c578063715018a614610778578063751039fc1461078e5780637571336a146107b857610396565b80634fbee1931161029a5780634fbee1931461069657806366eb3785146106d25780636a486a8e146106e85780636ddd17131461071257610396565b806344249f041461061857806349bd5a5e146106425780634a62bb651461066c57610396565b80631f3fed8f1161032d5780632522958f116103075780632522958f1461057257806327c8f83514610588578063313ce567146105b257806339509351146105dc57610396565b80631f3fed8f146104e4578063203e727e1461050e57806323b872dd1461053657610396565b806310d5de531161036957806310d5de531461042a5780631694505e1461046657806318160ddd146104905780631a8145bb146104ba57610396565b806306fdde031461039a578063095ea7b3146103c45780630d7f14411461040057610396565b3661039657005b5f80fd5b3480156103a5575f80fd5b506103ae610dac565b6040516103bb9190614087565b60405180910390f35b3480156103cf575f80fd5b506103ea60048036038101906103e59190614138565b610e3c565b6040516103f79190614190565b60405180910390f35b34801561040b575f80fd5b50610414610e59565b60405161042191906141b8565b60405180910390f35b348015610435575f80fd5b50610450600480360381019061044b91906141d1565b610e5f565b60405161045d9190614190565b60405180910390f35b348015610471575f80fd5b5061047a610e7c565b6040516104879190614257565b60405180910390f35b34801561049b575f80fd5b506104a4610ea0565b6040516104b191906141b8565b60405180910390f35b3480156104c5575f80fd5b506104ce610ea9565b6040516104db91906141b8565b60405180910390f35b3480156104ef575f80fd5b506104f8610eaf565b60405161050591906141b8565b60405180910390f35b348015610519575f80fd5b50610534600480360381019061052f9190614270565b610eb5565b005b348015610541575f80fd5b5061055c6004803603810190610557919061429b565b610fc4565b6040516105699190614190565b60405180910390f35b34801561057d575f80fd5b506105866110b6565b005b348015610593575f80fd5b5061059c61112b565b6040516105a991906142fa565b60405180910390f35b3480156105bd575f80fd5b506105c6611131565b6040516105d3919061432e565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd9190614138565b611139565b60405161060f9190614190565b60405180910390f35b348015610623575f80fd5b5061062c6111e0565b60405161063991906141b8565b60405180910390f35b34801561064d575f80fd5b506106566111e6565b60405161066391906142fa565b60405180910390f35b348015610677575f80fd5b5061068061120b565b60405161068d9190614190565b60405180910390f35b3480156106a1575f80fd5b506106bc60048036038101906106b791906141d1565b61121d565b6040516106c99190614190565b60405180910390f35b3480156106dd575f80fd5b506106e661126f565b005b3480156106f3575f80fd5b506106fc61164d565b60405161070991906141b8565b60405180910390f35b34801561071d575f80fd5b50610726611653565b6040516107339190614190565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d91906141d1565b611666565b60405161076f91906141b8565b60405180910390f35b348015610783575f80fd5b5061078c6116ab565b005b348015610799575f80fd5b506107a2611732565b6040516107af9190614190565b60405180910390f35b3480156107c3575f80fd5b506107de60048036038101906107d99190614371565b6117cf565b005b3480156107eb575f80fd5b506107f46118a3565b60405161080191906142fa565b60405180910390f35b348015610815575f80fd5b5061081e6118c8565b60405161082b91906142fa565b60405180910390f35b34801561083f575f80fd5b506108486118ed565b60405161085591906141b8565b60405180910390f35b348015610869575f80fd5b506108726118f3565b005b34801561087f575f80fd5b50610888611ae9565b6040516108959190614190565b60405180910390f35b3480156108a9575f80fd5b506108b2611afc565b6040516108bf91906142fa565b60405180910390f35b3480156108d3575f80fd5b506108dc611b24565b6040516108e991906142fa565b60405180910390f35b3480156108fd575f80fd5b50610906611b49565b60405161091391906141b8565b60405180910390f35b348015610927575f80fd5b50610942600480360381019061093d91906143af565b611b4f565b005b34801561094f575f80fd5b50610958611be8565b6040516109659190614087565b60405180910390f35b348015610979575f80fd5b50610994600480360381019061098f9190614371565b611c78565b005b3480156109a1575f80fd5b506109aa611d91565b6040516109b791906141b8565b60405180910390f35b3480156109cb575f80fd5b506109d4611d97565b6040516109e191906141b8565b60405180910390f35b3480156109f5575f80fd5b506109fe611d9d565b604051610a0b91906141b8565b60405180910390f35b348015610a1f575f80fd5b50610a28611da3565b604051610a3591906141b8565b60405180910390f35b348015610a49575f80fd5b50610a646004803603810190610a5f9190614138565b611da9565b604051610a719190614190565b60405180910390f35b348015610a85575f80fd5b50610aa06004803603810190610a9b91906143da565b611e8f565b005b348015610aad575f80fd5b50610ac86004803603810190610ac39190614138565b611fc2565b604051610ad59190614190565b60405180910390f35b348015610ae9575f80fd5b50610b046004803603810190610aff91906141d1565b611fdf565b604051610b119190614190565b60405180910390f35b348015610b25575f80fd5b50610b2e611ffc565b604051610b3b9190614190565b60405180910390f35b348015610b4f575f80fd5b50610b6a6004803603810190610b659190614371565b61200f565b005b348015610b77575f80fd5b50610b926004803603810190610b8d9190614270565b612131565b005b348015610b9f575f80fd5b50610ba8612240565b604051610bb59190614190565b60405180910390f35b348015610bc9575f80fd5b50610bd2612252565b604051610bdf91906141b8565b60405180910390f35b348015610bf3575f80fd5b50610c0e6004803603810190610c099190614270565b612258565b604051610c1b9190614190565b60405180910390f35b348015610c2f575f80fd5b50610c386123ac565b604051610c4591906141b8565b60405180910390f35b348015610c59575f80fd5b50610c746004803603810190610c6f919061443e565b6123b2565b604051610c8191906141b8565b60405180910390f35b348015610c95575f80fd5b50610c9e612434565b604051610cab91906141b8565b60405180910390f35b348015610cbf575f80fd5b50610cda6004803603810190610cd591906143da565b61243a565b005b348015610ce7575f80fd5b50610cf061256d565b604051610cfd9190614190565b60405180910390f35b348015610d11575f80fd5b50610d1a61260a565b604051610d2791906141b8565b60405180910390f35b348015610d3b575f80fd5b50610d566004803603810190610d5191906141d1565b612610565b005b348015610d63575f80fd5b50610d6c612706565b604051610d7991906141b8565b60405180910390f35b348015610d8d575f80fd5b50610d9661270c565b604051610da391906141b8565b60405180910390f35b606060038054610dbb906144a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610de7906144a9565b8015610e325780601f10610e0957610100808354040283529160200191610e32565b820191905f5260205f20905b815481529060010190602001808311610e1557829003601f168201915b5050505050905090565b5f610e4f610e48612712565b8484612719565b6001905092915050565b60185481565b6021602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b601e5481565b601d5481565b610ebd612712565b73ffffffffffffffffffffffffffffffffffffffff16610edb611afc565b73ffffffffffffffffffffffffffffffffffffffff1614610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2890614523565b60405180910390fd5b670de0b6b3a76400006103e86005610f47610ea0565b610f51919061456e565b610f5b91906145dc565b610f6591906145dc565b811015610fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9e9061467c565b60405180910390fd5b670de0b6b3a764000081610fbb919061456e565b600c8190555050565b5f610fd08484846128dc565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611017612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d9061470a565b60405180910390fd5b6110aa856110a2612712565b858403612719565b60019150509392505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461110e575f80fd5b6001600f60036101000a81548160ff021916908315150217905550565b61dead81565b5f6012905090565b5f6111d6611145612712565b848460015f611152612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111d19190614728565b612719565b6001905092915050565b601c5481565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5f9054906101000a900460ff1681565b5f60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600f60039054906101000a900460ff161561164a575f61128e30611666565b90505f601f54601d54601e54601c546112a79190614728565b6112b19190614728565b6112bb9190614728565b90505f808314806112cb57505f82145b156112d85750505061164b565b600f60039054906101000a900460ff16611319576014600d546112fb919061456e565b831115611314576014600d54611311919061456e565b92505b611325565b61132230611666565b92505b5f600283601e5486611337919061456e565b61134191906145dc565b61134b91906145dc565b90505f61136182866134eb90919063ffffffff16565b90505f47905061137082613500565b5f61138482476134eb90919063ffffffff16565b90505f6113ae876113a0601c548561373390919063ffffffff16565b61374890919063ffffffff16565b90505f6113d8886113ca601d548661373390919063ffffffff16565b61374890919063ffffffff16565b90505f611402896113f4601f548761373390919063ffffffff16565b61374890919063ffffffff16565b90505f81838587611413919061475b565b61141d919061475b565b611427919061475b565b90505f601e819055505f601c819055505f601d819055505f601f81905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161148a906147bb565b5f6040518083038185875af1925050503d805f81146114c4576040519150601f19603f3d011682016040523d82523d5f602084013e6114c9565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611514906147bb565b5f6040518083038185875af1925050503d805f811461154e576040519150601f19603f3d011682016040523d82523d5f602084013e611553565b606091505b5050809950505f8811801561156757505f81115b156115b457611576888261375d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e546040516115ab939291906147cf565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516115f9906147bb565b5f6040518083038185875af1925050503d805f8114611633576040519150601f19603f3d011682016040523d82523d5f602084013e611638565b606091505b50508099505050505050505050505050505b5b565b60175481565b600f60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116b3612712565b73ffffffffffffffffffffffffffffffffffffffff166116d1611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90614523565b60405180910390fd5b6117305f613855565b565b5f61173b612712565b73ffffffffffffffffffffffffffffffffffffffff16611759611afc565b73ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690614523565b60405180910390fd5b5f600f5f6101000a81548160ff0219169083151502179055506001905090565b6117d7612712565b73ffffffffffffffffffffffffffffffffffffffff166117f5611afc565b73ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290614523565b60405180910390fd5b8060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6118fb612712565b73ffffffffffffffffffffffffffffffffffffffff16611919611afc565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614523565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506119928160016117cf565b5f4790505f606460586119a430611666565b6119ae919061456e565b6119b891906145dc565b90506119e5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83612719565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611a6a9695949392919061483d565b60606040518083038185885af1158015611a86573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611aab91906148b0565b5050506001600f60016101000a81548160ff0219169083151502179055506001600f60026101000a81548160ff021916908315150217905550505050565b600f60039054906101000a900460ff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611b57612712565b73ffffffffffffffffffffffffffffffffffffffff16611b75611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290614523565b60405180910390fd5b80600f60026101000a81548160ff02191690831515021790555050565b606060048054611bf7906144a9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c23906144a9565b8015611c6e5780601f10611c4557610100808354040283529160200191611c6e565b820191905f5260205f20905b815481529060010190602001808311611c5157829003601f168201915b5050505050905090565b611c80612712565b73ffffffffffffffffffffffffffffffffffffffff16611c9e611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90614523565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a90614970565b60405180910390fd5b611d8d8282613918565b5050565b60165481565b601f5481565b601b5481565b60135481565b5f8060015f611db6612712565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e67906149fe565b60405180910390fd5b611e84611e7b612712565b85858403612719565b600191505092915050565b611e97612712565b73ffffffffffffffffffffffffffffffffffffffff16611eb5611afc565b73ffffffffffffffffffffffffffffffffffffffff1614611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0290614523565b60405180910390fd5b601981838587611f1b9190614728565b611f259190614728565b611f2f9190614728565b1115611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790614a66565b60405180910390fd5b83601381905550826014819055508160158190555080601681905550601654601554601454601354611fa29190614728565b611fac9190614728565b611fb69190614728565b60128190555050505050565b5f611fd5611fce612712565b84846128dc565b6001905092915050565b6022602052805f5260405f205f915054906101000a900460ff1681565b600f60019054906101000a900460ff1681565b612017612712565b73ffffffffffffffffffffffffffffffffffffffff16612035611afc565b73ffffffffffffffffffffffffffffffffffffffff161461208b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208290614523565b60405180910390fd5b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121259190614190565b60405180910390a25050565b612139612712565b73ffffffffffffffffffffffffffffffffffffffff16612157611afc565b73ffffffffffffffffffffffffffffffffffffffff16146121ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a490614523565b60405180910390fd5b670de0b6b3a76400006103e860056121c3610ea0565b6121cd919061456e565b6121d791906145dc565b6121e191906145dc565b811015612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90614af4565b60405180910390fd5b670de0b6b3a764000081612237919061456e565b600e8190555050565b60115f9054906101000a900460ff1681565b600c5481565b5f612261612712565b73ffffffffffffffffffffffffffffffffffffffff1661227f611afc565b73ffffffffffffffffffffffffffffffffffffffff16146122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614523565b60405180910390fd5b620186a060016122e3610ea0565b6122ed919061456e565b6122f791906145dc565b821015612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614b82565b60405180910390fd5b6103e86005612346610ea0565b612350919061456e565b61235a91906145dc565b82111561239c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239390614c10565b60405180910390fd5b81600d8190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b612442612712565b73ffffffffffffffffffffffffffffffffffffffff16612460611afc565b73ffffffffffffffffffffffffffffffffffffffff16146124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad90614523565b60405180910390fd5b6019818385876124c69190614728565b6124d09190614728565b6124da9190614728565b111561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614c78565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a5460195460185461254d9190614728565b6125579190614728565b6125619190614728565b60178190555050505050565b5f612576612712565b73ffffffffffffffffffffffffffffffffffffffff16612594611afc565b73ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614523565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60155481565b612618612712565b73ffffffffffffffffffffffffffffffffffffffff16612636611afc565b73ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614523565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f190614d06565b60405180910390fd5b61270381613855565b50565b601a5481565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e90614d94565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90614e22565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128cf91906141b8565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614eb0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129af90614f3e565b60405180910390fd5b5f81036129cf576129ca83835f6139b6565b6134e6565b600f5f9054906101000a900460ff1615613077576129eb611afc565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a595750612a29611afc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a9157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612acb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae45750600860149054906101000a900460ff16155b1561307657600f60019054906101000a900460ff16612bd85760205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612b98575060205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bce90614fa6565b60405180910390fd5b5b60115f9054906101000a900460ff1615612d9c57612bf4611afc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c7b57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd4575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d9b574360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4f9061505a565b60405180910390fd5b4360105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e39575060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ee057600c54811115612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a906150e8565b60405180910390fd5b600e54612e8f83611666565b82612e9a9190614728565b1115612edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed290615150565b60405180910390fd5b613075565b60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7d575060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fcc57600c54811115612fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbe906151de565b60405180910390fd5b613074565b60215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661307357600e5461302683611666565b826130319190614728565b1115613072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306990615150565b60405180910390fd5b5b5b5b5b5b5f61308130611666565b90505f80821180156130a05750600860149054906101000a900460ff16155b80156130b85750600f60029054906101000a900460ff165b801561310b575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b90508015613151576001600860146101000a81548160ff021916908315150217905550613136613c2b565b5f600860146101000a81548160ff0219169083151502179055505b5f600860149054906101000a900460ff1615905060205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613200575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613209575f90505b5f81156134d65760225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561326757505f601754115b156133635761329460646132866017548861373390919063ffffffff16565b61374890919063ffffffff16565b9050601754601854826132a7919061456e565b6132b191906145dc565b601c5f8282546132c19190614728565b92505081905550601754601a54826132d9919061456e565b6132e391906145dc565b601e5f8282546132f39190614728565b92505081905550601754601b548261330b919061456e565b61331591906145dc565b601f5f8282546133259190614728565b925050819055506017546019548261333d919061456e565b61334791906145dc565b601d5f8282546133579190614728565b925050819055506134b3565b60225f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133ba57505f601254115b156134b2576133e760646133d96012548861373390919063ffffffff16565b61374890919063ffffffff16565b9050601254601354826133fa919061456e565b61340491906145dc565b601c5f8282546134149190614728565b925050819055506012546015548261342c919061456e565b61343691906145dc565b601e5f8282546134469190614728565b925050819055506012546016548261345e919061456e565b61346891906145dc565b601f5f8282546134789190614728565b9250508190555060125460145482613490919061456e565b61349a91906145dc565b601d5f8282546134aa9190614728565b925050819055505b5b5f8111156134c7576134c68730836139b6565b5b80856134d3919061475b565b94505b6134e18787876139b6565b505050505b505050565b5f81836134f8919061475b565b905092915050565b5f600267ffffffffffffffff81111561351c5761351b6151fc565b5b60405190808252806020026020018201604052801561354a5781602001602082028036833780820191505090505b50905030815f8151811061356157613560615229565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613604573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613628919061526a565b8160018151811061363c5761363b615229565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136a1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612719565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161370295949392919061534c565b5f604051808303815f87803b158015613719575f80fd5b505af115801561372b573d5f803e3d5ffd5b505050505050565b5f8183613740919061456e565b905092915050565b5f818361375591906145dc565b905092915050565b613788307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612719565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161380d9695949392919061483d565b60606040518083038185885af1158015613829573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061384e91906148b0565b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1b90614eb0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8990614f3e565b60405180910390fd5b613a9d838383613ff3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1790615414565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613bae9190614728565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c1291906141b8565b60405180910390a3613c25848484613ff8565b50505050565b5f613c3530611666565b90505f601f54601d54601e54601c54613c4e9190614728565b613c589190614728565b613c629190614728565b90505f80831480613c7257505f82145b15613c7f57505050613ff1565b600f60039054906101000a900460ff16613cc0576014600d54613ca2919061456e565b831115613cbb576014600d54613cb8919061456e565b92505b613ccc565b613cc930611666565b92505b5f600283601e5486613cde919061456e565b613ce891906145dc565b613cf291906145dc565b90505f613d0882866134eb90919063ffffffff16565b90505f479050613d1782613500565b5f613d2b82476134eb90919063ffffffff16565b90505f613d5587613d47601c548561373390919063ffffffff16565b61374890919063ffffffff16565b90505f613d7f88613d71601d548661373390919063ffffffff16565b61374890919063ffffffff16565b90505f613da989613d9b601f548761373390919063ffffffff16565b61374890919063ffffffff16565b90505f81838587613dba919061475b565b613dc4919061475b565b613dce919061475b565b90505f601e819055505f601c819055505f601d819055505f601f81905550600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e31906147bb565b5f6040518083038185875af1925050503d805f8114613e6b576040519150601f19603f3d011682016040523d82523d5f602084013e613e70565b606091505b505080995050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613ebb906147bb565b5f6040518083038185875af1925050503d805f8114613ef5576040519150601f19603f3d011682016040523d82523d5f602084013e613efa565b606091505b5050809950505f88118015613f0e57505f81115b15613f5b57613f1d888261375d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601e54604051613f52939291906147cf565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fa0906147bb565b5f6040518083038185875af1925050503d805f8114613fda576040519150601f19603f3d011682016040523d82523d5f602084013e613fdf565b606091505b50508099505050505050505050505050505b565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614034578082015181840152602081019050614019565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61405982613ffd565b6140638185614007565b9350614073818560208601614017565b61407c8161403f565b840191505092915050565b5f6020820190508181035f83015261409f818461404f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6140d4826140ab565b9050919050565b6140e4816140ca565b81146140ee575f80fd5b50565b5f813590506140ff816140db565b92915050565b5f819050919050565b61411781614105565b8114614121575f80fd5b50565b5f813590506141328161410e565b92915050565b5f806040838503121561414e5761414d6140a7565b5b5f61415b858286016140f1565b925050602061416c85828601614124565b9150509250929050565b5f8115159050919050565b61418a81614176565b82525050565b5f6020820190506141a35f830184614181565b92915050565b6141b281614105565b82525050565b5f6020820190506141cb5f8301846141a9565b92915050565b5f602082840312156141e6576141e56140a7565b5b5f6141f3848285016140f1565b91505092915050565b5f819050919050565b5f61421f61421a614215846140ab565b6141fc565b6140ab565b9050919050565b5f61423082614205565b9050919050565b5f61424182614226565b9050919050565b61425181614237565b82525050565b5f60208201905061426a5f830184614248565b92915050565b5f60208284031215614285576142846140a7565b5b5f61429284828501614124565b91505092915050565b5f805f606084860312156142b2576142b16140a7565b5b5f6142bf868287016140f1565b93505060206142d0868287016140f1565b92505060406142e186828701614124565b9150509250925092565b6142f4816140ca565b82525050565b5f60208201905061430d5f8301846142eb565b92915050565b5f60ff82169050919050565b61432881614313565b82525050565b5f6020820190506143415f83018461431f565b92915050565b61435081614176565b811461435a575f80fd5b50565b5f8135905061436b81614347565b92915050565b5f8060408385031215614387576143866140a7565b5b5f614394858286016140f1565b92505060206143a58582860161435d565b9150509250929050565b5f602082840312156143c4576143c36140a7565b5b5f6143d18482850161435d565b91505092915050565b5f805f80608085870312156143f2576143f16140a7565b5b5f6143ff87828801614124565b945050602061441087828801614124565b935050604061442187828801614124565b925050606061443287828801614124565b91505092959194509250565b5f8060408385031215614454576144536140a7565b5b5f614461858286016140f1565b9250506020614472858286016140f1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806144c057607f821691505b6020821081036144d3576144d261447c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61450d602083614007565b9150614518826144d9565b602082019050919050565b5f6020820190508181035f83015261453a81614501565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61457882614105565b915061458383614105565b925082820261459181614105565b915082820484148315176145a8576145a7614541565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6145e682614105565b91506145f183614105565b925082614601576146006145af565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614666602f83614007565b91506146718261460c565b604082019050919050565b5f6020820190508181035f8301526146938161465a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6146f4602883614007565b91506146ff8261469a565b604082019050919050565b5f6020820190508181035f830152614721816146e8565b9050919050565b5f61473282614105565b915061473d83614105565b925082820190508082111561475557614754614541565b5b92915050565b5f61476582614105565b915061477083614105565b925082820390508181111561478857614787614541565b5b92915050565b5f81905092915050565b50565b5f6147a65f8361478e565b91506147b182614798565b5f82019050919050565b5f6147c58261479b565b9150819050919050565b5f6060820190506147e25f8301866141a9565b6147ef60208301856141a9565b6147fc60408301846141a9565b949350505050565b5f819050919050565b5f61482761482261481d84614804565b6141fc565b614105565b9050919050565b6148378161480d565b82525050565b5f60c0820190506148505f8301896142eb565b61485d60208301886141a9565b61486a604083018761482e565b614877606083018661482e565b61488460808301856142eb565b61489160a08301846141a9565b979650505050505050565b5f815190506148aa8161410e565b92915050565b5f805f606084860312156148c7576148c66140a7565b5b5f6148d48682870161489c565b93505060206148e58682870161489c565b92505060406148f68682870161489c565b9150509250925092565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61495a603983614007565b915061496582614900565b604082019050919050565b5f6020820190508181035f8301526149878161494e565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6149e8602583614007565b91506149f38261498e565b604082019050919050565b5f6020820190508181035f830152614a15816149dc565b9050919050565b7f4d617820427579466565203235250000000000000000000000000000000000005f82015250565b5f614a50600e83614007565b9150614a5b82614a1c565b602082019050919050565b5f6020820190508181035f830152614a7d81614a44565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f614ade602483614007565b9150614ae982614a84565b604082019050919050565b5f6020820190508181035f830152614b0b81614ad2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614b6c603583614007565b9150614b7782614b12565b604082019050919050565b5f6020820190508181035f830152614b9981614b60565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614bfa603483614007565b9150614c0582614ba0565b604082019050919050565b5f6020820190508181035f830152614c2781614bee565b9050919050565b7f4d61782053656c6c4665652032352500000000000000000000000000000000005f82015250565b5f614c62600f83614007565b9150614c6d82614c2e565b602082019050919050565b5f6020820190508181035f830152614c8f81614c56565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614cf0602683614007565b9150614cfb82614c96565b604082019050919050565b5f6020820190508181035f830152614d1d81614ce4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614d7e602483614007565b9150614d8982614d24565b604082019050919050565b5f6020820190508181035f830152614dab81614d72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614e0c602283614007565b9150614e1782614db2565b604082019050919050565b5f6020820190508181035f830152614e3981614e00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614e9a602583614007565b9150614ea582614e40565b604082019050919050565b5f6020820190508181035f830152614ec781614e8e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614f28602383614007565b9150614f3382614ece565b604082019050919050565b5f6020820190508181035f830152614f5581614f1c565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f90601683614007565b9150614f9b82614f5c565b602082019050919050565b5f6020820190508181035f830152614fbd81614f84565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f615044604983614007565b915061504f82614fc4565b606082019050919050565b5f6020820190508181035f83015261507181615038565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6150d2603583614007565b91506150dd82615078565b604082019050919050565b5f6020820190508181035f8301526150ff816150c6565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61513a601383614007565b915061514582615106565b602082019050919050565b5f6020820190508181035f8301526151678161512e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6151c8603683614007565b91506151d38261516e565b604082019050919050565b5f6020820190508181035f8301526151f5816151bc565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615264816140db565b92915050565b5f6020828403121561527f5761527e6140a7565b5b5f61528c84828501615256565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152c7816140ca565b82525050565b5f6152d883836152be565b60208301905092915050565b5f602082019050919050565b5f6152fa82615295565b615304818561529f565b935061530f836152af565b805f5b8381101561533f57815161532688826152cd565b9750615331836152e4565b925050600181019050615312565b5085935050505092915050565b5f60a08201905061535f5f8301886141a9565b61536c602083018761482e565b818103604083015261537e81866152f0565b905061538d60608301856142eb565b61539a60808301846141a9565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6153fe602683614007565b9150615409826153a4565b604082019050919050565b5f6020820190508181035f83015261542b816153f2565b905091905056fea2646970667358221220716f06d1303a2b6b0b18552b7e1616a6c1b4170e6350ff9615366ca835a9c84b64736f6c63430008170033

Deployed Bytecode Sourcemap

32652:19470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9579:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11746:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33843:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34280:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32854:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10699:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34064:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34024;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39279:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12397:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41218:108;;;;;;;;;;;;;:::i;:::-;;32948:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10541:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13298:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33986:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32912:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33257:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42034:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48003:2079;;;;;;;;;;;;;:::i;:::-;;33811:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33337:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10870:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2814:103;;;;;;;;;;;;;:::i;:::-;;38381:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39827:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33072:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33037:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33704:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37517:812;;;;;;;;;;;;;:::i;:::-;;33374:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2163:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33109:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33879:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40090:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9798:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41526:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33778:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34104:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33955:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33669:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14016:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40198:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11210:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34501:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33297:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41336:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39562:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33590:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33142:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38774:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33638:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11448:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33184:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40703:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38569:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33741:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3072:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33917:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33224:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9579:100;9633:13;9666:5;9659:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9579:100;:::o;11746:169::-;11829:4;11846:39;11855:12;:10;:12::i;:::-;11869:7;11878:6;11846:8;:39::i;:::-;11903:4;11896:11;;11746:169;;;;:::o;33843:29::-;;;;:::o;34280:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32854:51::-;;;:::o;10699:108::-;10760:7;10787:12;;10780:19;;10699:108;:::o;34064:33::-;;;;:::o;34024:::-;;;;:::o;39279:275::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39416:4:::1;39408;39403:1;39387:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39386:26;;;;:::i;:::-;39385:35;;;;:::i;:::-;39375:6;:45;;39353:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39539:6;39529;:17;;;;:::i;:::-;39506:20;:40;;;;39279:275:::0;:::o;12397:492::-;12537:4;12554:36;12564:6;12572:9;12583:6;12554:9;:36::i;:::-;12603:24;12630:11;:19;12642:6;12630:19;;;;;;;;;;;;;;;:33;12650:12;:10;:12::i;:::-;12630:33;;;;;;;;;;;;;;;;12603:60;;12702:6;12682:16;:26;;12674:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12789:57;12798:6;12806:12;:10;:12::i;:::-;12839:6;12820:16;:25;12789:8;:57::i;:::-;12877:4;12870:11;;;12397:492;;;;;:::o;41218:108::-;41279:9;;;;;;;;;;;41265:23;;:10;:23;;;41257:32;;;;;;41314:4;41302:9;;:16;;;;;;;;;;;;;;;;;;41218:108::o;32948:53::-;32994:6;32948:53;:::o;10541:93::-;10599:5;10624:2;10617:9;;10541:93;:::o;13298:215::-;13386:4;13403:80;13412:12;:10;:12::i;:::-;13426:7;13472:10;13435:11;:25;13447:12;:10;:12::i;:::-;13435:25;;;;;;;;;;;;;;;:34;13461:7;13435:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13403:8;:80::i;:::-;13501:4;13494:11;;13298:215;;;;:::o;33986:31::-;;;;:::o;32912:29::-;;;;;;;;;;;;;:::o;33257:33::-;;;;;;;;;;;;;:::o;42034:126::-;42100:4;42124:19;:28;42144:7;42124:28;;;;;;;;;;;;;;;;;;;;;;;;;42117:35;;42034:126;;;:::o;48003:2079::-;48052:9;;;;;;;;;;;48049:2019;;;48080:23;48106:24;48124:4;48106:9;:24::i;:::-;48080:50;;48141:25;48230:12;;48209:18;;48188;;48169:16;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;48141:101;;48253:12;48301:1;48282:15;:20;:46;;;;48327:1;48306:17;:22;48282:46;48278:85;;;48345:7;;;;;48278:85;48379:9;;;;;;;;;;;48375:246;;48447:2;48426:18;;:23;;;;:::i;:::-;48408:15;:41;48404:123;;;48509:2;48488:18;;:23;;;;:::i;:::-;48470:41;;48404:123;48375:246;;;48585:24;48603:4;48585:9;:24::i;:::-;48567:42;;48375:246;48692:23;48779:1;48759:17;48737:18;;48719:15;:36;;;;:::i;:::-;48718:58;;;;:::i;:::-;:62;;;;:::i;:::-;48692:88;;48791:26;48820:36;48840:15;48820;:19;;:36;;;;:::i;:::-;48791:65;;48869:25;48897:21;48869:49;;48931:36;48948:18;48931:16;:36::i;:::-;48980:18;49001:44;49027:17;49001:21;:25;;:44;;;;:::i;:::-;48980:65;;49052:21;49076:55;49113:17;49076:32;49091:16;;49076:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;49052:79;;49142:23;49168:57;49207:17;49168:34;49183:18;;49168:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;49142:83;;49236:17;49256:51;49289:17;49256:28;49271:12;;49256:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49236:71;;49320:23;49393:9;49375:15;49359:13;49346:10;:26;;;;:::i;:::-;:44;;;;:::i;:::-;:56;;;;:::i;:::-;49320:82;;49436:1;49415:18;:22;;;;49461:1;49442:16;:20;;;;49494:1;49473:18;:22;;;;49521:1;49506:12;:16;;;;49557:9;;;;;;;;;;;49549:23;;49580:9;49549:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49535:59;;;;;49627:15;;;;;;;;;;;49619:29;;49656:15;49619:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49605:71;;;;;49713:1;49695:15;:19;:42;;;;;49736:1;49718:15;:19;49695:42;49691:278;;;49754:46;49767:15;49784;49754:12;:46::i;:::-;49820:137;49853:18;49890:15;49924:18;;49820:137;;;;;;;;:::i;:::-;;;;;;;;49691:278;50003:13;;;;;;;;;;;49995:27;;50030:21;49995:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49981:75;;;;;48062:2006;;;;;;;;;;;48049:2019;48003:2079;:::o;33811:28::-;;;;:::o;33337:30::-;;;;;;;;;;;;;:::o;10870:127::-;10944:7;10971:9;:18;10981:7;10971:18;;;;;;;;;;;;;;;;10964:25;;10870:127;;;:::o;2814:103::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2879:30:::1;2906:1;2879:18;:30::i;:::-;2814:103::o:0;38381:121::-;38433:4;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38467:5:::1;38450:14;;:22;;;;;;;;;;;;;;;;;;38490:4;38483:11;;38381:121:::0;:::o;39827:167::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39982:4:::1;39940:31;:39;39972:6;39940:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39827:167:::0;;:::o;33072:30::-;;;;;;;;;;;;;:::o;33037:28::-;;;;;;;;;;;;;:::o;33704:30::-;;;;:::o;37517:812::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37574:35:::1;37631:42;37574:100;;37688:58;37722:16;37741:4;37688:25;:58::i;:::-;37774:17;37794:21;37774:41;;37826:19;37880:3;37875:2;37848:24;37866:4;37848:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;37826:57;;37914:62;37931:4;37946:15;37964:11;37914:8;:62::i;:::-;37989:15;:31;;;38028:9;38061:4;38081:11;38111:1;38158::::0;38201:9:::1;;;;;;;;;;;38225:15;37989:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38278:4;38262:13;;:20;;;;;;;;;;;;;;;;;;38307:4;38293:11;;:18;;;;;;;;;;;;;;;;;;37561:768;;;37517:812::o:0;33374:29::-;;;;;;;;;;;;;:::o;2163:87::-;2209:7;2236:6;;;;;;;;;;;2229:13;;2163:87;:::o;33109:24::-;;;;;;;;;;;;;:::o;33879:31::-;;;;:::o;40090:100::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40175:7:::1;40161:11;;:21;;;;;;;;;;;;;;;;;;40090:100:::0;:::o;9798:104::-;9854:13;9887:7;9880:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9798:104;:::o;41526:304::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41670:13:::1;;;;;;;;;;;41662:21;;:4;:21;;::::0;41640:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41781:41;41810:4;41816:5;41781:28;:41::i;:::-;41526:304:::0;;:::o;33778:24::-;;;;:::o;34104:27::-;;;;:::o;33955:25::-;;;;:::o;33669:28::-;;;;:::o;14016:413::-;14109:4;14126:24;14153:11;:25;14165:12;:10;:12::i;:::-;14153:25;;;;;;;;;;;;;;;:34;14179:7;14153:34;;;;;;;;;;;;;;;;14126:61;;14226:15;14206:16;:35;;14198:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14319:67;14328:12;:10;:12::i;:::-;14342:7;14370:15;14351:16;:34;14319:8;:67::i;:::-;14417:4;14410:11;;;14016:413;;;;:::o;40198:497::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40432:2:::1;40420:7;40404:13;40388;40374:11;:27;;;;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;40373:61;;40365:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:11;40458:13;:27;;;;40514:13;40496:15;:31;;;;40556:13;40538:15;:31;;;;40592:7;40580:9;:19;;;;40677:9;;40659:15;;40641;;40625:13;;:31;;;;:::i;:::-;:49;;;;:::i;:::-;:61;;;;:::i;:::-;40610:12;:76;;;;40198:497:::0;;;;:::o;11210:175::-;11296:4;11313:42;11323:12;:10;:12::i;:::-;11337:9;11348:6;11313:9;:42::i;:::-;11373:4;11366:11;;11210:175;;;;:::o;34501:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33297:33::-;;;;;;;;;;;;;:::o;41336:182::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41452:8:::1;41421:19;:28;41441:7;41421:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41492:7;41476:34;;;41501:8;41476:34;;;;;;:::i;:::-;;;;;;;;41336:182:::0;;:::o;39562:256::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39702:4:::1;39694;39689:1;39673:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39672:26;;;;:::i;:::-;39671:35;;;;:::i;:::-;39661:6;:45;;39639:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39803:6;39793;:17;;;;:::i;:::-;39781:9;:29;;;;39562:256:::0;:::o;33590:39::-;;;;;;;;;;;;;:::o;33142:35::-;;;;:::o;38774:497::-;38882:4;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38961:6:::1;38956:1;38940:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38939:28;;;;:::i;:::-;38926:9;:41;;38904:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39116:4;39111:1;39095:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39094:26;;;;:::i;:::-;39081:9;:39;;39059:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39232:9;39211:18;:30;;;;39259:4;39252:11;;38774:497:::0;;;:::o;33638:27::-;;;;:::o;11448:151::-;11537:7;11564:11;:18;11576:5;11564:18;;;;;;;;;;;;;;;:27;11583:7;11564:27;;;;;;;;;;;;;;;;11557:34;;11448:151;;;;:::o;33184:33::-;;;;:::o;40703:507::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40938:2:::1;40926:7;40910:13;40894;40880:11;:27;;;;:::i;:::-;:43;;;;:::i;:::-;:53;;;;:::i;:::-;40879:61;;40871:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40982:11;40965:14;:28;;;;41023:13;41004:16;:32;;;;41066:13;41047:16;:32;;;;41103:7;41090:10;:20;;;;41192:10;;41173:16;;41154;;41137:14;;:33;;;;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;41121:13;:81;;;;40703:507:::0;;;;:::o;38569:135::-;38629:4;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38669:5:::1;38646:20;;:28;;;;;;;;;;;;;;;;;;38692:4;38685:11;;38569:135:::0;:::o;33741:30::-;;;;:::o;3072:201::-;2394:12;:10;:12::i;:::-;2383:23;;:7;:5;:7::i;:::-;:23;;;2375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3181:1:::1;3161:22;;:8;:22;;::::0;3153:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3237:28;3256:8;3237:18;:28::i;:::-;3072:201:::0;:::o;33917:31::-;;;;:::o;33224:24::-;;;;:::o;836:98::-;889:7;916:10;909:17;;836:98;:::o;17700:380::-;17853:1;17836:19;;:5;:19;;;17828:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17934:1;17915:21;;:7;:21;;;17907:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18018:6;17988:11;:18;18000:5;17988:18;;;;;;;;;;;;;;;:27;18007:7;17988:27;;;;;;;;;;;;;;;:36;;;;18056:7;18040:32;;18049:5;18040:32;;;18065:6;18040:32;;;;;;:::i;:::-;;;;;;;;17700:380;;;:::o;42168:4707::-;42316:1;42300:18;;:4;:18;;;42292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42393:1;42379:16;;:2;:16;;;42371:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42462:1;42452:6;:11;42448:93;;42480:28;42496:4;42502:2;42506:1;42480:15;:28::i;:::-;42523:7;;42448:93;42557:14;;;;;;;;;;;42553:2487;;;42618:7;:5;:7::i;:::-;42610:15;;:4;:15;;;;:49;;;;;42652:7;:5;:7::i;:::-;42646:13;;:2;:13;;;;42610:49;:86;;;;;42694:1;42680:16;;:2;:16;;;;42610:86;:128;;;;;42731:6;42717:21;;:2;:21;;;;42610:128;:158;;;;;42760:8;;;;;;;;;;;42759:9;42610:158;42588:2441;;;42808:13;;;;;;;;;;;42803:223;;42880:19;:25;42900:4;42880:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42909:19;:23;42929:2;42909:23;;;;;;;;;;;;;;;;;;;;;;;;;42880:52;42846:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;42803:223;43182:20;;;;;;;;;;;43178:641;;;43263:7;:5;:7::i;:::-;43257:13;;:2;:13;;;;:72;;;;;43313:15;43299:30;;:2;:30;;;;43257:72;:129;;;;;43372:13;;;;;;;;;;;43358:28;;:2;:28;;;;43257:129;43227:573;;;43550:12;43475:28;:39;43504:9;43475:39;;;;;;;;;;;;;;;;:87;43437:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43764:12;43722:28;:39;43751:9;43722:39;;;;;;;;;;;;;;;:54;;;;43227:573;43178:641;43893:25;:31;43919:4;43893:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43950:31;:35;43982:2;43950:35;;;;;;;;;;;;;;;;;;;;;;;;;43949:36;43893:92;43867:1147;;;44072:20;;44062:6;:30;;44028:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44280:9;;44263:13;44273:2;44263:9;:13::i;:::-;44254:6;:22;;;;:::i;:::-;:35;;44220:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43867:1147;;;44458:25;:29;44484:2;44458:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44513:31;:37;44545:4;44513:37;;;;;;;;;;;;;;;;;;;;;;;;;44512:38;44458:92;44432:582;;;44637:20;;44627:6;:30;;44593:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44432:582;;;44794:31;:35;44826:2;44794:35;;;;;;;;;;;;;;;;;;;;;;;;;44789:225;;44914:9;;44897:13;44907:2;44897:9;:13::i;:::-;44888:6;:22;;;;:::i;:::-;:35;;44854:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44789:225;44432:582;43867:1147;42588:2441;42553:2487;45052:28;45083:24;45101:4;45083:9;:24::i;:::-;45052:55;;45120:12;45158:1;45135:20;:24;:37;;;;;45164:8;;;;;;;;;;;45163:9;45135:37;:52;;;;;45176:11;;;;;;;;;;;45135:52;:88;;;;;45192:25;:31;45218:4;45192:31;;;;;;;;;;;;;;;;;;;;;;;;;45191:32;45135:88;45120:103;;45254:7;45236:140;;;45300:4;45289:8;;:15;;;;;;;;;;;;;;;;;;45321:10;:8;:10::i;:::-;45359:5;45348:8;;:16;;;;;;;;;;;;;;;;;;45236:140;45388:12;45404:8;;;;;;;;;;;45403:9;45388:24;;45514:19;:25;45534:4;45514:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45543:19;:23;45563:2;45543:23;;;;;;;;;;;;;;;;;;;;;;;;;45514:52;45510:100;;;45593:5;45583:15;;45510:100;45622:12;45727:7;45723:1099;;;45779:25;:29;45805:2;45779:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45828:1;45812:13;;:17;45779:50;45775:898;;;45857:34;45887:3;45857:25;45868:13;;45857:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45850:41;;45944:13;;45926:14;;45919:4;:21;;;;:::i;:::-;45918:39;;;;:::i;:::-;45898:16;;:59;;;;;;;:::i;:::-;;;;;;;;46026:13;;46006:16;;45999:4;:23;;;;:::i;:::-;45998:41;;;;:::i;:::-;45976:18;;:63;;;;;;;:::i;:::-;;;;;;;;46096:13;;46082:10;;46075:4;:17;;;;:::i;:::-;46074:35;;;;:::i;:::-;46058:12;;:51;;;;;;;:::i;:::-;;;;;;;;46178:13;;46158:16;;46151:4;:23;;;;:::i;:::-;46150:41;;;;:::i;:::-;46128:18;;:63;;;;;;;:::i;:::-;;;;;;;;45775:898;;;46253:25;:31;46279:4;46253:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46303:1;46288:12;;:16;46253:51;46249:424;;;46332:33;46361:3;46332:24;46343:12;;46332:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46325:40;;46417:12;;46400:13;;46393:4;:20;;;;:::i;:::-;46392:37;;;;:::i;:::-;46372:16;;:57;;;;;;;:::i;:::-;;;;;;;;46497:12;;46478:15;;46471:4;:22;;;;:::i;:::-;46470:39;;;;:::i;:::-;46448:18;;:61;;;;;;;:::i;:::-;;;;;;;;46565:12;;46552:9;;46545:4;:16;;;;:::i;:::-;46544:33;;;;:::i;:::-;46528:12;;:49;;;;;;;:::i;:::-;;;;;;;;46645:12;;46626:15;;46619:4;:22;;;;:::i;:::-;46618:39;;;;:::i;:::-;46596:18;;:61;;;;;;;:::i;:::-;;;;;;;;46249:424;45775:898;46700:1;46693:4;:8;46689:91;;;46722:42;46738:4;46752;46759;46722:15;:42::i;:::-;46689:91;46806:4;46796:14;;;;;:::i;:::-;;;45723:1099;46834:33;46850:4;46856:2;46860:6;46834:15;:33::i;:::-;42281:4594;;;;42168:4707;;;;:::o;22796:98::-;22854:7;22885:1;22881;:5;;;;:::i;:::-;22874:12;;22796:98;;;;:::o;46883:589::-;47009:21;47047:1;47033:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47009:40;;47078:4;47060;47065:1;47060:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47104:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47094:4;47099:1;47094:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47139:62;47156:4;47171:15;47189:11;47139:8;:62::i;:::-;47240:15;:66;;;47321:11;47347:1;47391:4;47418;47438:15;47240:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46938:534;46883:589;:::o;23153:98::-;23211:7;23242:1;23238;:5;;;;:::i;:::-;23231:12;;23153:98;;;;:::o;23552:::-;23610:7;23641:1;23637;:5;;;;:::i;:::-;23630:12;;23552:98;;;;:::o;47480:515::-;47628:62;47645:4;47660:15;47678:11;47628:8;:62::i;:::-;47733:15;:31;;;47772:9;47805:4;47825:11;47851:1;47894;47937:9;;;;;;;;;;;47961:15;47733:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47480:515;;:::o;3433:191::-;3507:16;3526:6;;;;;;;;;;;3507:25;;3552:8;3543:6;;:17;;;;;;;;;;;;;;;;;;3607:8;3576:40;;3597:8;3576:40;;;;;;;;;;;;3496:128;3433:191;:::o;41838:188::-;41955:5;41921:25;:31;41947:4;41921:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42012:5;41978:40;;42006:4;41978:40;;;;;;;;;;;;41838:188;;:::o;14919:733::-;15077:1;15059:20;;:6;:20;;;15051:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15161:1;15140:23;;:9;:23;;;15132:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15216:47;15237:6;15245:9;15256:6;15216:20;:47::i;:::-;15276:21;15300:9;:17;15310:6;15300:17;;;;;;;;;;;;;;;;15276:41;;15353:6;15336:13;:23;;15328:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15474:6;15458:13;:22;15438:9;:17;15448:6;15438:17;;;;;;;;;;;;;;;:42;;;;15526:6;15502:9;:20;15512:9;15502:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15567:9;15550:35;;15559:6;15550:35;;;15578:6;15550:35;;;;;;:::i;:::-;;;;;;;;15598:46;15618:6;15626:9;15637:6;15598:19;:46::i;:::-;15040:612;14919:733;;;:::o;50092:2023::-;50131:23;50157:24;50175:4;50157:9;:24::i;:::-;50131:50;;50192:25;50281:12;;50260:18;;50239;;50220:16;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:73;;;;:::i;:::-;50192:101;;50304:12;50352:1;50333:15;:20;:46;;;;50378:1;50357:17;:22;50333:46;50329:85;;;50396:7;;;;;50329:85;50430:9;;;;;;;;;;;50426:246;;50498:2;50477:18;;:23;;;;:::i;:::-;50459:15;:41;50455:123;;;50560:2;50539:18;;:23;;;;:::i;:::-;50521:41;;50455:123;50426:246;;;50636:24;50654:4;50636:9;:24::i;:::-;50618:42;;50426:246;50743:23;50830:1;50810:17;50788:18;;50770:15;:36;;;;:::i;:::-;50769:58;;;;:::i;:::-;:62;;;;:::i;:::-;50743:88;;50842:26;50871:36;50891:15;50871;:19;;:36;;;;:::i;:::-;50842:65;;50920:25;50948:21;50920:49;;50982:36;50999:18;50982:16;:36::i;:::-;51031:18;51052:44;51078:17;51052:21;:25;;:44;;;;:::i;:::-;51031:65;;51103:21;51127:55;51164:17;51127:32;51142:16;;51127:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;51103:79;;51193:23;51219:57;51258:17;51219:34;51234:18;;51219:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;51193:83;;51287:17;51307:51;51340:17;51307:28;51322:12;;51307:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;51287:71;;51371:23;51444:9;51426:15;51410:13;51397:10;:26;;;;:::i;:::-;:44;;;;:::i;:::-;:56;;;;:::i;:::-;51371:82;;51487:1;51466:18;:22;;;;51512:1;51493:16;:20;;;;51545:1;51524:18;:22;;;;51572:1;51557:12;:16;;;;51608:9;;;;;;;;;;;51600:23;;51631:9;51600:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51586:59;;;;;51678:15;;;;;;;;;;;51670:29;;51707:15;51670:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51656:71;;;;;51764:1;51746:15;:19;:42;;;;;51787:1;51769:15;:19;51746:42;51742:278;;;51805:46;51818:15;51835;51805:12;:46::i;:::-;51871:137;51904:18;51941:15;51975:18;;51871:137;;;;;;;;:::i;:::-;;;;;;;;51742:278;52054:13;;;;;;;;;;;52046:27;;52081:21;52046:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52032:75;;;;;50120:1995;;;;;;;;;;;50092:2023;:::o;18680:125::-;;;;:::o;19409:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446: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:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:323::-;7644:6;7693:2;7681:9;7672:7;7668:23;7664:32;7661:119;;;7699:79;;:::i;:::-;7661:119;7819:1;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7790:114;7588:323;;;;:::o;7917:765::-;8003:6;8011;8019;8027;8076:3;8064:9;8055:7;8051:23;8047:33;8044:120;;;8083:79;;:::i;:::-;8044:120;8203:1;8228:53;8273:7;8264:6;8253:9;8249:22;8228:53;:::i;:::-;8218:63;;8174:117;8330:2;8356:53;8401:7;8392:6;8381:9;8377:22;8356:53;:::i;:::-;8346:63;;8301:118;8458:2;8484:53;8529:7;8520:6;8509:9;8505:22;8484:53;:::i;:::-;8474:63;;8429:118;8586:2;8612:53;8657:7;8648:6;8637:9;8633:22;8612:53;:::i;:::-;8602:63;;8557:118;7917:765;;;;;;;:::o;8688:474::-;8756:6;8764;8813:2;8801:9;8792:7;8788:23;8784:32;8781:119;;;8819:79;;:::i;:::-;8781:119;8939:1;8964:53;9009:7;9000:6;8989:9;8985:22;8964:53;:::i;:::-;8954:63;;8910:117;9066:2;9092:53;9137:7;9128:6;9117:9;9113:22;9092:53;:::i;:::-;9082:63;;9037:118;8688:474;;;;;:::o;9168:180::-;9216:77;9213:1;9206:88;9313:4;9310:1;9303:15;9337:4;9334:1;9327:15;9354:320;9398:6;9435:1;9429:4;9425:12;9415:22;;9482:1;9476:4;9472:12;9503:18;9493:81;;9559:4;9551:6;9547:17;9537:27;;9493:81;9621:2;9613:6;9610:14;9590:18;9587:38;9584:84;;9640:18;;:::i;:::-;9584:84;9405:269;9354:320;;;:::o;9680:182::-;9820:34;9816:1;9808:6;9804:14;9797:58;9680:182;:::o;9868:366::-;10010:3;10031:67;10095:2;10090:3;10031:67;:::i;:::-;10024:74;;10107:93;10196:3;10107:93;:::i;:::-;10225:2;10220:3;10216:12;10209:19;;9868:366;;;:::o;10240:419::-;10406:4;10444:2;10433:9;10429:18;10421:26;;10493:9;10487:4;10483:20;10479:1;10468:9;10464:17;10457:47;10521:131;10647:4;10521:131;:::i;:::-;10513:139;;10240:419;;;:::o;10665:180::-;10713:77;10710:1;10703:88;10810:4;10807:1;10800:15;10834:4;10831:1;10824:15;10851:410;10891:7;10914:20;10932:1;10914:20;:::i;:::-;10909:25;;10948:20;10966:1;10948:20;:::i;:::-;10943:25;;11003:1;11000;10996:9;11025:30;11043:11;11025:30;:::i;:::-;11014:41;;11204:1;11195:7;11191:15;11188:1;11185:22;11165:1;11158:9;11138:83;11115:139;;11234:18;;:::i;:::-;11115:139;10899:362;10851:410;;;;:::o;11267:180::-;11315:77;11312:1;11305:88;11412:4;11409:1;11402:15;11436:4;11433:1;11426:15;11453:185;11493:1;11510:20;11528:1;11510:20;:::i;:::-;11505:25;;11544:20;11562:1;11544:20;:::i;:::-;11539:25;;11583:1;11573:35;;11588:18;;:::i;:::-;11573:35;11630:1;11627;11623:9;11618:14;;11453:185;;;;:::o;11644:234::-;11784:34;11780:1;11772:6;11768:14;11761:58;11853:17;11848:2;11840:6;11836:15;11829:42;11644:234;:::o;11884:366::-;12026:3;12047:67;12111:2;12106:3;12047:67;:::i;:::-;12040:74;;12123:93;12212:3;12123:93;:::i;:::-;12241:2;12236:3;12232:12;12225:19;;11884:366;;;:::o;12256:419::-;12422:4;12460:2;12449:9;12445:18;12437:26;;12509:9;12503:4;12499:20;12495:1;12484:9;12480:17;12473:47;12537:131;12663:4;12537:131;:::i;:::-;12529:139;;12256:419;;;:::o;12681:227::-;12821:34;12817:1;12809:6;12805:14;12798:58;12890:10;12885:2;12877:6;12873:15;12866:35;12681:227;:::o;12914:366::-;13056:3;13077:67;13141:2;13136:3;13077:67;:::i;:::-;13070:74;;13153:93;13242:3;13153:93;:::i;:::-;13271:2;13266:3;13262:12;13255:19;;12914:366;;;:::o;13286:419::-;13452:4;13490:2;13479:9;13475:18;13467:26;;13539:9;13533:4;13529:20;13525:1;13514:9;13510:17;13503:47;13567:131;13693:4;13567:131;:::i;:::-;13559:139;;13286:419;;;:::o;13711:191::-;13751:3;13770:20;13788:1;13770:20;:::i;:::-;13765:25;;13804:20;13822:1;13804:20;:::i;:::-;13799:25;;13847:1;13844;13840:9;13833:16;;13868:3;13865:1;13862:10;13859:36;;;13875:18;;:::i;:::-;13859:36;13711:191;;;;:::o;13908:194::-;13948:4;13968:20;13986:1;13968:20;:::i;:::-;13963:25;;14002:20;14020:1;14002:20;:::i;:::-;13997:25;;14046:1;14043;14039:9;14031:17;;14070:1;14064:4;14061:11;14058:37;;;14075:18;;:::i;:::-;14058:37;13908:194;;;;:::o;14108:147::-;14209:11;14246:3;14231:18;;14108:147;;;;:::o;14261:114::-;;:::o;14381:398::-;14540:3;14561:83;14642:1;14637:3;14561:83;:::i;:::-;14554:90;;14653:93;14742:3;14653:93;:::i;:::-;14771:1;14766:3;14762:11;14755:18;;14381:398;;;:::o;14785:379::-;14969:3;14991:147;15134:3;14991:147;:::i;:::-;14984:154;;15155:3;15148:10;;14785:379;;;:::o;15170:442::-;15319:4;15357:2;15346:9;15342:18;15334:26;;15370:71;15438:1;15427:9;15423:17;15414:6;15370:71;:::i;:::-;15451:72;15519:2;15508:9;15504:18;15495:6;15451:72;:::i;:::-;15533;15601:2;15590:9;15586:18;15577:6;15533:72;:::i;:::-;15170:442;;;;;;:::o;15618:85::-;15663:7;15692:5;15681:16;;15618:85;;;:::o;15709:158::-;15767:9;15800:61;15818:42;15827:32;15853:5;15827:32;:::i;:::-;15818:42;:::i;:::-;15800:61;:::i;:::-;15787:74;;15709:158;;;:::o;15873:147::-;15968:45;16007:5;15968:45;:::i;:::-;15963:3;15956:58;15873:147;;:::o;16026:807::-;16275:4;16313:3;16302:9;16298:19;16290:27;;16327:71;16395:1;16384:9;16380:17;16371:6;16327:71;:::i;:::-;16408:72;16476:2;16465:9;16461:18;16452:6;16408:72;:::i;:::-;16490:80;16566:2;16555:9;16551:18;16542:6;16490:80;:::i;:::-;16580;16656:2;16645:9;16641:18;16632:6;16580:80;:::i;:::-;16670:73;16738:3;16727:9;16723:19;16714:6;16670:73;:::i;:::-;16753;16821:3;16810:9;16806:19;16797:6;16753:73;:::i;:::-;16026:807;;;;;;;;;:::o;16839:143::-;16896:5;16927:6;16921:13;16912:22;;16943:33;16970:5;16943:33;:::i;:::-;16839:143;;;;:::o;16988:663::-;17076:6;17084;17092;17141:2;17129:9;17120:7;17116:23;17112:32;17109:119;;;17147:79;;:::i;:::-;17109:119;17267:1;17292:64;17348:7;17339:6;17328:9;17324:22;17292:64;:::i;:::-;17282:74;;17238:128;17405:2;17431:64;17487:7;17478:6;17467:9;17463:22;17431:64;:::i;:::-;17421:74;;17376:129;17544:2;17570:64;17626:7;17617:6;17606:9;17602:22;17570:64;:::i;:::-;17560:74;;17515:129;16988:663;;;;;:::o;17657:244::-;17797:34;17793:1;17785:6;17781:14;17774:58;17866:27;17861:2;17853:6;17849:15;17842:52;17657:244;:::o;17907:366::-;18049:3;18070:67;18134:2;18129:3;18070:67;:::i;:::-;18063:74;;18146:93;18235:3;18146:93;:::i;:::-;18264:2;18259:3;18255:12;18248:19;;17907:366;;;:::o;18279:419::-;18445:4;18483:2;18472:9;18468:18;18460:26;;18532:9;18526:4;18522:20;18518:1;18507:9;18503:17;18496:47;18560:131;18686:4;18560:131;:::i;:::-;18552:139;;18279:419;;;:::o;18704:224::-;18844:34;18840:1;18832:6;18828:14;18821:58;18913:7;18908:2;18900:6;18896:15;18889:32;18704:224;:::o;18934:366::-;19076:3;19097:67;19161:2;19156:3;19097:67;:::i;:::-;19090:74;;19173:93;19262:3;19173:93;:::i;:::-;19291:2;19286:3;19282:12;19275:19;;18934:366;;;:::o;19306:419::-;19472:4;19510:2;19499:9;19495:18;19487:26;;19559:9;19553:4;19549:20;19545:1;19534:9;19530:17;19523:47;19587:131;19713:4;19587:131;:::i;:::-;19579:139;;19306:419;;;:::o;19731:164::-;19871:16;19867:1;19859:6;19855:14;19848:40;19731:164;:::o;19901:366::-;20043:3;20064:67;20128:2;20123:3;20064:67;:::i;:::-;20057:74;;20140:93;20229:3;20140:93;:::i;:::-;20258:2;20253:3;20249:12;20242:19;;19901:366;;;:::o;20273:419::-;20439:4;20477:2;20466:9;20462:18;20454:26;;20526:9;20520:4;20516:20;20512:1;20501:9;20497:17;20490:47;20554:131;20680:4;20554:131;:::i;:::-;20546:139;;20273:419;;;:::o;20698:223::-;20838:34;20834:1;20826:6;20822:14;20815:58;20907:6;20902:2;20894:6;20890:15;20883:31;20698:223;:::o;20927:366::-;21069:3;21090:67;21154:2;21149:3;21090:67;:::i;:::-;21083:74;;21166:93;21255:3;21166:93;:::i;:::-;21284:2;21279:3;21275:12;21268:19;;20927:366;;;:::o;21299:419::-;21465:4;21503:2;21492:9;21488:18;21480:26;;21552:9;21546:4;21542:20;21538:1;21527:9;21523:17;21516:47;21580:131;21706:4;21580:131;:::i;:::-;21572:139;;21299:419;;;:::o;21724:240::-;21864:34;21860:1;21852:6;21848:14;21841:58;21933:23;21928:2;21920:6;21916:15;21909:48;21724:240;:::o;21970:366::-;22112:3;22133:67;22197:2;22192:3;22133:67;:::i;:::-;22126:74;;22209:93;22298:3;22209:93;:::i;:::-;22327:2;22322:3;22318:12;22311:19;;21970:366;;;:::o;22342:419::-;22508:4;22546:2;22535:9;22531:18;22523:26;;22595:9;22589:4;22585:20;22581:1;22570:9;22566:17;22559:47;22623:131;22749:4;22623:131;:::i;:::-;22615:139;;22342:419;;;:::o;22767:239::-;22907:34;22903:1;22895:6;22891:14;22884:58;22976:22;22971:2;22963:6;22959:15;22952:47;22767:239;:::o;23012:366::-;23154:3;23175:67;23239:2;23234:3;23175:67;:::i;:::-;23168:74;;23251:93;23340:3;23251:93;:::i;:::-;23369:2;23364:3;23360:12;23353:19;;23012:366;;;:::o;23384:419::-;23550:4;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23384:419;;;:::o;23809:165::-;23949:17;23945:1;23937:6;23933:14;23926:41;23809:165;:::o;23980:366::-;24122:3;24143:67;24207:2;24202:3;24143:67;:::i;:::-;24136:74;;24219:93;24308:3;24219:93;:::i;:::-;24337:2;24332:3;24328:12;24321:19;;23980:366;;;:::o;24352:419::-;24518:4;24556:2;24545:9;24541:18;24533:26;;24605:9;24599:4;24595:20;24591:1;24580:9;24576:17;24569:47;24633:131;24759:4;24633:131;:::i;:::-;24625:139;;24352:419;;;:::o;24777:225::-;24917:34;24913:1;24905:6;24901:14;24894:58;24986:8;24981:2;24973:6;24969:15;24962:33;24777:225;:::o;25008:366::-;25150:3;25171:67;25235:2;25230:3;25171:67;:::i;:::-;25164:74;;25247:93;25336:3;25247:93;:::i;:::-;25365:2;25360:3;25356:12;25349:19;;25008:366;;;:::o;25380:419::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:223::-;25945:34;25941:1;25933:6;25929:14;25922:58;26014:6;26009:2;26001:6;25997:15;25990:31;25805:223;:::o;26034:366::-;26176:3;26197:67;26261:2;26256:3;26197:67;:::i;:::-;26190:74;;26273:93;26362:3;26273:93;:::i;:::-;26391:2;26386:3;26382:12;26375:19;;26034:366;;;:::o;26406:419::-;26572:4;26610:2;26599:9;26595:18;26587:26;;26659:9;26653:4;26649:20;26645:1;26634:9;26630:17;26623:47;26687:131;26813:4;26687:131;:::i;:::-;26679:139;;26406:419;;;:::o;26831:221::-;26971:34;26967:1;26959:6;26955:14;26948:58;27040:4;27035:2;27027:6;27023:15;27016:29;26831:221;:::o;27058:366::-;27200:3;27221:67;27285:2;27280:3;27221:67;:::i;:::-;27214:74;;27297:93;27386:3;27297:93;:::i;:::-;27415:2;27410:3;27406:12;27399:19;;27058:366;;;:::o;27430:419::-;27596:4;27634:2;27623:9;27619:18;27611:26;;27683:9;27677:4;27673:20;27669:1;27658:9;27654:17;27647:47;27711:131;27837:4;27711:131;:::i;:::-;27703:139;;27430:419;;;:::o;27855:224::-;27995:34;27991:1;27983:6;27979:14;27972:58;28064:7;28059:2;28051:6;28047:15;28040:32;27855:224;:::o;28085:366::-;28227:3;28248:67;28312:2;28307:3;28248:67;:::i;:::-;28241:74;;28324:93;28413:3;28324:93;:::i;:::-;28442:2;28437:3;28433:12;28426:19;;28085:366;;;:::o;28457:419::-;28623:4;28661:2;28650:9;28646:18;28638:26;;28710:9;28704:4;28700:20;28696:1;28685:9;28681:17;28674:47;28738:131;28864:4;28738:131;:::i;:::-;28730:139;;28457:419;;;:::o;28882:222::-;29022:34;29018:1;29010:6;29006:14;28999:58;29091:5;29086:2;29078:6;29074:15;29067:30;28882:222;:::o;29110:366::-;29252:3;29273:67;29337:2;29332:3;29273:67;:::i;:::-;29266:74;;29349:93;29438:3;29349:93;:::i;:::-;29467:2;29462:3;29458:12;29451:19;;29110:366;;;:::o;29482:419::-;29648:4;29686:2;29675:9;29671:18;29663:26;;29735:9;29729:4;29725:20;29721:1;29710:9;29706:17;29699:47;29763:131;29889:4;29763:131;:::i;:::-;29755:139;;29482:419;;;:::o;29907:172::-;30047:24;30043:1;30035:6;30031:14;30024:48;29907:172;:::o;30085:366::-;30227:3;30248:67;30312:2;30307:3;30248:67;:::i;:::-;30241:74;;30324:93;30413:3;30324:93;:::i;:::-;30442:2;30437:3;30433:12;30426:19;;30085:366;;;:::o;30457:419::-;30623:4;30661:2;30650:9;30646:18;30638:26;;30710:9;30704:4;30700:20;30696:1;30685:9;30681:17;30674:47;30738:131;30864:4;30738:131;:::i;:::-;30730:139;;30457:419;;;:::o;30882:297::-;31022:34;31018:1;31010:6;31006:14;30999:58;31091:34;31086:2;31078:6;31074:15;31067:59;31160:11;31155:2;31147:6;31143:15;31136:36;30882:297;:::o;31185:366::-;31327:3;31348:67;31412:2;31407:3;31348:67;:::i;:::-;31341:74;;31424:93;31513:3;31424:93;:::i;:::-;31542:2;31537:3;31533:12;31526:19;;31185:366;;;:::o;31557:419::-;31723:4;31761:2;31750:9;31746:18;31738:26;;31810:9;31804:4;31800:20;31796:1;31785:9;31781:17;31774:47;31838:131;31964:4;31838:131;:::i;:::-;31830:139;;31557:419;;;:::o;31982:240::-;32122:34;32118:1;32110:6;32106:14;32099:58;32191:23;32186:2;32178:6;32174:15;32167:48;31982:240;:::o;32228:366::-;32370:3;32391:67;32455:2;32450:3;32391:67;:::i;:::-;32384:74;;32467:93;32556:3;32467:93;:::i;:::-;32585:2;32580:3;32576:12;32569:19;;32228:366;;;:::o;32600:419::-;32766:4;32804:2;32793:9;32789:18;32781:26;;32853:9;32847:4;32843:20;32839:1;32828:9;32824:17;32817:47;32881:131;33007:4;32881:131;:::i;:::-;32873:139;;32600:419;;;:::o;33025:169::-;33165:21;33161:1;33153:6;33149:14;33142:45;33025:169;:::o;33200:366::-;33342:3;33363:67;33427:2;33422:3;33363:67;:::i;:::-;33356:74;;33439:93;33528:3;33439:93;:::i;:::-;33557:2;33552:3;33548:12;33541:19;;33200:366;;;:::o;33572:419::-;33738:4;33776:2;33765:9;33761:18;33753:26;;33825:9;33819:4;33815:20;33811:1;33800:9;33796:17;33789:47;33853:131;33979:4;33853:131;:::i;:::-;33845:139;;33572:419;;;:::o;33997:241::-;34137:34;34133:1;34125:6;34121:14;34114:58;34206:24;34201:2;34193:6;34189:15;34182:49;33997:241;:::o;34244:366::-;34386:3;34407:67;34471:2;34466:3;34407:67;:::i;:::-;34400:74;;34483:93;34572:3;34483:93;:::i;:::-;34601:2;34596:3;34592:12;34585:19;;34244:366;;;:::o;34616:419::-;34782:4;34820:2;34809:9;34805:18;34797:26;;34869:9;34863:4;34859:20;34855:1;34844:9;34840:17;34833:47;34897:131;35023:4;34897:131;:::i;:::-;34889:139;;34616:419;;;:::o;35041:180::-;35089:77;35086:1;35079:88;35186:4;35183:1;35176:15;35210:4;35207:1;35200:15;35227:180;35275:77;35272:1;35265:88;35372:4;35369:1;35362:15;35396:4;35393:1;35386:15;35413:143;35470:5;35501:6;35495:13;35486:22;;35517:33;35544:5;35517:33;:::i;:::-;35413:143;;;;:::o;35562:351::-;35632:6;35681:2;35669:9;35660:7;35656:23;35652:32;35649:119;;;35687:79;;:::i;:::-;35649:119;35807:1;35832:64;35888:7;35879:6;35868:9;35864:22;35832:64;:::i;:::-;35822:74;;35778:128;35562:351;;;;:::o;35919:114::-;35986:6;36020:5;36014:12;36004:22;;35919:114;;;:::o;36039:184::-;36138:11;36172:6;36167:3;36160:19;36212:4;36207:3;36203:14;36188:29;;36039:184;;;;:::o;36229:132::-;36296:4;36319:3;36311:11;;36349:4;36344:3;36340:14;36332:22;;36229:132;;;:::o;36367:108::-;36444:24;36462:5;36444:24;:::i;:::-;36439:3;36432:37;36367:108;;:::o;36481:179::-;36550:10;36571:46;36613:3;36605:6;36571:46;:::i;:::-;36649:4;36644:3;36640:14;36626:28;;36481:179;;;;:::o;36666:113::-;36736:4;36768;36763:3;36759:14;36751:22;;36666:113;;;:::o;36815:732::-;36934:3;36963:54;37011:5;36963:54;:::i;:::-;37033:86;37112:6;37107:3;37033:86;:::i;:::-;37026:93;;37143:56;37193:5;37143:56;:::i;:::-;37222:7;37253:1;37238:284;37263:6;37260:1;37257:13;37238:284;;;37339:6;37333:13;37366:63;37425:3;37410:13;37366:63;:::i;:::-;37359:70;;37452:60;37505:6;37452:60;:::i;:::-;37442:70;;37298:224;37285:1;37282;37278:9;37273:14;;37238:284;;;37242:14;37538:3;37531:10;;36939:608;;;36815:732;;;;:::o;37553:831::-;37816:4;37854:3;37843:9;37839:19;37831:27;;37868:71;37936:1;37925:9;37921:17;37912:6;37868:71;:::i;:::-;37949:80;38025:2;38014:9;38010:18;38001:6;37949:80;:::i;:::-;38076:9;38070:4;38066:20;38061:2;38050:9;38046:18;38039:48;38104:108;38207:4;38198:6;38104:108;:::i;:::-;38096:116;;38222:72;38290:2;38279:9;38275:18;38266:6;38222:72;:::i;:::-;38304:73;38372:3;38361:9;38357:19;38348:6;38304:73;:::i;:::-;37553:831;;;;;;;;:::o;38390:225::-;38530:34;38526:1;38518:6;38514:14;38507:58;38599:8;38594:2;38586:6;38582:15;38575:33;38390:225;:::o;38621:366::-;38763:3;38784:67;38848:2;38843:3;38784:67;:::i;:::-;38777:74;;38860:93;38949:3;38860:93;:::i;:::-;38978:2;38973:3;38969:12;38962:19;;38621:366;;;:::o;38993:419::-;39159:4;39197:2;39186:9;39182:18;39174:26;;39246:9;39240:4;39236:20;39232:1;39221:9;39217:17;39210:47;39274:131;39400:4;39274:131;:::i;:::-;39266:139;;38993:419;;;:::o

Swarm Source

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