ETH Price: $3,290.14 (+1.35%)
Gas: 1 Gwei

Token

Dividend (DDIV)
 

Overview

Max Total Supply

100,000,000 DDIV

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.720644485536518611 DDIV

Value
$0.00
0xd8b7bdc37c474afcb43d2a9d74b89c484eb7d72e
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:
DIVIDEND

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-28
*/

/**
$DDIV 

DIVIDEND

Welcome to the future of decentralized finance with 'DIVIDEND' 
- an extraordinary crypto token that redefines the way we engage 
with financial ecosystems.

Website: https://dividendtoken.site
Dapp: https://dividendtoken.app
Telegram: https://t.me/DividendPortal
Twitter: https://twitter.com/Dividenderc*/

// SPDX-License-Identifier: MIT
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;
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount) external returns (bool);
}


/**
 * @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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @title SafeMathInt
 * @dev Math operations for int256 with overflow safety checks.
 */
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}

interface DividendPayingTokenInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns(uint256);

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;
  
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);


  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
  
}

interface IPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);

}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract DividendPayingToken is ERC20, DividendPayingTokenInterface, Ownable {

  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;

  address public LP_Token;


  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;

  // About dividendCorrection:
  // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user)`.
  // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens),
  //   `dividendOf(_user)` should not be changed,
  //   but the computed value of `dividendPerShare * balanceOf(_user)` is changed.
  // To keep the `dividendOf(_user)` unchanged, we add a correction term:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`,
  //   where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed:
  //   `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`.
  // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed.
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;
  uint256 public totalDividendsWithdrawn;

  constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}

  function distributeLPDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

    if (amount > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (amount).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, amount);

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(payable(msg.sender));
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
 function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      totalDividendsWithdrawn += _withdrawableDividend;
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = IERC20(LP_Token).transfer(user, _withdrawableDividend);

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        totalDividendsWithdrawn -= _withdrawableDividend;
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }


  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  /// @dev Internal function that transfer tokens from one address to another.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param from The address to transfer from.
  /// @param to The address to transfer to.
  /// @param value The amount to be transferred.
  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  /// @dev Internal function that mints tokens to an account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account that will receive the created tokens.
  /// @param value The amount that will be created.
  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  /// @dev Internal function that burns an amount of the token of a given account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account whose tokens will be burnt.
  /// @param value The amount that will be burnt.
  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}


contract DDIVDividendTracker is Ownable, DividendPayingToken {
    struct AccountInfo {
        address account;
        uint256 withdrawableDividends;
        uint256 totalDividends;
        uint256 lastClaimTime;
    }

    mapping(address => bool) public excludedFromDividends;

    mapping(address => uint256) public lastClaimTimes;

    event ExcludeFromDividends(address indexed account, bool value);
    event Claim(address indexed account, uint256 amount);

    constructor()
        DividendPayingToken("Linq_Dividend_Tracker", "Linq_Dividend_Tracker")
    {}

    function trackerRescueETH20Tokens(address recipient, address tokenAddress)
        external
        onlyOwner
    {
        IERC20(tokenAddress).transfer(
            recipient,
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    function updateLP_Token(address _lpToken) external onlyOwner {
        LP_Token = _lpToken;
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Linq_Dividend_Tracker: No transfers allowed");
    }

    function excludeFromDividends(address account, bool value)
        external
        onlyOwner
    {
        require(excludedFromDividends[account] != value);
        excludedFromDividends[account] = value;
        if (value == true) {
            _setBalance(account, 0);
        } else {
            _setBalance(account, balanceOf(account));
        }
        emit ExcludeFromDividends(account, value);
    }

    function getAccount(address account)
        public
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        AccountInfo memory info;
        info.account = account;
        info.withdrawableDividends = withdrawableDividendOf(account);
        info.totalDividends = accumulativeDividendOf(account);
        info.lastClaimTime = lastClaimTimes[account];
        return (
            info.account,
            info.withdrawableDividends,
            info.totalDividends,
            info.lastClaimTime,
            totalDividendsWithdrawn
        );
    }

    function setBalance(address account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        _setBalance(account, newBalance);
    }

    function processAccount(address payable account)
        external
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);

        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount);
            return true;
        }
        return false;
    }
}

contract DIVIDEND is ERC20, Ownable {
    IUniswapRouter public router;
    address public pair;

    bool private swapping;
    bool public swapEnabled = true;
    bool public claimEnabled;
    bool public tradingEnabled;

    DDIVDividendTracker public dividendTracker;

    address public marketingWallet;

    uint256 public swapTokensAtAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    struct Taxes {
        uint256 liquidity;
        uint256 marketing;
        uint256 burn;
    }

    Taxes public buyTaxes = Taxes(0, 2, 0);
    Taxes public sellTaxes = Taxes(0, 2, 0);

    uint256 public totalBuyTax = 2;
    uint256 public totalSellTax = 2;

    mapping(address => bool) public _isBot;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    ///////////////
    //   Events  //
    ///////////////

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor(address _marketingWallet) ERC20("Dividend", "DDIV") {
        dividendTracker = new DDIVDividendTracker();
        setMarketingWallet(_marketingWallet);

        IUniswapRouter _router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );

        router = _router;
        pair = _pair;
        setSwapTokensAtAmount(300000); //
        updateMaxWalletAmount(2000000);
        setMaxBuyAndSell(2000000, 2000000);

        _setAutomatedMarketMakerPair(_pair, true);

        dividendTracker.updateLP_Token(pair);

        dividendTracker.excludeFromDividends(address(dividendTracker), true);
        dividendTracker.excludeFromDividends(address(this), true);
        dividendTracker.excludeFromDividends(owner(), true);
        dividendTracker.excludeFromDividends(address(0xdead), true);
        dividendTracker.excludeFromDividends(address(_router), true);

        excludeFromMaxWallet(address(_pair), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(_router), true);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        _mint(owner(), 100000000 * (10**18));
    }

    receive() external payable {}

    function updateDividendTracker(address newAddress) public onlyOwner {
        DDIVDividendTracker newDividendTracker = DDIVDividendTracker(
            payable(newAddress)
        );
        newDividendTracker.excludeFromDividends(
            address(newDividendTracker),
            true
        );
        newDividendTracker.excludeFromDividends(address(this), true);
        newDividendTracker.excludeFromDividends(owner(), true);
        newDividendTracker.excludeFromDividends(address(router), true);
        dividendTracker = newDividendTracker;
    }

    /// @notice Manual claim the dividends
    function claim() external {
        require(claimEnabled, "Claim not enabled");
        dividendTracker.processAccount(payable(msg.sender));
    }

    function updateMaxWalletAmount(uint256 newNum) public onlyOwner {
        require(newNum >= 1000000, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * 10**18;
    }

    function setMaxBuyAndSell(uint256 maxBuy, uint256 maxSell)
        public
        onlyOwner
    {
        require(maxBuy >= 1000000, "Cannot set maxbuy lower than 1% ");
        require(maxSell >= 500000, "Cannot set maxsell lower than 0.5% ");
        maxBuyAmount = maxBuy * 10**18;
        maxSellAmount = maxSell * 10**18;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * 10**18;
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    /// @notice Withdraw tokens sent by mistake.
    /// @param tokenAddress The address of the token to withdraw
    function rescueETH20Tokens(address tokenAddress) external onlyOwner {
        IERC20(tokenAddress).transfer(
            owner(),
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    /// @notice Send remaining ETH to dev
    /// @dev It will send all ETH to dev
    function forceSend() external onlyOwner {
        uint256 ETHbalance = address(this).balance;
        (bool success, ) = payable(marketingWallet).call{value: ETHbalance}("");
        require(success);
    }

    function trackerRescueETH20Tokens(address tokenAddress) external onlyOwner {
        dividendTracker.trackerRescueETH20Tokens(msg.sender, tokenAddress);
    }

    function updateRouter(address newRouter) external onlyOwner {
        router = IUniswapRouter(newRouter);
    }

    /////////////////////////////////
    // Exclude / Include functions //
    /////////////////////////////////

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    /// @dev "true" to exlcude, "false" to include
    function excludeFromDividends(address account, bool value)
        public
        onlyOwner
    {
        dividendTracker.excludeFromDividends(account, value);
    }

    function setMarketingWallet(address newWallet) public onlyOwner {
        marketingWallet = newWallet;
    }

    function setBuyTaxes(uint256 _liquidity, uint256 _marketing, uint256 _burn) external onlyOwner {
        require(_liquidity + _marketing + _burn <= 50, "Fee must be <= 20%");
        buyTaxes = Taxes(_liquidity, _marketing, _burn);
        totalBuyTax = _liquidity + _marketing + _burn;
    }

    function setSellTaxes(uint256 _liquidity, uint256 _marketing, uint256 _burn) external onlyOwner {
        require(_liquidity + _marketing + _burn <= 99, "Fee must be <= 20%");
        sellTaxes = Taxes(_liquidity, _marketing, _burn);
        totalSellTax = _liquidity + _marketing + _burn;
    }

    /// @notice Enable or disable internal swaps
    /// @dev Set "true" to enable internal swaps for liquidity, treasury and dividends
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function activateTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
    }

    function setClaimEnabled(bool state) external onlyOwner {
        claimEnabled = state;
    }

    /// @param bot The bot address
    /// @param value "true" to blacklist, "false" to unblacklist
    function setBot(address bot, bool value) external onlyOwner {
        require(_isBot[bot] != value);
        _isBot[bot] = value;
    }

    function setLP_Token(address _lpToken) external onlyOwner {
        dividendTracker.updateLP_Token(_lpToken);
    }

    /// @dev Set new pairs created due to listing in new DEX
    function setAutomatedMarketMakerPair(address newPair, bool value)
        external
        onlyOwner
    {
        _setAutomatedMarketMakerPair(newPair, value);
    }

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

        if (value) {
            dividendTracker.excludeFromDividends(newPair, true);
        }

        emit SetAutomatedMarketMakerPair(newPair, value);
    }

    //////////////////////
    // Getter Functions //
    //////////////////////

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.balanceOf(account);
    }

    function getAccountInfo(address account)
        external
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return dividendTracker.getAccount(account);
    }

    ////////////////////////
    // Transfer Functions //
    ////////////////////////

    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 (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping
        ) {
            require(tradingEnabled, "Trading not active");
            if (automatedMarketMakerPairs[to]) {
                require(
                    amount <= maxSellAmount,
                    "You are exceeding maxSellAmount"
                );
            } else if (automatedMarketMakerPairs[from])
                require(
                    amount <= maxBuyAmount,
                    "You are exceeding maxBuyAmount"
                );
            if (!_isExcludedFromMaxWallet[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            if (totalSellTax > 0) {
                swapAndLiquify(swapTokensAtAmount);
            }

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from])
            takeFee = false;

        if (takeFee) {
            uint256 feeAmt;
            if (automatedMarketMakerPairs[to])
                feeAmt = (amount * totalSellTax) / 100;
            else if (automatedMarketMakerPairs[from])
                feeAmt = (amount * totalBuyTax) / 100;

            amount = amount - feeAmt;
            super._transfer(from, address(this), feeAmt);
        }
        super._transfer(from, to, amount);

        try dividendTracker.setBalance(from, balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(to, balanceOf(to)) {} catch {}
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 toSwapForLiq = ((tokens * sellTaxes.liquidity) / totalSellTax) / 2;
        uint256 tokensToAddLiquidityWith = ((tokens * sellTaxes.liquidity) / totalSellTax) / 2;
        uint256 toSwapForMarketing = (tokens * sellTaxes.marketing) / totalSellTax;

        uint256 toBurn = (tokens * sellTaxes.burn) / totalSellTax;

        swapTokensForETH(toSwapForLiq);

        uint256 currentbalance = address(this).balance;

        if (currentbalance > 0) {
            // Add liquidity to uni
            addLiquidity(tokensToAddLiquidityWith, currentbalance);
        }

        swapTokensForETH(toSwapForMarketing);

        uint256 EthTaxBalance = address(this).balance;

        // Send ETH to dev
        uint256 devAmt = EthTaxBalance;

        if (devAmt > 0) {
            (bool success, ) = payable(marketingWallet).call{value: devAmt}("");
            require(success, "Failed to send ETH to dev wallet");
        }

        uint256 lpBalance = IERC20(pair).balanceOf(address(this));

        //Send LP to dividends
        uint256 dividends = lpBalance;

        if (dividends > 0) {
            bool success = IERC20(pair).transfer(
                address(dividendTracker),
                dividends
            );
            if (success) {
                dividendTracker.distributeLPDividends(dividends);
                emit SendDividends(tokens, dividends);
            }
        }

        if (toBurn > 0) {
            _burn(address(this), toBurn);
        }
    }

    // transfers LP from the owners wallet to holders // must approve this contract, on pair contract before calling
    function ManualLiquidityDistribution(uint256 amount) public onlyOwner {
        bool success = IERC20(pair).transferFrom(
            msg.sender,
            address(dividendTracker),
            amount
        );
        if (success) {
            dividendTracker.distributeLPDividends(amount);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.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(router), tokenAmount);

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","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":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"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualLiquidityDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","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":"buyTaxes","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DDIVDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setClaimEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"setLP_Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxBuyAndSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"trackerRescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600760156101000a81548160ff021916908315150217905550604051806060016040528060008152602001600281526020016000815250600e60008201518160000155602082015181600101556040820151816002015550506040518060600160405280600081526020016002815260200160008152506011600082015181600001556020820151816001015560408201518160020155505060026014556002601555348015620000b657600080fd5b506040516200a67e3803806200a67e8339818101604052810190620000dc9190620011aa565b6040518060400160405280600881526020017f4469766964656e640000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4444495600000000000000000000000000000000000000000000000000000000815250816003908162000159919062001456565b5080600490816200016b919062001456565b5050506200018e62000182620008cc60201b60201c565b620008d460201b60201c565b6040516200019c9062001132565b604051809103906000f080158015620001b9573d6000803e3d6000fd5b50600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020b816200099a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000272573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002989190620011aa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003269190620011aa565b6040518363ffffffff1660e01b8152600401620003459291906200154e565b6020604051808303816000875af115801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b9190620011aa565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000423620493e0620009ee60201b60201c565b62000437621e848062000a1d60201b60201c565b6200044c621e84808062000a9560201b60201c565b6200045f81600162000b7360201b60201c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620004de91906200157b565b600060405180830381600087803b158015620004f957600080fd5b505af11580156200050e573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a0600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b815260040162000594929190620015b5565b600060405180830381600087803b158015620005af57600080fd5b505af1158015620005c4573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b815260040162000628929190620015b5565b600060405180830381600087803b1580156200064357600080fd5b505af115801562000658573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a0620006aa62000d4560201b60201c565b60016040518363ffffffff1660e01b8152600401620006cb929190620015b5565b600060405180830381600087803b158015620006e657600080fd5b505af1158015620006fb573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a061dead60016040518363ffffffff1660e01b815260040162000761929190620015b5565b600060405180830381600087803b1580156200077c57600080fd5b505af115801562000791573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b8152600401620007f5929190620015b5565b600060405180830381600087803b1580156200081057600080fd5b505af115801562000825573d6000803e3d6000fd5b505050506200083c81600162000d6f60201b60201c565b6200084f30600162000d6f60201b60201c565b6200086282600162000d6f60201b60201c565b620008846200087662000d4560201b60201c565b600162000dda60201b60201c565b6200089730600162000dda60201b60201c565b620008c3620008ab62000d4560201b60201c565b6a52b7d2dcc80cd2e400000062000f2a60201b60201c565b50505062001ae1565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620009aa6200109760201b60201c565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620009fe6200109760201b60201c565b670de0b6b3a76400008162000a14919062001611565b600a8190555050565b62000a2d6200109760201b60201c565b620f424081101562000a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a6d90620016f9565b60405180910390fd5b670de0b6b3a76400008162000a8c919062001611565b600d8190555050565b62000aa56200109760201b60201c565b620f424082101562000aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae5906200176b565b60405180910390fd5b6207a12081101562000b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b2e9062001803565b60405180910390fd5b670de0b6b3a76400008262000b4d919062001611565b600b81905550670de0b6b3a76400008162000b69919062001611565b600c819055505050565b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000c08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bff906200189b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000cfb57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b815260040162000cc6929190620015b5565b600060405180830381600087803b15801562000ce157600080fd5b505af115801562000cf6573d6000803e3d6000fd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000d7f6200109760201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000dea6200109760201b60201c565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e769062001933565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000f1e919062001955565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f9390620019c2565b60405180910390fd5b62000fb0600083836200112860201b60201c565b806002600082825462000fc49190620019e4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001077919062001a52565b60405180910390a362001093600083836200112d60201b60201c565b5050565b620010a7620008cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620010cd62000d4560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462001126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200111d9062001abf565b60405180910390fd5b565b505050565b505050565b6133e8806200729683390190565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011728262001145565b9050919050565b620011848162001165565b81146200119057600080fd5b50565b600081519050620011a48162001179565b92915050565b600060208284031215620011c357620011c262001140565b5b6000620011d38482850162001193565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200125e57607f821691505b60208210810362001274576200127362001216565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012de7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200129f565b620012ea86836200129f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062001337620013316200132b8462001302565b6200130c565b62001302565b9050919050565b6000819050919050565b620013538362001316565b6200136b62001362826200133e565b848454620012ac565b825550505050565b600090565b6200138262001373565b6200138f81848462001348565b505050565b5b81811015620013b757620013ab60008262001378565b60018101905062001395565b5050565b601f8211156200140657620013d0816200127a565b620013db846200128f565b81016020851015620013eb578190505b62001403620013fa856200128f565b83018262001394565b50505b505050565b600082821c905092915050565b60006200142b600019846008026200140b565b1980831691505092915050565b600062001446838362001418565b9150826002028217905092915050565b6200146182620011dc565b67ffffffffffffffff8111156200147d576200147c620011e7565b5b62001489825462001245565b62001496828285620013bb565b600060209050601f831160018114620014ce5760008415620014b9578287015190505b620014c5858262001438565b86555062001535565b601f198416620014de866200127a565b60005b828110156200150857848901518255600182019150602085019450602081019050620014e1565b8683101562001528578489015162001524601f89168262001418565b8355505b6001600288020188555050505b505050505050565b620015488162001165565b82525050565b60006040820190506200156560008301856200153d565b6200157460208301846200153d565b9392505050565b60006020820190506200159260008301846200153d565b92915050565b60008115159050919050565b620015af8162001598565b82525050565b6000604082019050620015cc60008301856200153d565b620015db6020830184620015a4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200161e8262001302565b91506200162b8362001302565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620016675762001666620015e2565b5b828202905092915050565b600082825260208201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000620016e160228362001672565b9150620016ee8262001683565b604082019050919050565b600060208201905081810360008301526200171481620016d2565b9050919050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20312520600082015250565b60006200175360208362001672565b915062001760826200171b565b602082019050919050565b60006020820190508181036000830152620017868162001744565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e60008201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b6000620017eb60238362001672565b9150620017f8826200178d565b604082019050919050565b600060208201905081810360008301526200181e81620017dc565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b60006200188360388362001672565b9150620018908262001825565b604082019050919050565b60006020820190508181036000830152620018b68162001874565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b60006200191b602a8362001672565b91506200192882620018bd565b604082019050919050565b600060208201905081810360008301526200194e816200190c565b9050919050565b60006020820190506200196c6000830184620015a4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620019aa601f8362001672565b9150620019b78262001972565b602082019050919050565b60006020820190508181036000830152620019dd816200199b565b9050919050565b6000620019f18262001302565b9150620019fe8362001302565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001a365762001a35620015e2565b5b828201905092915050565b62001a4c8162001302565b82525050565b600060208201905062001a69600083018462001a41565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001aa760208362001672565b915062001ab48262001a6f565b602082019050919050565b6000602082019050818103600083015262001ada8162001a98565b9050919050565b6157a58062001af16000396000f3fe6080604052600436106103855760003560e01c806379b447bd116101d1578063abb8105211610102578063d2fcc001116100a0578063f2fde38b1161006f578063f2fde38b14610d1d578063f66895a314610d46578063f887ea4014610d73578063f8b45b0514610d9e5761038c565b8063d2fcc00114610c63578063dd62ed3e14610c8c578063e01af92c14610cc9578063e2f4560514610cf25761038c565b8063bdf1436d116100dc578063bdf1436d14610bbf578063c024666814610be8578063c18bc19514610c11578063c851cc3214610c3a5761038c565b8063abb8105214610b1c578063afa4f3b214610b59578063b62496f514610b825761038c565b806392929a091161016f578063a457c2d711610149578063a457c2d714610a3a578063a8aa1b3114610a77578063a8b9d24014610aa2578063a9059cbb14610adf5761038c565b806392929a09146109bd57806395d89b41146109e65780639a7a23d614610a115761038c565b806388bdd9be116101ab57806388bdd9be1461091557806388e765ff1461093e5780638c9684f9146109695780638da5cb5b146109925761038c565b806379b447bd1461087e5780637b510fe8146108a7578063864701a5146108e85761038c565b806330bb4cff116102b65780634fbee193116102545780636ddd1713116102235780636ddd1713146107d457806370a08231146107ff578063715018a61461083c57806375f0a874146108535761038c565b80634fbee193146107065780635d098b381461074357806366d602ae1461076c5780636843cd84146107975761038c565b80633950935111610290578063395093511461065c57806346469afb146106995780634ada218b146106c45780634e71d92d146106ef5761038c565b806330bb4cff146105dd578063313ce56714610608578063342aa8b5146106335761038c565b806318160ddd1161032357806323b872dd116102fd57806323b872dd146105215780632866ed211461055e5780632c1f5216146105895780632e1ab904146105b45761038c565b806318160ddd146104a25780631870517a146104cd5780631bff7898146104f65761038c565b8063095ea7b31161035f578063095ea7b31461040e5780630a78097d1461044b5780630bd05b691461047457806312b77e8a1461048b5761038c565b80630483f7a01461039157806306fdde03146103ba57806308733214146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613f78565b610dc9565b005b3480156103c657600080fd5b506103cf610e64565b6040516103dc9190614051565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906140a9565b610ef6565b005b34801561041a57600080fd5b50610435600480360381019061043091906140fc565b610fb8565b604051610442919061414b565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190614166565b610fdb565b005b34801561048057600080fd5b506104896110e5565b005b34801561049757600080fd5b506104a061115a565b005b3480156104ae57600080fd5b506104b7611203565b6040516104c491906141a2565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906140a9565b61120d565b005b34801561050257600080fd5b5061050b6112cf565b60405161051891906141a2565b60405180910390f35b34801561052d57600080fd5b50610548600480360381019061054391906141bd565b6112d5565b604051610555919061414b565b60405180910390f35b34801561056a57600080fd5b50610573611304565b604051610580919061414b565b60405180910390f35b34801561059557600080fd5b5061059e611317565b6040516105ab919061426f565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190614166565b61133d565b005b3480156105e957600080fd5b506105f26113d5565b6040516105ff91906141a2565b60405180910390f35b34801561061457600080fd5b5061061d61146d565b60405161062a91906142a6565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613f78565b611476565b005b34801561066857600080fd5b50610683600480360381019061067e91906140fc565b611535565b604051610690919061414b565b60405180910390f35b3480156106a557600080fd5b506106ae61156c565b6040516106bb91906141a2565b60405180910390f35b3480156106d057600080fd5b506106d9611572565b6040516106e6919061414b565b60405180910390f35b3480156106fb57600080fd5b50610704611585565b005b34801561071257600080fd5b5061072d60048036038101906107289190614166565b611675565b60405161073a919061414b565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190614166565b6116cb565b005b34801561077857600080fd5b50610781611717565b60405161078e91906141a2565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190614166565b61171d565b6040516107cb91906141a2565b60405180910390f35b3480156107e057600080fd5b506107e96117c2565b6040516107f6919061414b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190614166565b6117d5565b60405161083391906141a2565b60405180910390f35b34801561084857600080fd5b5061085161181d565b005b34801561085f57600080fd5b50610868611831565b60405161087591906142d0565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906142eb565b611857565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190614166565b611923565b6040516108df95949392919061432b565b60405180910390f35b3480156108f457600080fd5b506108fd6119da565b60405161090c9392919061437e565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190614166565b6119f2565b005b34801561094a57600080fd5b50610953611c25565b60405161096091906141a2565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190614166565b611c2b565b005b34801561099e57600080fd5b506109a7611cc5565b6040516109b491906142d0565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906143b5565b611cef565b005b3480156109f257600080fd5b506109fb611d14565b604051610a089190614051565b60405180910390f35b348015610a1d57600080fd5b50610a386004803603810190610a339190613f78565b611da6565b005b348015610a4657600080fd5b50610a616004803603810190610a5c91906140fc565b611dbc565b604051610a6e919061414b565b60405180910390f35b348015610a8357600080fd5b50610a8c611e33565b604051610a9991906142d0565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac49190614166565b611e59565b604051610ad691906141a2565b60405180910390f35b348015610aeb57600080fd5b50610b066004803603810190610b0191906140fc565b611efe565b604051610b13919061414b565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e9190614166565b611f21565b604051610b50919061414b565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b91906143e2565b611f41565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614166565b611f66565b604051610bb6919061414b565b60405180910390f35b348015610bcb57600080fd5b50610be66004803603810190610be191906143e2565b611f86565b005b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190613f78565b6120ee565b005b348015610c1d57600080fd5b50610c386004803603810190610c3391906143e2565b612231565b005b348015610c4657600080fd5b50610c616004803603810190610c5c9190614166565b61229c565b005b348015610c6f57600080fd5b50610c8a6004803603810190610c859190613f78565b6122e8565b005b348015610c9857600080fd5b50610cb36004803603810190610cae919061440f565b61234b565b604051610cc091906141a2565b60405180910390f35b348015610cd557600080fd5b50610cf06004803603810190610ceb91906143b5565b6123d2565b005b348015610cfe57600080fd5b50610d076123f7565b604051610d1491906141a2565b60405180910390f35b348015610d2957600080fd5b50610d446004803603810190610d3f9190614166565b6123fd565b005b348015610d5257600080fd5b50610d5b612480565b604051610d6a9392919061437e565b60405180910390f35b348015610d7f57600080fd5b50610d88612498565b604051610d959190614470565b60405180910390f35b348015610daa57600080fd5b50610db36124be565b604051610dc091906141a2565b60405180910390f35b610dd16124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610e2e92919061448b565b600060405180830381600087803b158015610e4857600080fd5b505af1158015610e5c573d6000803e3d6000fd5b505050505050565b606060038054610e73906144e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f906144e3565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b610efe6124c4565b6063818385610f0d9190614543565b610f179190614543565b1115610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f906145e5565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506011600082015181600001556020820151816001015560408201518160020155905050808284610fa39190614543565b610fad9190614543565b601581905550505050565b600080610fc3612542565b9050610fd081858561254a565b600191505092915050565b610fe36124c4565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611007611cc5565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161104091906142d0565b602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611081919061461a565b6040518363ffffffff1660e01b815260040161109e929190614647565b6020604051808303816000875af11580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190614685565b5050565b6110ed6124c4565b600760179054906101000a900460ff161561113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906146fe565b60405180910390fd5b6001600760176101000a81548160ff021916908315150217905550565b6111626124c4565b60004790506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111af9061474f565b60006040518083038185875af1925050503d80600081146111ec576040519150601f19603f3d011682016040523d82523d6000602084013e6111f1565b606091505b50509050806111ff57600080fd5b5050565b6000600254905090565b6112156124c4565b60328183856112249190614543565b61122e9190614543565b111561126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906145e5565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600e6000820151816000015560208201518160010155604082015181600201559050508082846112ba9190614543565b6112c49190614543565b601481905550505050565b60155481565b6000806112e0612542565b90506112ed858285612713565b6112f885858561279f565b60019150509392505050565b600760169054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113456124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e826040518263ffffffff1660e01b81526004016113a091906142d0565b600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611468919061461a565b905090565b60006012905090565b61147e6124c4565b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036114da57600080fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611540612542565b9050611561818585611552858961234b565b61155c9190614543565b61254a565b600191505092915050565b60145481565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff166115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906147b0565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b815260040161162f91906147f1565b6020604051808303816000875af115801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190614685565b50565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d36124c4565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161177a91906142d0565b602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061461a565b9050919050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118256124c4565b61182f60006130ce565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185f6124c4565b620f42408210156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90614858565b60405180910390fd5b6207a1208110156118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906148ea565b60405180910390fd5b670de0b6b3a7640000826118ff919061490a565b600b81905550670de0b6b3a764000081611919919061490a565b600c819055505050565b6000806000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b815260040161198691906142d0565b60a060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190614979565b9450945094509450945091939590929450565b600e8060000154908060010154908060020154905083565b6119fa6124c4565b60008190508073ffffffffffffffffffffffffffffffffffffffff16630483f7a08260016040518363ffffffff1660e01b8152600401611a3b92919061448b565b600060405180830381600087803b158015611a5557600080fd5b505af1158015611a69573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b8152600401611aa992919061448b565b600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a0611aff611cc5565b60016040518363ffffffff1660e01b8152600401611b1e92919061448b565b600060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a0600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401611bae92919061448b565b600060405180830381600087803b158015611bc857600080fd5b505af1158015611bdc573d6000803e3d6000fd5b5050505080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b5481565b611c336124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663497ec82333836040518363ffffffff1660e01b8152600401611c909291906149f4565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cf76124c4565b80600760166101000a81548160ff02191690831515021790555050565b606060048054611d23906144e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4f906144e3565b8015611d9c5780601f10611d7157610100808354040283529160200191611d9c565b820191906000526020600020905b815481529060010190602001808311611d7f57829003601f168201915b5050505050905090565b611dae6124c4565b611db88282613194565b5050565b600080611dc7612542565b90506000611dd5828661234b565b905083811015611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614a8f565b60405180910390fd5b611e27828686840361254a565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611eb691906142d0565b602060405180830381865afa158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef7919061461a565b9050919050565b600080611f09612542565b9050611f1681858561279f565b600191505092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b611f496124c4565b670de0b6b3a764000081611f5d919061490a565b600a8190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b611f8e6124c4565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161201193929190614aaf565b6020604051808303816000875af1158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190614685565b905080156120ea57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016120b791906141a2565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b505050505b5050565b6120f66124c4565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614b58565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612225919061414b565b60405180910390a25050565b6122396124c4565b620f424081101561227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614bea565b60405180910390fd5b670de0b6b3a764000081612293919061490a565b600d8190555050565b6122a46124c4565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122f06124c4565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123da6124c4565b80600760156101000a81548160ff02191690831515021790555050565b600a5481565b6124056124c4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90614c7c565b60405180910390fd5b61247d816130ce565b50565b60118060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6124cc612542565b73ffffffffffffffffffffffffffffffffffffffff166124ea611cc5565b73ffffffffffffffffffffffffffffffffffffffff1614612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614ce8565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614d7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614e0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161270691906141a2565b60405180910390a3505050565b600061271f848461234b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612799578181101561278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614e78565b60405180910390fd5b612798848484840361254a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490614f9c565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129215750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561293a5750600760149054906101000a900460ff16155b15612b6e57600760179054906101000a900460ff1661298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298590615008565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2a57600c54811115612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c90615074565b60405180910390fd5b612ac3565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac257600b54811115612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906150e0565b60405180910390fd5b5b5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b6d57600d54612b20836117d5565b82612b2b9190614543565b1115612b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b639061514c565b60405180910390fd5b5b5b60008103612b8757612b828383600061335e565b6130c9565b6000612b92306117d5565b90506000600a548210159050808015612bb85750600760149054906101000a900460ff16155b8015612bd05750600760159054906101000a900460ff165b8015612c255750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c7b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd15750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d24576001600760146101000a81548160ff02191690831515021790555060006015541115612d0857612d07600a546135d4565b5b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dda5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de457600090505b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e885750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9257600090505b8015612f98576000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f0d57606460155486612efc919061490a565b612f06919061519b565b9050612f7d565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f7c57606460145486612f6f919061490a565b612f79919061519b565b90505b5b8085612f8991906151cc565b9450612f9687308361335e565b505b612fa386868661335e565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc87612feb896117d5565b6040518363ffffffff1660e01b8152600401613008929190614647565b600060405180830381600087803b15801561302257600080fd5b505af1925050508015613033575060015b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8661307c886117d5565b6040518363ffffffff1660e01b8152600401613099929190614647565b600060405180830381600087803b1580156130b357600080fd5b505af19250505080156130c4575060015b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321d90615272565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561331457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b81526004016132e192919061448b565b600060405180830381600087803b1580156132fb57600080fd5b505af115801561330f573d6000803e3d6000fd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c490614f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343390614f9c565b60405180910390fd5b6134478383836139e5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c490615304565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135bb91906141a2565b60405180910390a36135ce8484846139ea565b50505050565b60006002601554601160000154846135ec919061490a565b6135f6919061519b565b613600919061519b565b9050600060026015546011600001548561361a919061490a565b613624919061519b565b61362e919061519b565b9050600060155460116001015485613646919061490a565b613650919061519b565b9050600060155460116002015486613668919061490a565b613672919061519b565b905061367d846139ef565b60004790506000811115613696576136958482613c32565b5b61369f836139ef565b600047905060008190506000811115613782576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136fa9061474f565b60006040518083038185875af1925050503d8060008114613737576040519150601f19603f3d011682016040523d82523d6000602084013e61373c565b606091505b5050905080613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377790615370565b60405180910390fd5b505b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016137df91906142d0565b602060405180830381865afa1580156137fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613820919061461a565b9050600081905060008111156139c5576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016138b1929190614647565b6020604051808303816000875af11580156138d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f49190614685565b905080156139c357600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b815260040161395791906141a2565b600060405180830381600087803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38b836040516139ba929190615390565b60405180910390a15b505b60008611156139d9576139d83087613d10565b5b50505050505050505050565b505050565b505050565b6000600267ffffffffffffffff811115613a0c57613a0b6153b9565b5b604051908082528060200260200182016040528015613a3a5781602001602082028036833780820191505090505b5090503081600081518110613a5257613a516153e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1d9190615417565b81600181518110613b3157613b306153e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b9830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461254a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bfc95949392919061553d565b600060405180830381600087803b158015613c1657600080fd5b505af1158015613c2a573d6000803e3d6000fd5b505050505050565b613c5f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461254a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613cc696959493929190615597565b60606040518083038185885af1158015613ce4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d0991906155f8565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d76906156bd565b60405180910390fd5b613d8b826000836139e5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e089061574f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ec491906141a2565b60405180910390a3613ed8836000846139ea565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0d82613ee2565b9050919050565b613f1d81613f02565b8114613f2857600080fd5b50565b600081359050613f3a81613f14565b92915050565b60008115159050919050565b613f5581613f40565b8114613f6057600080fd5b50565b600081359050613f7281613f4c565b92915050565b60008060408385031215613f8f57613f8e613edd565b5b6000613f9d85828601613f2b565b9250506020613fae85828601613f63565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ff2578082015181840152602081019050613fd7565b83811115614001576000848401525b50505050565b6000601f19601f8301169050919050565b600061402382613fb8565b61402d8185613fc3565b935061403d818560208601613fd4565b61404681614007565b840191505092915050565b6000602082019050818103600083015261406b8184614018565b905092915050565b6000819050919050565b61408681614073565b811461409157600080fd5b50565b6000813590506140a38161407d565b92915050565b6000806000606084860312156140c2576140c1613edd565b5b60006140d086828701614094565b93505060206140e186828701614094565b92505060406140f286828701614094565b9150509250925092565b6000806040838503121561411357614112613edd565b5b600061412185828601613f2b565b925050602061413285828601614094565b9150509250929050565b61414581613f40565b82525050565b6000602082019050614160600083018461413c565b92915050565b60006020828403121561417c5761417b613edd565b5b600061418a84828501613f2b565b91505092915050565b61419c81614073565b82525050565b60006020820190506141b76000830184614193565b92915050565b6000806000606084860312156141d6576141d5613edd565b5b60006141e486828701613f2b565b93505060206141f586828701613f2b565b925050604061420686828701614094565b9150509250925092565b6000819050919050565b600061423561423061422b84613ee2565b614210565b613ee2565b9050919050565b60006142478261421a565b9050919050565b60006142598261423c565b9050919050565b6142698161424e565b82525050565b60006020820190506142846000830184614260565b92915050565b600060ff82169050919050565b6142a08161428a565b82525050565b60006020820190506142bb6000830184614297565b92915050565b6142ca81613f02565b82525050565b60006020820190506142e560008301846142c1565b92915050565b6000806040838503121561430257614301613edd565b5b600061431085828601614094565b925050602061432185828601614094565b9150509250929050565b600060a08201905061434060008301886142c1565b61434d6020830187614193565b61435a6040830186614193565b6143676060830185614193565b6143746080830184614193565b9695505050505050565b60006060820190506143936000830186614193565b6143a06020830185614193565b6143ad6040830184614193565b949350505050565b6000602082840312156143cb576143ca613edd565b5b60006143d984828501613f63565b91505092915050565b6000602082840312156143f8576143f7613edd565b5b600061440684828501614094565b91505092915050565b6000806040838503121561442657614425613edd565b5b600061443485828601613f2b565b925050602061444585828601613f2b565b9150509250929050565b600061445a8261423c565b9050919050565b61446a8161444f565b82525050565b60006020820190506144856000830184614461565b92915050565b60006040820190506144a060008301856142c1565b6144ad602083018461413c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144fb57607f821691505b60208210810361450e5761450d6144b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061454e82614073565b915061455983614073565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458e5761458d614514565b5b828201905092915050565b7f466565206d757374206265203c3d203230250000000000000000000000000000600082015250565b60006145cf601283613fc3565b91506145da82614599565b602082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b6000815190506146148161407d565b92915050565b6000602082840312156146305761462f613edd565b5b600061463e84828501614605565b91505092915050565b600060408201905061465c60008301856142c1565b6146696020830184614193565b9392505050565b60008151905061467f81613f4c565b92915050565b60006020828403121561469b5761469a613edd565b5b60006146a984828501614670565b91505092915050565b7f54726164696e6720616c726561647920656e61626c6564000000000000000000600082015250565b60006146e8601783613fc3565b91506146f3826146b2565b602082019050919050565b60006020820190508181036000830152614717816146db565b9050919050565b600081905092915050565b50565b600061473960008361471e565b915061474482614729565b600082019050919050565b600061475a8261472c565b9150819050919050565b7f436c61696d206e6f7420656e61626c6564000000000000000000000000000000600082015250565b600061479a601183613fc3565b91506147a582614764565b602082019050919050565b600060208201905081810360008301526147c98161478d565b9050919050565b60006147db82613ee2565b9050919050565b6147eb816147d0565b82525050565b600060208201905061480660008301846147e2565b92915050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20312520600082015250565b6000614842602083613fc3565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e60008201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b60006148d4602383613fc3565b91506148df82614878565b604082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b600061491582614073565b915061492083614073565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495957614958614514565b5b828202905092915050565b60008151905061497381613f14565b92915050565b600080600080600060a0868803121561499557614994613edd565b5b60006149a388828901614964565b95505060206149b488828901614605565b94505060406149c588828901614605565b93505060606149d688828901614605565b92505060806149e788828901614605565b9150509295509295909350565b6000604082019050614a0960008301856142c1565b614a1660208301846142c1565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a79602583613fc3565b9150614a8482614a1d565b604082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b6000606082019050614ac460008301866142c1565b614ad160208301856142c1565b614ade6040830184614193565b949350505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614b42602a83613fc3565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd4602283613fc3565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c66602683613fc3565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd2602083613fc3565b9150614cdd82614c9c565b602082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d64602483613fc3565b9150614d6f82614d08565b604082019050919050565b60006020820190508181036000830152614d9381614d57565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614df6602283613fc3565b9150614e0182614d9a565b604082019050919050565b60006020820190508181036000830152614e2581614de9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614e62601d83613fc3565b9150614e6d82614e2c565b602082019050919050565b60006020820190508181036000830152614e9181614e55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ef4602583613fc3565b9150614eff82614e98565b604082019050919050565b60006020820190508181036000830152614f2381614ee7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f86602383613fc3565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b6000614ff2601283613fc3565b9150614ffd82614fbc565b602082019050919050565b6000602082019050818103600083015261502181614fe5565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e7400600082015250565b600061505e601f83613fc3565b915061506982615028565b602082019050919050565b6000602082019050818103600083015261508d81615051565b9050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e740000600082015250565b60006150ca601e83613fc3565b91506150d582615094565b602082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615136601b83613fc3565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151a682614073565b91506151b183614073565b9250826151c1576151c061516c565b5b828204905092915050565b60006151d782614073565b91506151e283614073565b9250828210156151f5576151f4614514565b5b828203905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061525c603883613fc3565b915061526782615200565b604082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152ee602683613fc3565b91506152f982615292565b604082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c6574600082015250565b600061535a602083613fc3565b915061536582615324565b602082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b60006040820190506153a56000830185614193565b6153b26020830184614193565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561542d5761542c613edd565b5b600061543b84828501614964565b91505092915050565b6000819050919050565b600061546961546461545f84615444565b614210565b614073565b9050919050565b6154798161544e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154b481613f02565b82525050565b60006154c683836154ab565b60208301905092915050565b6000602082019050919050565b60006154ea8261547f565b6154f4818561548a565b93506154ff8361549b565b8060005b8381101561553057815161551788826154ba565b9750615522836154d2565b925050600181019050615503565b5085935050505092915050565b600060a0820190506155526000830188614193565b61555f6020830187615470565b818103604083015261557181866154df565b905061558060608301856142c1565b61558d6080830184614193565b9695505050505050565b600060c0820190506155ac60008301896142c1565b6155b96020830188614193565b6155c66040830187615470565b6155d36060830186615470565b6155e060808301856142c1565b6155ed60a0830184614193565b979650505050505050565b60008060006060848603121561561157615610613edd565b5b600061561f86828701614605565b935050602061563086828701614605565b925050604061564186828701614605565b9150509250925092565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a7602183613fc3565b91506156b28261564b565b604082019050919050565b600060208201905081810360008301526156d68161569a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615739602283613fc3565b9150615744826156dd565b604082019050919050565b600060208201905081810360008301526157688161572c565b905091905056fea2646970667358221220dc18a9c782b118eb5920a6c222954fcb918dde2a2d057f708a98ee7fdbce5a6764736f6c634300080f003360806040523480156200001157600080fd5b506040518060400160405280601581526020017f4c696e715f4469766964656e645f547261636b657200000000000000000000008152506040518060400160405280601581526020017f4c696e715f4469766964656e645f547261636b657200000000000000000000008152508181816003908162000091919062000416565b508060049081620000a3919062000416565b505050620000c6620000ba620000ce60201b60201c565b620000d660201b60201c565b5050620004fd565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200021e57607f821691505b602082108103620002345762000233620001d6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200029e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200025f565b620002aa86836200025f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002f7620002f1620002eb84620002c2565b620002cc565b620002c2565b9050919050565b6000819050919050565b6200031383620002d6565b6200032b6200032282620002fe565b8484546200026c565b825550505050565b600090565b6200034262000333565b6200034f81848462000308565b505050565b5b8181101562000377576200036b60008262000338565b60018101905062000355565b5050565b601f821115620003c65762000390816200023a565b6200039b846200024f565b81016020851015620003ab578190505b620003c3620003ba856200024f565b83018262000354565b50505b505050565b600082821c905092915050565b6000620003eb60001984600802620003cb565b1980831691505092915050565b6000620004068383620003d8565b9150826002028217905092915050565b62000421826200019c565b67ffffffffffffffff8111156200043d576200043c620001a7565b5b62000449825462000205565b620004568282856200037b565b600060209050601f8311600181146200048e576000841562000479578287015190505b620004858582620003f8565b865550620004f5565b601f1984166200049e866200023a565b60005b82811015620004c857848901518255600182019150602085019450602081019050620004a1565b86831015620004e85784890151620004e4601f891682620003d8565b8355505b6001600288020188555050505b505050505050565b612edb806200050d6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063715018a61161010f578063a8b9d240116100a2578063e30443bc11610071578063e30443bc146105e2578063ede6ad9c146105fe578063f2fde38b1461061a578063fbcbc0f114610636576101e5565b8063a8b9d24014610522578063a9059cbb14610552578063aafd847a14610582578063dd62ed3e146105b2576101e5565b806391b89fba116100de57806391b89fba1461048657806395d89b41146104b65780639e1e0661146104d4578063a457c2d7146104f2576101e5565b8063715018a614610410578063807ab4f71461041a57806385a6b3ae1461044a5780638da5cb5b14610468576101e5565b806327ce014711610187578063497ec82311610156578063497ec8231461038a5780634e7b827f146103a65780636a474002146103d657806370a08231146103e0576101e5565b806327ce0147146102f0578063313ce56714610320578063395093511461033e57806344b6bd9e1461036e576101e5565b80631162c4b6116101c35780631162c4b61461025457806318160ddd14610272578063226cfa3d1461029057806323b872dd146102c0576101e5565b80630483f7a0146101ea57806306fdde0314610206578063095ea7b314610224575b600080fd5b61020460048036038101906101ff919061205a565b61066a565b005b61020e6107a6565b60405161021b9190612133565b60405180910390f35b61023e6004803603810190610239919061218b565b610838565b60405161024b91906121da565b60405180910390f35b61025c61085b565b6040516102699190612204565b60405180910390f35b61027a610881565b604051610287919061222e565b60405180910390f35b6102aa60048036038101906102a59190612249565b61088b565b6040516102b7919061222e565b60405180910390f35b6102da60048036038101906102d59190612276565b6108a3565b6040516102e791906121da565b60405180910390f35b61030a60048036038101906103059190612249565b6108d2565b604051610317919061222e565b60405180910390f35b610328610975565b60405161033591906122e5565b60405180910390f35b6103586004803603810190610353919061218b565b61097e565b60405161036591906121da565b60405180910390f35b61038860048036038101906103839190612249565b6109b5565b005b6103a4600480360381019061039f9190612300565b610a01565b005b6103c060048036038101906103bb9190612249565b610b05565b6040516103cd91906121da565b60405180910390f35b6103de610b25565b005b6103fa60048036038101906103f59190612249565b610b31565b604051610407919061222e565b60405180910390f35b610418610b79565b005b610434600480360381019061042f919061237e565b610b8d565b60405161044191906121da565b60405180910390f35b610452610c54565b60405161045f919061222e565b60405180910390f35b610470610c5a565b60405161047d9190612204565b60405180910390f35b6104a0600480360381019061049b9190612249565b610c84565b6040516104ad919061222e565b60405180910390f35b6104be610c96565b6040516104cb9190612133565b60405180910390f35b6104dc610d28565b6040516104e9919061222e565b60405180910390f35b61050c6004803603810190610507919061218b565b610d2e565b60405161051991906121da565b60405180910390f35b61053c60048036038101906105379190612249565b610da5565b604051610549919061222e565b60405180910390f35b61056c6004803603810190610567919061218b565b610e08565b60405161057991906121da565b60405180910390f35b61059c60048036038101906105979190612249565b610e2b565b6040516105a9919061222e565b60405180910390f35b6105cc60048036038101906105c79190612300565b610e74565b6040516105d9919061222e565b60405180910390f35b6105fc60048036038101906105f7919061218b565b610efb565b005b610618600480360381019061061391906123ab565b610f63565b005b610634600480360381019061062f9190612249565b611045565b005b610650600480360381019061064b9190612249565b6110c8565b6040516106619594939291906123d8565b60405180910390f35b6106726111a8565b801515600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036106ce57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060011515811515036107415761073c826000611226565b610754565b6107538261074e84610b31565b611226565b5b8173ffffffffffffffffffffffffffffffffffffffff167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be8260405161079a91906121da565b60405180910390a25050565b6060600380546107b59061245a565b80601f01602080910402602001604051908101604052809291908181526020018280546107e19061245a565b801561082e5780601f106108035761010080835404028352916020019161082e565b820191906000526020600020905b81548152906001019060200180831161081157829003601f168201915b5050505050905090565b600080610843611293565b905061085081858561129b565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600d6020528060005260406000206000915090505481565b6000806108ae611293565b90506108bb858285611464565b6108c68585856114f0565b60019150509392505050565b600070010000000000000000000000000000000061096461095f600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461095161094c61093b88610b31565b60075461153690919063ffffffff16565b6115b0565b6115cd90919063ffffffff16565b611618565b61096e91906124e9565b9050919050565b60006012905090565b600080610989611293565b90506109aa81858561099b8589610e74565b6109a5919061251a565b61129b565b600191505092915050565b6109bd6111a8565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610a096111a8565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5f9190612204565b602060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190612585565b6040518363ffffffff1660e01b8152600401610abd9291906125b2565b6020604051808303816000875af1158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0091906125f0565b505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b610b2e3361162f565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b816111a8565b610b8b60006118b9565b565b6000610b976111a8565b6000610ba28361162f565b90506000811115610c495742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051610c37919061222e565b60405180910390a26001915050610c4f565b60009150505b919050565b600a5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c8f82610da5565b9050919050565b606060048054610ca59061245a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd19061245a565b8015610d1e5780601f10610cf357610100808354040283529160200191610d1e565b820191906000526020600020905b815481529060010190602001808311610d0157829003601f168201915b5050505050905090565b600b5481565b600080610d39611293565b90506000610d478286610e74565b905083811015610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d839061268f565b60405180910390fd5b610d99828686840361129b565b60019250505092915050565b6000610e01600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610df3846108d2565b61197f90919063ffffffff16565b9050919050565b600080610e13611293565b9050610e208185856114f0565b600191505092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f036111a8565b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f5f57610f5e8282611226565b5b5050565b610f6b6111a8565b6000610f75610881565b11610f7f57600080fd5b600081111561104257610fd2610f93610881565b610fb77001000000000000000000000000000000008461153690919063ffffffff16565b610fc191906124e9565b6007546119c990919063ffffffff16565b6007819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165118260405161101e919061222e565b60405180910390a261103b81600a546119c990919063ffffffff16565b600a819055505b50565b61104d6111a8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390612721565b60405180910390fd5b6110c5816118b9565b50565b60008060008060006110d8611f81565b86816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061111987610da5565b81602001818152505061112b876108d2565b816040018181525050600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548160600181815250508060000151816020015182604001518360600151600b54955095509550955095505091939590929450565b6111b0611293565b73ffffffffffffffffffffffffffffffffffffffff166111ce610c5a565b73ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b9061278d565b60405180910390fd5b565b600061123183610b31565b905080821115611262576000611250828461197f90919063ffffffff16565b905061125c8482611a27565b5061128e565b8082101561128d57600061127f838361197f90919063ffffffff16565b905061128b8482611ae6565b505b5b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361130a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113019061281f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611379576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611370906128b1565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611457919061222e565b60405180910390a3505050565b60006114708484610e74565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114ea57818110156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d39061291d565b60405180910390fd5b6114e9848484840361129b565b5b50505050565b6000611531576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611528906129af565b60405180910390fd5b505050565b600080830361154857600090506115aa565b6000828461155691906129cf565b905082848261156591906124e9565b146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c90612a9b565b60405180910390fd5b809150505b92915050565b60008082905060008112156115c457600080fd5b80915050919050565b60008082846115dc9190612ac5565b9050600083121580156115ef5750838112155b80611605575060008312801561160457508381125b5b61160e57600080fd5b8091505092915050565b60008082121561162757600080fd5b819050919050565b60008061163b83610da5565b905060008111156118ae5761169881600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119c990919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600b60008282546116ed919061251a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8260405161173a919061222e565b60405180910390a26000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b81526004016117a1929190612bb8565b6020604051808303816000875af11580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e491906125f0565b9050806118a45761183d82600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461197f90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600b60008282546118929190612be1565b925050819055506000925050506118b4565b81925050506118b4565b60009150505b919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006119c183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ba5565b905092915050565b60008082846119d8919061251a565b905083811015611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612c61565b60405180910390fd5b8091505092915050565b611a318282611c09565b611a9f611a51611a4c8360075461153690919063ffffffff16565b6115b0565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d5f90919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b611af08282611daa565b611b5e611b10611b0b8360075461153690919063ffffffff16565b6115b0565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115cd90919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000838311158290611bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be49190612133565b60405180910390fd5b5060008385611bfc9190612be1565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90612ccd565b60405180910390fd5b611c8460008383611f77565b8060026000828254611c96919061251a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d47919061222e565b60405180910390a3611d5b60008383611f7c565b5050565b6000808284611d6e9190612ced565b905060008312158015611d815750838113155b80611d975750600083128015611d9657508381135b5b611da057600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090612df3565b60405180910390fd5b611e2582600083611f77565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290612e85565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f5e919061222e565b60405180910390a3611f7283600084611f7c565b505050565b505050565b505050565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fef82611fc4565b9050919050565b611fff81611fe4565b811461200a57600080fd5b50565b60008135905061201c81611ff6565b92915050565b60008115159050919050565b61203781612022565b811461204257600080fd5b50565b6000813590506120548161202e565b92915050565b6000806040838503121561207157612070611fbf565b5b600061207f8582860161200d565b925050602061209085828601612045565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120d45780820151818401526020810190506120b9565b838111156120e3576000848401525b50505050565b6000601f19601f8301169050919050565b60006121058261209a565b61210f81856120a5565b935061211f8185602086016120b6565b612128816120e9565b840191505092915050565b6000602082019050818103600083015261214d81846120fa565b905092915050565b6000819050919050565b61216881612155565b811461217357600080fd5b50565b6000813590506121858161215f565b92915050565b600080604083850312156121a2576121a1611fbf565b5b60006121b08582860161200d565b92505060206121c185828601612176565b9150509250929050565b6121d481612022565b82525050565b60006020820190506121ef60008301846121cb565b92915050565b6121fe81611fe4565b82525050565b600060208201905061221960008301846121f5565b92915050565b61222881612155565b82525050565b6000602082019050612243600083018461221f565b92915050565b60006020828403121561225f5761225e611fbf565b5b600061226d8482850161200d565b91505092915050565b60008060006060848603121561228f5761228e611fbf565b5b600061229d8682870161200d565b93505060206122ae8682870161200d565b92505060406122bf86828701612176565b9150509250925092565b600060ff82169050919050565b6122df816122c9565b82525050565b60006020820190506122fa60008301846122d6565b92915050565b6000806040838503121561231757612316611fbf565b5b60006123258582860161200d565b92505060206123368582860161200d565b9150509250929050565b600061234b82611fc4565b9050919050565b61235b81612340565b811461236657600080fd5b50565b60008135905061237881612352565b92915050565b60006020828403121561239457612393611fbf565b5b60006123a284828501612369565b91505092915050565b6000602082840312156123c1576123c0611fbf565b5b60006123cf84828501612176565b91505092915050565b600060a0820190506123ed60008301886121f5565b6123fa602083018761221f565b612407604083018661221f565b612414606083018561221f565b612421608083018461221f565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061247257607f821691505b6020821081036124855761248461242b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124f482612155565b91506124ff83612155565b92508261250f5761250e61248b565b5b828204905092915050565b600061252582612155565b915061253083612155565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612565576125646124ba565b5b828201905092915050565b60008151905061257f8161215f565b92915050565b60006020828403121561259b5761259a611fbf565b5b60006125a984828501612570565b91505092915050565b60006040820190506125c760008301856121f5565b6125d4602083018461221f565b9392505050565b6000815190506125ea8161202e565b92915050565b60006020828403121561260657612605611fbf565b5b6000612614848285016125db565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006126796025836120a5565b91506126848261261d565b604082019050919050565b600060208201905081810360008301526126a88161266c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061270b6026836120a5565b9150612716826126af565b604082019050919050565b6000602082019050818103600083015261273a816126fe565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127776020836120a5565b915061278282612741565b602082019050919050565b600060208201905081810360008301526127a68161276a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006128096024836120a5565b9150612814826127ad565b604082019050919050565b60006020820190508181036000830152612838816127fc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061289b6022836120a5565b91506128a68261283f565b604082019050919050565b600060208201905081810360008301526128ca8161288e565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612907601d836120a5565b9150612912826128d1565b602082019050919050565b60006020820190508181036000830152612936816128fa565b9050919050565b7f4c696e715f4469766964656e645f547261636b65723a204e6f207472616e736660008201527f65727320616c6c6f776564000000000000000000000000000000000000000000602082015250565b6000612999602b836120a5565b91506129a48261293d565b604082019050919050565b600060208201905081810360008301526129c88161298c565b9050919050565b60006129da82612155565b91506129e583612155565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612a1e57612a1d6124ba565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a856021836120a5565b9150612a9082612a29565b604082019050919050565b60006020820190508181036000830152612ab481612a78565b9050919050565b6000819050919050565b6000612ad082612abb565b9150612adb83612abb565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615612b1657612b156124ba565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615612b4e57612b4d6124ba565b5b828201905092915050565b6000819050919050565b6000612b7e612b79612b7484611fc4565b612b59565b611fc4565b9050919050565b6000612b9082612b63565b9050919050565b6000612ba282612b85565b9050919050565b612bb281612b97565b82525050565b6000604082019050612bcd6000830185612ba9565b612bda602083018461221f565b9392505050565b6000612bec82612155565b9150612bf783612155565b925082821015612c0a57612c096124ba565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612c4b601b836120a5565b9150612c5682612c15565b602082019050919050565b60006020820190508181036000830152612c7a81612c3e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612cb7601f836120a5565b9150612cc282612c81565b602082019050919050565b60006020820190508181036000830152612ce681612caa565b9050919050565b6000612cf882612abb565b9150612d0383612abb565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615612d3e57612d3d6124ba565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615612d7657612d756124ba565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ddd6021836120a5565b9150612de882612d81565b604082019050919050565b60006020820190508181036000830152612e0c81612dd0565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e6f6022836120a5565b9150612e7a82612e13565b604082019050919050565b60006020820190508181036000830152612e9e81612e62565b905091905056fea264697066735822122088ee654260d0b54e103800d191ff3528794b6408cda3873543aa4b0f67b02a6564736f6c634300080f0033000000000000000000000000eed942f04abcc736e39e5ddfd541cc30f1edb13d

Deployed Bytecode

0x6080604052600436106103855760003560e01c806379b447bd116101d1578063abb8105211610102578063d2fcc001116100a0578063f2fde38b1161006f578063f2fde38b14610d1d578063f66895a314610d46578063f887ea4014610d73578063f8b45b0514610d9e5761038c565b8063d2fcc00114610c63578063dd62ed3e14610c8c578063e01af92c14610cc9578063e2f4560514610cf25761038c565b8063bdf1436d116100dc578063bdf1436d14610bbf578063c024666814610be8578063c18bc19514610c11578063c851cc3214610c3a5761038c565b8063abb8105214610b1c578063afa4f3b214610b59578063b62496f514610b825761038c565b806392929a091161016f578063a457c2d711610149578063a457c2d714610a3a578063a8aa1b3114610a77578063a8b9d24014610aa2578063a9059cbb14610adf5761038c565b806392929a09146109bd57806395d89b41146109e65780639a7a23d614610a115761038c565b806388bdd9be116101ab57806388bdd9be1461091557806388e765ff1461093e5780638c9684f9146109695780638da5cb5b146109925761038c565b806379b447bd1461087e5780637b510fe8146108a7578063864701a5146108e85761038c565b806330bb4cff116102b65780634fbee193116102545780636ddd1713116102235780636ddd1713146107d457806370a08231146107ff578063715018a61461083c57806375f0a874146108535761038c565b80634fbee193146107065780635d098b381461074357806366d602ae1461076c5780636843cd84146107975761038c565b80633950935111610290578063395093511461065c57806346469afb146106995780634ada218b146106c45780634e71d92d146106ef5761038c565b806330bb4cff146105dd578063313ce56714610608578063342aa8b5146106335761038c565b806318160ddd1161032357806323b872dd116102fd57806323b872dd146105215780632866ed211461055e5780632c1f5216146105895780632e1ab904146105b45761038c565b806318160ddd146104a25780631870517a146104cd5780631bff7898146104f65761038c565b8063095ea7b31161035f578063095ea7b31461040e5780630a78097d1461044b5780630bd05b691461047457806312b77e8a1461048b5761038c565b80630483f7a01461039157806306fdde03146103ba57806308733214146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190613f78565b610dc9565b005b3480156103c657600080fd5b506103cf610e64565b6040516103dc9190614051565b60405180910390f35b3480156103f157600080fd5b5061040c600480360381019061040791906140a9565b610ef6565b005b34801561041a57600080fd5b50610435600480360381019061043091906140fc565b610fb8565b604051610442919061414b565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d9190614166565b610fdb565b005b34801561048057600080fd5b506104896110e5565b005b34801561049757600080fd5b506104a061115a565b005b3480156104ae57600080fd5b506104b7611203565b6040516104c491906141a2565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906140a9565b61120d565b005b34801561050257600080fd5b5061050b6112cf565b60405161051891906141a2565b60405180910390f35b34801561052d57600080fd5b50610548600480360381019061054391906141bd565b6112d5565b604051610555919061414b565b60405180910390f35b34801561056a57600080fd5b50610573611304565b604051610580919061414b565b60405180910390f35b34801561059557600080fd5b5061059e611317565b6040516105ab919061426f565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190614166565b61133d565b005b3480156105e957600080fd5b506105f26113d5565b6040516105ff91906141a2565b60405180910390f35b34801561061457600080fd5b5061061d61146d565b60405161062a91906142a6565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613f78565b611476565b005b34801561066857600080fd5b50610683600480360381019061067e91906140fc565b611535565b604051610690919061414b565b60405180910390f35b3480156106a557600080fd5b506106ae61156c565b6040516106bb91906141a2565b60405180910390f35b3480156106d057600080fd5b506106d9611572565b6040516106e6919061414b565b60405180910390f35b3480156106fb57600080fd5b50610704611585565b005b34801561071257600080fd5b5061072d60048036038101906107289190614166565b611675565b60405161073a919061414b565b60405180910390f35b34801561074f57600080fd5b5061076a60048036038101906107659190614166565b6116cb565b005b34801561077857600080fd5b50610781611717565b60405161078e91906141a2565b60405180910390f35b3480156107a357600080fd5b506107be60048036038101906107b99190614166565b61171d565b6040516107cb91906141a2565b60405180910390f35b3480156107e057600080fd5b506107e96117c2565b6040516107f6919061414b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190614166565b6117d5565b60405161083391906141a2565b60405180910390f35b34801561084857600080fd5b5061085161181d565b005b34801561085f57600080fd5b50610868611831565b60405161087591906142d0565b60405180910390f35b34801561088a57600080fd5b506108a560048036038101906108a091906142eb565b611857565b005b3480156108b357600080fd5b506108ce60048036038101906108c99190614166565b611923565b6040516108df95949392919061432b565b60405180910390f35b3480156108f457600080fd5b506108fd6119da565b60405161090c9392919061437e565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190614166565b6119f2565b005b34801561094a57600080fd5b50610953611c25565b60405161096091906141a2565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190614166565b611c2b565b005b34801561099e57600080fd5b506109a7611cc5565b6040516109b491906142d0565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906143b5565b611cef565b005b3480156109f257600080fd5b506109fb611d14565b604051610a089190614051565b60405180910390f35b348015610a1d57600080fd5b50610a386004803603810190610a339190613f78565b611da6565b005b348015610a4657600080fd5b50610a616004803603810190610a5c91906140fc565b611dbc565b604051610a6e919061414b565b60405180910390f35b348015610a8357600080fd5b50610a8c611e33565b604051610a9991906142d0565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac49190614166565b611e59565b604051610ad691906141a2565b60405180910390f35b348015610aeb57600080fd5b50610b066004803603810190610b0191906140fc565b611efe565b604051610b13919061414b565b60405180910390f35b348015610b2857600080fd5b50610b436004803603810190610b3e9190614166565b611f21565b604051610b50919061414b565b60405180910390f35b348015610b6557600080fd5b50610b806004803603810190610b7b91906143e2565b611f41565b005b348015610b8e57600080fd5b50610ba96004803603810190610ba49190614166565b611f66565b604051610bb6919061414b565b60405180910390f35b348015610bcb57600080fd5b50610be66004803603810190610be191906143e2565b611f86565b005b348015610bf457600080fd5b50610c0f6004803603810190610c0a9190613f78565b6120ee565b005b348015610c1d57600080fd5b50610c386004803603810190610c3391906143e2565b612231565b005b348015610c4657600080fd5b50610c616004803603810190610c5c9190614166565b61229c565b005b348015610c6f57600080fd5b50610c8a6004803603810190610c859190613f78565b6122e8565b005b348015610c9857600080fd5b50610cb36004803603810190610cae919061440f565b61234b565b604051610cc091906141a2565b60405180910390f35b348015610cd557600080fd5b50610cf06004803603810190610ceb91906143b5565b6123d2565b005b348015610cfe57600080fd5b50610d076123f7565b604051610d1491906141a2565b60405180910390f35b348015610d2957600080fd5b50610d446004803603810190610d3f9190614166565b6123fd565b005b348015610d5257600080fd5b50610d5b612480565b604051610d6a9392919061437e565b60405180910390f35b348015610d7f57600080fd5b50610d88612498565b604051610d959190614470565b60405180910390f35b348015610daa57600080fd5b50610db36124be565b604051610dc091906141a2565b60405180910390f35b610dd16124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610e2e92919061448b565b600060405180830381600087803b158015610e4857600080fd5b505af1158015610e5c573d6000803e3d6000fd5b505050505050565b606060038054610e73906144e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9f906144e3565b8015610eec5780601f10610ec157610100808354040283529160200191610eec565b820191906000526020600020905b815481529060010190602001808311610ecf57829003601f168201915b5050505050905090565b610efe6124c4565b6063818385610f0d9190614543565b610f179190614543565b1115610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f906145e5565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506011600082015181600001556020820151816001015560408201518160020155905050808284610fa39190614543565b610fad9190614543565b601581905550505050565b600080610fc3612542565b9050610fd081858561254a565b600191505092915050565b610fe36124c4565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611007611cc5565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161104091906142d0565b602060405180830381865afa15801561105d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611081919061461a565b6040518363ffffffff1660e01b815260040161109e929190614647565b6020604051808303816000875af11580156110bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e19190614685565b5050565b6110ed6124c4565b600760179054906101000a900460ff161561113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611134906146fe565b60405180910390fd5b6001600760176101000a81548160ff021916908315150217905550565b6111626124c4565b60004790506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111af9061474f565b60006040518083038185875af1925050503d80600081146111ec576040519150601f19603f3d011682016040523d82523d6000602084013e6111f1565b606091505b50509050806111ff57600080fd5b5050565b6000600254905090565b6112156124c4565b60328183856112249190614543565b61122e9190614543565b111561126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906145e5565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600e6000820151816000015560208201518160010155604082015181600201559050508082846112ba9190614543565b6112c49190614543565b601481905550505050565b60155481565b6000806112e0612542565b90506112ed858285612713565b6112f885858561279f565b60019150509392505050565b600760169054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113456124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e826040518263ffffffff1660e01b81526004016113a091906142d0565b600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611468919061461a565b905090565b60006012905090565b61147e6124c4565b801515601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036114da57600080fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611540612542565b9050611561818585611552858961234b565b61155c9190614543565b61254a565b600191505092915050565b60145481565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff166115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906147b0565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b815260040161162f91906147f1565b6020604051808303816000875af115801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190614685565b50565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d36124c4565b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161177a91906142d0565b602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061461a565b9050919050565b600760159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118256124c4565b61182f60006130ce565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185f6124c4565b620f42408210156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90614858565b60405180910390fd5b6207a1208110156118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906148ea565b60405180910390fd5b670de0b6b3a7640000826118ff919061490a565b600b81905550670de0b6b3a764000081611919919061490a565b600c819055505050565b6000806000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b815260040161198691906142d0565b60a060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c79190614979565b9450945094509450945091939590929450565b600e8060000154908060010154908060020154905083565b6119fa6124c4565b60008190508073ffffffffffffffffffffffffffffffffffffffff16630483f7a08260016040518363ffffffff1660e01b8152600401611a3b92919061448b565b600060405180830381600087803b158015611a5557600080fd5b505af1158015611a69573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b8152600401611aa992919061448b565b600060405180830381600087803b158015611ac357600080fd5b505af1158015611ad7573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a0611aff611cc5565b60016040518363ffffffff1660e01b8152600401611b1e92919061448b565b600060405180830381600087803b158015611b3857600080fd5b505af1158015611b4c573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a0600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401611bae92919061448b565b600060405180830381600087803b158015611bc857600080fd5b505af1158015611bdc573d6000803e3d6000fd5b5050505080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b5481565b611c336124c4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663497ec82333836040518363ffffffff1660e01b8152600401611c909291906149f4565b600060405180830381600087803b158015611caa57600080fd5b505af1158015611cbe573d6000803e3d6000fd5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cf76124c4565b80600760166101000a81548160ff02191690831515021790555050565b606060048054611d23906144e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611d4f906144e3565b8015611d9c5780601f10611d7157610100808354040283529160200191611d9c565b820191906000526020600020905b815481529060010190602001808311611d7f57829003601f168201915b5050505050905090565b611dae6124c4565b611db88282613194565b5050565b600080611dc7612542565b90506000611dd5828661234b565b905083811015611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190614a8f565b60405180910390fd5b611e27828686840361254a565b60019250505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611eb691906142d0565b602060405180830381865afa158015611ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef7919061461a565b9050919050565b600080611f09612542565b9050611f1681858561279f565b600191505092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b611f496124c4565b670de0b6b3a764000081611f5d919061490a565b600a8190555050565b60186020528060005260406000206000915054906101000a900460ff1681565b611f8e6124c4565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161201193929190614aaf565b6020604051808303816000875af1158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190614685565b905080156120ea57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016120b791906141a2565b600060405180830381600087803b1580156120d157600080fd5b505af11580156120e5573d6000803e3d6000fd5b505050505b5050565b6120f66124c4565b801515601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614b58565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612225919061414b565b60405180910390a25050565b6122396124c4565b620f424081101561227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614bea565b60405180910390fd5b670de0b6b3a764000081612293919061490a565b600d8190555050565b6122a46124c4565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122f06124c4565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123da6124c4565b80600760156101000a81548160ff02191690831515021790555050565b600a5481565b6124056124c4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90614c7c565b60405180910390fd5b61247d816130ce565b50565b60118060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6124cc612542565b73ffffffffffffffffffffffffffffffffffffffff166124ea611cc5565b73ffffffffffffffffffffffffffffffffffffffff1614612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253790614ce8565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b090614d7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261f90614e0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161270691906141a2565b60405180910390a3505050565b600061271f848461234b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612799578181101561278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278290614e78565b60405180910390fd5b612798848484840361254a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490614f9c565b60405180910390fd5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129215750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561293a5750600760149054906101000a900460ff16155b15612b6e57600760179054906101000a900460ff1661298e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298590615008565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612a2a57600c54811115612a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1c90615074565b60405180910390fd5b612ac3565b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ac257600b54811115612ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab8906150e0565b60405180910390fd5b5b5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b6d57600d54612b20836117d5565b82612b2b9190614543565b1115612b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b639061514c565b60405180910390fd5b5b5b60008103612b8757612b828383600061335e565b6130c9565b6000612b92306117d5565b90506000600a548210159050808015612bb85750600760149054906101000a900460ff16155b8015612bd05750600760159054906101000a900460ff165b8015612c255750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612c7b5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd15750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d24576001600760146101000a81548160ff02191690831515021790555060006015541115612d0857612d07600a546135d4565b5b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dda5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612de457600090505b601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e885750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9257600090505b8015612f98576000601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f0d57606460155486612efc919061490a565b612f06919061519b565b9050612f7d565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f7c57606460145486612f6f919061490a565b612f79919061519b565b90505b5b8085612f8991906151cc565b9450612f9687308361335e565b505b612fa386868661335e565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc87612feb896117d5565b6040518363ffffffff1660e01b8152600401613008929190614647565b600060405180830381600087803b15801561302257600080fd5b505af1925050508015613033575060015b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc8661307c886117d5565b6040518363ffffffff1660e01b8152600401613099929190614647565b600060405180830381600087803b1580156130b357600080fd5b505af19250505080156130c4575060015b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161321d90615272565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561331457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b81526004016132e192919061448b565b600060405180830381600087803b1580156132fb57600080fd5b505af115801561330f573d6000803e3d6000fd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c490614f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343390614f9c565b60405180910390fd5b6134478383836139e5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c490615304565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135bb91906141a2565b60405180910390a36135ce8484846139ea565b50505050565b60006002601554601160000154846135ec919061490a565b6135f6919061519b565b613600919061519b565b9050600060026015546011600001548561361a919061490a565b613624919061519b565b61362e919061519b565b9050600060155460116001015485613646919061490a565b613650919061519b565b9050600060155460116002015486613668919061490a565b613672919061519b565b905061367d846139ef565b60004790506000811115613696576136958482613c32565b5b61369f836139ef565b600047905060008190506000811115613782576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136fa9061474f565b60006040518083038185875af1925050503d8060008114613737576040519150601f19603f3d011682016040523d82523d6000602084013e61373c565b606091505b5050905080613780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377790615370565b60405180910390fd5b505b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016137df91906142d0565b602060405180830381865afa1580156137fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613820919061461a565b9050600081905060008111156139c5576000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016138b1929190614647565b6020604051808303816000875af11580156138d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138f49190614685565b905080156139c357600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b815260040161395791906141a2565b600060405180830381600087803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38b836040516139ba929190615390565b60405180910390a15b505b60008611156139d9576139d83087613d10565b5b50505050505050505050565b505050565b505050565b6000600267ffffffffffffffff811115613a0c57613a0b6153b9565b5b604051908082528060200260200182016040528015613a3a5781602001602082028036833780820191505090505b5090503081600081518110613a5257613a516153e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1d9190615417565b81600181518110613b3157613b306153e8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b9830600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461254a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bfc95949392919061553d565b600060405180830381600087803b158015613c1657600080fd5b505af1158015613c2a573d6000803e3d6000fd5b505050505050565b613c5f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461254a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613cc696959493929190615597565b60606040518083038185885af1158015613ce4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d0991906155f8565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d76906156bd565b60405180910390fd5b613d8b826000836139e5565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e089061574f565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ec491906141a2565b60405180910390a3613ed8836000846139ea565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f0d82613ee2565b9050919050565b613f1d81613f02565b8114613f2857600080fd5b50565b600081359050613f3a81613f14565b92915050565b60008115159050919050565b613f5581613f40565b8114613f6057600080fd5b50565b600081359050613f7281613f4c565b92915050565b60008060408385031215613f8f57613f8e613edd565b5b6000613f9d85828601613f2b565b9250506020613fae85828601613f63565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ff2578082015181840152602081019050613fd7565b83811115614001576000848401525b50505050565b6000601f19601f8301169050919050565b600061402382613fb8565b61402d8185613fc3565b935061403d818560208601613fd4565b61404681614007565b840191505092915050565b6000602082019050818103600083015261406b8184614018565b905092915050565b6000819050919050565b61408681614073565b811461409157600080fd5b50565b6000813590506140a38161407d565b92915050565b6000806000606084860312156140c2576140c1613edd565b5b60006140d086828701614094565b93505060206140e186828701614094565b92505060406140f286828701614094565b9150509250925092565b6000806040838503121561411357614112613edd565b5b600061412185828601613f2b565b925050602061413285828601614094565b9150509250929050565b61414581613f40565b82525050565b6000602082019050614160600083018461413c565b92915050565b60006020828403121561417c5761417b613edd565b5b600061418a84828501613f2b565b91505092915050565b61419c81614073565b82525050565b60006020820190506141b76000830184614193565b92915050565b6000806000606084860312156141d6576141d5613edd565b5b60006141e486828701613f2b565b93505060206141f586828701613f2b565b925050604061420686828701614094565b9150509250925092565b6000819050919050565b600061423561423061422b84613ee2565b614210565b613ee2565b9050919050565b60006142478261421a565b9050919050565b60006142598261423c565b9050919050565b6142698161424e565b82525050565b60006020820190506142846000830184614260565b92915050565b600060ff82169050919050565b6142a08161428a565b82525050565b60006020820190506142bb6000830184614297565b92915050565b6142ca81613f02565b82525050565b60006020820190506142e560008301846142c1565b92915050565b6000806040838503121561430257614301613edd565b5b600061431085828601614094565b925050602061432185828601614094565b9150509250929050565b600060a08201905061434060008301886142c1565b61434d6020830187614193565b61435a6040830186614193565b6143676060830185614193565b6143746080830184614193565b9695505050505050565b60006060820190506143936000830186614193565b6143a06020830185614193565b6143ad6040830184614193565b949350505050565b6000602082840312156143cb576143ca613edd565b5b60006143d984828501613f63565b91505092915050565b6000602082840312156143f8576143f7613edd565b5b600061440684828501614094565b91505092915050565b6000806040838503121561442657614425613edd565b5b600061443485828601613f2b565b925050602061444585828601613f2b565b9150509250929050565b600061445a8261423c565b9050919050565b61446a8161444f565b82525050565b60006020820190506144856000830184614461565b92915050565b60006040820190506144a060008301856142c1565b6144ad602083018461413c565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144fb57607f821691505b60208210810361450e5761450d6144b4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061454e82614073565b915061455983614073565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458e5761458d614514565b5b828201905092915050565b7f466565206d757374206265203c3d203230250000000000000000000000000000600082015250565b60006145cf601283613fc3565b91506145da82614599565b602082019050919050565b600060208201905081810360008301526145fe816145c2565b9050919050565b6000815190506146148161407d565b92915050565b6000602082840312156146305761462f613edd565b5b600061463e84828501614605565b91505092915050565b600060408201905061465c60008301856142c1565b6146696020830184614193565b9392505050565b60008151905061467f81613f4c565b92915050565b60006020828403121561469b5761469a613edd565b5b60006146a984828501614670565b91505092915050565b7f54726164696e6720616c726561647920656e61626c6564000000000000000000600082015250565b60006146e8601783613fc3565b91506146f3826146b2565b602082019050919050565b60006020820190508181036000830152614717816146db565b9050919050565b600081905092915050565b50565b600061473960008361471e565b915061474482614729565b600082019050919050565b600061475a8261472c565b9150819050919050565b7f436c61696d206e6f7420656e61626c6564000000000000000000000000000000600082015250565b600061479a601183613fc3565b91506147a582614764565b602082019050919050565b600060208201905081810360008301526147c98161478d565b9050919050565b60006147db82613ee2565b9050919050565b6147eb816147d0565b82525050565b600060208201905061480660008301846147e2565b92915050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20312520600082015250565b6000614842602083613fc3565b915061484d8261480c565b602082019050919050565b6000602082019050818103600083015261487181614835565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e60008201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b60006148d4602383613fc3565b91506148df82614878565b604082019050919050565b60006020820190508181036000830152614903816148c7565b9050919050565b600061491582614073565b915061492083614073565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495957614958614514565b5b828202905092915050565b60008151905061497381613f14565b92915050565b600080600080600060a0868803121561499557614994613edd565b5b60006149a388828901614964565b95505060206149b488828901614605565b94505060406149c588828901614605565b93505060606149d688828901614605565b92505060806149e788828901614605565b9150509295509295909350565b6000604082019050614a0960008301856142c1565b614a1660208301846142c1565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a79602583613fc3565b9150614a8482614a1d565b604082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b6000606082019050614ac460008301866142c1565b614ad160208301856142c1565b614ade6040830184614193565b949350505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b6000614b42602a83613fc3565b9150614b4d82614ae6565b604082019050919050565b60006020820190508181036000830152614b7181614b35565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd4602283613fc3565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c66602683613fc3565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cd2602083613fc3565b9150614cdd82614c9c565b602082019050919050565b60006020820190508181036000830152614d0181614cc5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d64602483613fc3565b9150614d6f82614d08565b604082019050919050565b60006020820190508181036000830152614d9381614d57565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614df6602283613fc3565b9150614e0182614d9a565b604082019050919050565b60006020820190508181036000830152614e2581614de9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614e62601d83613fc3565b9150614e6d82614e2c565b602082019050919050565b60006020820190508181036000830152614e9181614e55565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ef4602583613fc3565b9150614eff82614e98565b604082019050919050565b60006020820190508181036000830152614f2381614ee7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f86602383613fc3565b9150614f9182614f2a565b604082019050919050565b60006020820190508181036000830152614fb581614f79565b9050919050565b7f54726164696e67206e6f74206163746976650000000000000000000000000000600082015250565b6000614ff2601283613fc3565b9150614ffd82614fbc565b602082019050919050565b6000602082019050818103600083015261502181614fe5565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e7400600082015250565b600061505e601f83613fc3565b915061506982615028565b602082019050919050565b6000602082019050818103600083015261508d81615051565b9050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e740000600082015250565b60006150ca601e83613fc3565b91506150d582615094565b602082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c65740000000000600082015250565b6000615136601b83613fc3565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151a682614073565b91506151b183614073565b9250826151c1576151c061516c565b5b828204905092915050565b60006151d782614073565b91506151e283614073565b9250828210156151f5576151f4614514565b5b828203905092915050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061525c603883613fc3565b915061526782615200565b604082019050919050565b6000602082019050818103600083015261528b8161524f565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006152ee602683613fc3565b91506152f982615292565b604082019050919050565b6000602082019050818103600083015261531d816152e1565b9050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c6574600082015250565b600061535a602083613fc3565b915061536582615324565b602082019050919050565b600060208201905081810360008301526153898161534d565b9050919050565b60006040820190506153a56000830185614193565b6153b26020830184614193565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561542d5761542c613edd565b5b600061543b84828501614964565b91505092915050565b6000819050919050565b600061546961546461545f84615444565b614210565b614073565b9050919050565b6154798161544e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6154b481613f02565b82525050565b60006154c683836154ab565b60208301905092915050565b6000602082019050919050565b60006154ea8261547f565b6154f4818561548a565b93506154ff8361549b565b8060005b8381101561553057815161551788826154ba565b9750615522836154d2565b925050600181019050615503565b5085935050505092915050565b600060a0820190506155526000830188614193565b61555f6020830187615470565b818103604083015261557181866154df565b905061558060608301856142c1565b61558d6080830184614193565b9695505050505050565b600060c0820190506155ac60008301896142c1565b6155b96020830188614193565b6155c66040830187615470565b6155d36060830186615470565b6155e060808301856142c1565b6155ed60a0830184614193565b979650505050505050565b60008060006060848603121561561157615610613edd565b5b600061561f86828701614605565b935050602061563086828701614605565b925050604061564186828701614605565b9150509250925092565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a7602183613fc3565b91506156b28261564b565b604082019050919050565b600060208201905081810360008301526156d68161569a565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000615739602283613fc3565b9150615744826156dd565b604082019050919050565b600060208201905081810360008301526157688161572c565b905091905056fea2646970667358221220dc18a9c782b118eb5920a6c222954fcb918dde2a2d057f708a98ee7fdbce5a6764736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000eed942f04abcc736e39e5ddfd541cc30f1edb13d

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0xEed942F04Abcc736e39e5ddfD541Cc30f1edb13d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000eed942f04abcc736e39e5ddfd541cc30f1edb13d


Deployed Bytecode Sourcemap

40637:15448:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46759:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8900:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47359:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11260:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45444:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47911:148;;;;;;;;;;;;;:::i;:::-;;45746:210;;;;;;;;;;;;;:::i;:::-;;10029:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47055:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41344:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12041:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40808:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40874:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48418:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49336:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9871:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48272:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12711:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41307:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40839:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44330:149;;;;;;;;;;;;;:::i;:::-;;49485:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46937:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41038:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49811:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40771:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10200:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5559:103;;;;;;;;;;;;;:::i;:::-;;40925:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44680:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49990:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;41214:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;43708:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41004:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45964:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4918:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48067:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9119:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48605:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13452:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40715:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49619:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10533:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41384:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45028:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41490:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54743:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46372:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44487:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46132:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45155:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10789:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47804:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40964:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5817:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41259:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40680:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41073:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46759:170;4804:13;:11;:13::i;:::-;46869:15:::1;;;;;;;;;;;:36;;;46906:7;46915:5;46869:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46759:170:::0;;:::o;8900:100::-;8954:13;8987:5;8980:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8900:100;:::o;47359:299::-;4804:13;:11;:13::i;:::-;47509:2:::1;47500:5;47487:10;47474;:23;;;;:::i;:::-;:31;;;;:::i;:::-;:37;;47466:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47557:36;;;;;;;;47563:10;47557:36;;;;47575:10;47557:36;;;;47587:5;47557:36;;::::0;47545:9:::1;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;47645:5;47632:10;47619;:23;;;;:::i;:::-;:31;;;;:::i;:::-;47604:12;:46;;;;47359:299:::0;;;:::o;11260:201::-;11343:4;11360:13;11376:12;:10;:12::i;:::-;11360:28;;11399:32;11408:5;11415:7;11424:6;11399:8;:32::i;:::-;11449:4;11442:11;;;11260:201;;;;:::o;45444:209::-;4804:13;:11;:13::i;:::-;45530:12:::1;45523:29;;;45567:7;:5;:7::i;:::-;45596:12;45589:30;;;45628:4;45589:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45523:122;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45444:209:::0;:::o;47911:148::-;4804:13;:11;:13::i;:::-;47977:14:::1;;;;;;;;;;;47976:15;47968:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48047:4;48030:14;;:21;;;;;;;;;;;;;;;;;;47911:148::o:0;45746:210::-;4804:13;:11;:13::i;:::-;45797:18:::1;45818:21;45797:42;;45851:12;45877:15;;;;;;;;;;;45869:29;;45906:10;45869:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45850:71;;;45940:7;45932:16;;;::::0;::::1;;45786:170;;45746:210::o:0;10029:108::-;10090:7;10117:12;;10110:19;;10029:108;:::o;47055:296::-;4804:13;:11;:13::i;:::-;47204:2:::1;47195:5;47182:10;47169;:23;;;;:::i;:::-;:31;;;;:::i;:::-;:37;;47161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47251:36;;;;;;;;47257:10;47251:36;;;;47269:10;47251:36;;;;47281:5;47251:36;;::::0;47240:8:::1;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;47338:5;47325:10;47312;:23;;;;:::i;:::-;:31;;;;:::i;:::-;47298:11;:45;;;;47055:296:::0;;;:::o;41344:31::-;;;;:::o;12041:261::-;12138:4;12155:15;12173:12;:10;:12::i;:::-;12155:30;;12196:38;12212:4;12218:7;12227:6;12196:15;:38::i;:::-;12245:27;12255:4;12261:2;12265:6;12245:9;:27::i;:::-;12290:4;12283:11;;;12041:261;;;;;:::o;40808:24::-;;;;;;;;;;;;;:::o;40874:42::-;;;;;;;;;;;;;:::o;48418:117::-;4804:13;:11;:13::i;:::-;48487:15:::1;;;;;;;;;;;:30;;;48518:8;48487:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48418:117:::0;:::o;49336:141::-;49399:7;49426:15;;;;;;;;;;;:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49419:50;;49336:141;:::o;9871:93::-;9929:5;9954:2;9947:9;;9871:93;:::o;48272:138::-;4804:13;:11;:13::i;:::-;48366:5:::1;48351:20;;:6;:11;48358:3;48351:11;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;48343:29:::1;;;::::0;::::1;;48397:5;48383:6;:11;48390:3;48383:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;48272:138:::0;;:::o;12711:238::-;12799:4;12816:13;12832:12;:10;:12::i;:::-;12816:28;;12855:64;12864:5;12871:7;12908:10;12880:25;12890:5;12897:7;12880:9;:25::i;:::-;:38;;;;:::i;:::-;12855:8;:64::i;:::-;12937:4;12930:11;;;12711:238;;;;:::o;41307:30::-;;;;:::o;40839:26::-;;;;;;;;;;;;;:::o;44330:149::-;44375:12;;;;;;;;;;;44367:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44420:15;;;;;;;;;;;:30;;;44459:10;44420:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44330:149::o;49485:126::-;49551:4;49575:19;:28;49595:7;49575:28;;;;;;;;;;;;;;;;;;;;;;;;;49568:35;;49485:126;;;:::o;46937:110::-;4804:13;:11;:13::i;:::-;47030:9:::1;47012:15;;:27;;;;;;;;;;;;;;;;;;46937:110:::0;:::o;41038:28::-;;;;:::o;49811:171::-;49908:7;49940:15;;;;;;;;;;;:25;;;49966:7;49940:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49933:41;;49811:171;;;:::o;40771:30::-;;;;;;;;;;;;;:::o;10200:127::-;10274:7;10301:9;:18;10311:7;10301:18;;;;;;;;;;;;;;;;10294:25;;10200:127;;;:::o;5559:103::-;4804:13;:11;:13::i;:::-;5624:30:::1;5651:1;5624:18;:30::i;:::-;5559:103::o:0;40925:30::-;;;;;;;;;;;;;:::o;44680:340::-;4804:13;:11;:13::i;:::-;44808:7:::1;44798:6;:17;;44790:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44882:6;44871:7;:17;;44863:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44963:6;44954;:15;;;;:::i;:::-;44939:12;:30;;;;45006:6;44996:7;:16;;;;:::i;:::-;44980:13;:32;;;;44680:340:::0;;:::o;49990:278::-;50095:7;50117;50139;50161;50183;50225:15;;;;;;;;;;;:26;;;50252:7;50225:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50218:42;;;;;;;;;;49990:278;;;;;;;:::o;41214:38::-;;;;;;;;;;;;;;;;;;;:::o;43708:570::-;4804:13;:11;:13::i;:::-;43787:38:::1;43870:10;43787:105;;43903:18;:39;;;43965:18;43999:4;43903:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44025:18;:39;;;44073:4;44080;44025:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44096:18;:39;;;44136:7;:5;:7::i;:::-;44145:4;44096:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44161:18;:39;;;44209:6;;;;;;;;;;;44218:4;44161:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44252:18;44234:15;;:36;;;;;;;;;;;;;;;;;;43776:502;43708:570:::0;:::o;41004:27::-;;;;:::o;45964:160::-;4804:13;:11;:13::i;:::-;46050:15:::1;;;;;;;;;;;:40;;;46091:10;46103:12;46050:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45964:160:::0;:::o;4918:87::-;4964:7;4991:6;;;;;;;;;;;4984:13;;4918:87;:::o;48067:95::-;4804:13;:11;:13::i;:::-;48149:5:::1;48134:12;;:20;;;;;;;;;;;;;;;;;;48067:95:::0;:::o;9119:104::-;9175:13;9208:7;9201:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9119:104;:::o;48605:171::-;4804:13;:11;:13::i;:::-;48724:44:::1;48753:7;48762:5;48724:28;:44::i;:::-;48605:171:::0;;:::o;13452:436::-;13545:4;13562:13;13578:12;:10;:12::i;:::-;13562:28;;13601:24;13628:25;13638:5;13645:7;13628:9;:25::i;:::-;13601:52;;13692:15;13672:16;:35;;13664:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13785:60;13794:5;13801:7;13829:15;13810:16;:34;13785:8;:60::i;:::-;13876:4;13869:11;;;;13452:436;;;;:::o;40715:19::-;;;;;;;;;;;;;:::o;49619:184::-;49716:7;49748:15;;;;;;;;;;;:38;;;49787:7;49748:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49741:54;;49619:184;;;:::o;10533:193::-;10612:4;10629:13;10645:12;:10;:12::i;:::-;10629:28;;10668;10678:5;10685:2;10689:6;10668:9;:28::i;:::-;10714:4;10707:11;;;10533:193;;;;:::o;41384:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;45028:119::-;4804:13;:11;:13::i;:::-;45133:6:::1;45124;:15;;;;:::i;:::-;45103:18;:36;;;;45028:119:::0;:::o;41490:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;54743:320::-;4804:13;:11;:13::i;:::-;54824:12:::1;54846:4;;;;;;;;;;;54839:25;;;54879:10;54912:15;;;;;;;;;;;54943:6;54839:121;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54824:136;;54975:7;54971:85;;;54999:15;;;;;;;;;;;:37;;;55037:6;54999:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;54971:85;54813:250;54743:320:::0;:::o;46372:327::-;4804:13;:11;:13::i;:::-;46511:8:::1;46479:40;;:19;:28;46499:7;46479:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;46457:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46631:8;46600:19;:28;46620:7;46600:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;46673:7;46657:34;;;46682:8;46657:34;;;;;;:::i;:::-;;;;;;;;46372:327:::0;;:::o;44487:185::-;4804:13;:11;:13::i;:::-;44580:7:::1;44570:6;:17;;44562:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44658:6;44649;:15;;;;:::i;:::-;44637:9;:27;;;;44487:185:::0;:::o;46132:113::-;4804:13;:11;:13::i;:::-;46227:9:::1;46203:6;;:34;;;;;;;;;;;;;;;;;;46132:113:::0;:::o;45155:165::-;4804:13;:11;:13::i;:::-;45304:8:::1;45268:24;:33;45293:7;45268:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;45155:165:::0;;:::o;10789:151::-;10878:7;10905:11;:18;10917:5;10905:18;;;;;;;;;;;;;;;:27;10924:7;10905:27;;;;;;;;;;;;;;;;10898:34;;10789:151;;;;:::o;47804:99::-;4804:13;:11;:13::i;:::-;47887:8:::1;47873:11;;:22;;;;;;;;;;;;;;;;;;47804:99:::0;:::o;40964:33::-;;;;:::o;5817:201::-;4804:13;:11;:13::i;:::-;5926:1:::1;5906:22;;:8;:22;;::::0;5898:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5982:28;6001:8;5982:18;:28::i;:::-;5817:201:::0;:::o;41259:39::-;;;;;;;;;;;;;;;;;;;:::o;40680:28::-;;;;;;;;;;;;;:::o;41073:24::-;;;;:::o;5083:132::-;5158:12;:10;:12::i;:::-;5147:23;;:7;:5;:7::i;:::-;:23;;;5139:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5083:132::o;944:98::-;997:7;1024:10;1017:17;;944:98;:::o;17445:346::-;17564:1;17547:19;;:5;:19;;;17539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17645:1;17626:21;;:7;:21;;;17618:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17729:6;17699:11;:18;17711:5;17699:18;;;;;;;;;;;;;;;:27;17718:7;17699:27;;;;;;;;;;;;;;;:36;;;;17767:7;17751:32;;17760:5;17751:32;;;17776:6;17751:32;;;;;;:::i;:::-;;;;;;;;17445:346;;;:::o;18082:419::-;18183:24;18210:25;18220:5;18227:7;18210:9;:25::i;:::-;18183:52;;18270:17;18250:16;:37;18246:248;;18332:6;18312:16;:26;;18304:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18416:51;18425:5;18432:7;18460:6;18441:16;:25;18416:8;:51::i;:::-;18246:248;18172:329;18082:419;;;:::o;50368:2652::-;50516:1;50500:18;;:4;:18;;;50492:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50593:1;50579:16;;:2;:16;;;50571:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50667:19;:25;50687:4;50667:25;;;;;;;;;;;;;;;;;;;;;;;;;50666:26;:54;;;;;50697:19;:23;50717:2;50697:23;;;;;;;;;;;;;;;;;;;;;;;;;50696:24;50666:54;:67;;;;;50725:8;;;;;;;;;;;50724:9;50666:67;50648:788;;;50768:14;;;;;;;;;;;50760:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;50824:25;:29;50850:2;50824:29;;;;;;;;;;;;;;;;;;;;;;;;;50820:384;;;50914:13;;50904:6;:23;;50874:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;50820:384;;;51028:25;:31;51054:4;51028:31;;;;;;;;;;;;;;;;;;;;;;;;;51024:180;;;51118:12;;51108:6;:22;;51078:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;51024:180;50820:384;51224:24;:28;51249:2;51224:28;;;;;;;;;;;;;;;;;;;;;;;;;51219:206;;51329:9;;51312:13;51322:2;51312:9;:13::i;:::-;51303:6;:22;;;;:::i;:::-;:35;;51273:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;51219:206;50648:788;51462:1;51452:6;:11;51448:93;;51480:28;51496:4;51502:2;51506:1;51480:15;:28::i;:::-;51523:7;;51448:93;51553:28;51584:24;51602:4;51584:9;:24::i;:::-;51553:55;;51619:12;51658:18;;51634:20;:42;;51619:57;;51707:7;:33;;;;;51732:8;;;;;;;;;;;51731:9;51707:33;:61;;;;;51757:11;;;;;;;;;;;51707:61;:107;;;;;51785:25;:29;51811:2;51785:29;;;;;;;;;;;;;;;;;;;;;;;;;51707:107;:150;;;;;51832:19;:25;51852:4;51832:25;;;;;;;;;;;;;;;;;;;;;;;;;51831:26;51707:150;:191;;;;;51875:19;:23;51895:2;51875:23;;;;;;;;;;;;;;;;;;;;;;;;;51874:24;51707:191;51689:403;;;51936:4;51925:8;;:15;;;;;;;;;;;;;;;;;;51976:1;51961:12;;:16;51957:91;;;51998:34;52013:18;;51998:14;:34::i;:::-;51957:91;52075:5;52064:8;;:16;;;;;;;;;;;;;;;;;;51689:403;52104:12;52120:8;;;;;;;;;;;52119:9;52104:24;;52230:19;:25;52250:4;52230:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;52259:19;:23;52279:2;52259:23;;;;;;;;;;;;;;;;;;;;;;;;;52230:52;52226:100;;;52309:5;52299:15;;52226:100;52343:25;:29;52369:2;52343:29;;;;;;;;;;;;;;;;;;;;;;;;;52342:30;:66;;;;;52377:25;:31;52403:4;52377:31;;;;;;;;;;;;;;;;;;;;;;;;;52376:32;52342:66;52338:100;;;52433:5;52423:15;;52338:100;52455:7;52451:370;;;52479:14;52512:25;:29;52538:2;52512:29;;;;;;;;;;;;;;;;;;;;;;;;;52508:201;;;52595:3;52579:12;;52570:6;:21;;;;:::i;:::-;52569:29;;;;:::i;:::-;52560:38;;52508:201;;;52622:25;:31;52648:4;52622:31;;;;;;;;;;;;;;;;;;;;;;;;;52618:91;;;52706:3;52691:11;;52682:6;:20;;;;:::i;:::-;52681:28;;;;:::i;:::-;52672:37;;52618:91;52508:201;52744:6;52735;:15;;;;:::i;:::-;52726:24;;52765:44;52781:4;52795;52802:6;52765:15;:44::i;:::-;52464:357;52451:370;52831:33;52847:4;52853:2;52857:6;52831:15;:33::i;:::-;52881:15;;;;;;;;;;;:26;;;52908:4;52914:15;52924:4;52914:9;:15::i;:::-;52881:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52877:65;52956:15;;;;;;;;;;;:26;;;52983:2;52987:13;52997:2;52987:9;:13::i;:::-;52956:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52952:61;50481:2539;;;50368:2652;;;;:::o;6178:191::-;6252:16;6271:6;;;;;;;;;;;6252:25;;6297:8;6288:6;;:17;;;;;;;;;;;;;;;;;;6352:8;6321:40;;6342:8;6321:40;;;;;;;;;;;;6241:128;6178:191;:::o;48784:458::-;48930:5;48892:43;;:25;:34;48918:7;48892:34;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;48870:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;49067:5;49030:25;:34;49056:7;49030:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;49089:5;49085:89;;;49111:15;;;;;;;;;;;:36;;;49148:7;49157:4;49111:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49085:89;49228:5;49191:43;;49219:7;49191:43;;;;;;;;;;;;48784:458;;:::o;14358:806::-;14471:1;14455:18;;:4;:18;;;14447:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14548:1;14534:16;;:2;:16;;;14526:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14603:38;14624:4;14630:2;14634:6;14603:20;:38::i;:::-;14654:19;14676:9;:15;14686:4;14676:15;;;;;;;;;;;;;;;;14654:37;;14725:6;14710:11;:21;;14702:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14842:6;14828:11;:20;14810:9;:15;14820:4;14810:15;;;;;;;;;;;;;;;:38;;;;15045:6;15028:9;:13;15038:2;15028:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15095:2;15080:26;;15089:4;15080:26;;;15099:6;15080:26;;;;;;:::i;:::-;;;;;;;;15119:37;15139:4;15145:2;15149:6;15119:19;:37::i;:::-;14436:728;14358:806;;;:::o;53028:1589::-;53087:20;53160:1;53144:12;;53121:9;:19;;;53112:6;:28;;;;:::i;:::-;53111:45;;;;:::i;:::-;53110:51;;;;:::i;:::-;53087:74;;53172:32;53257:1;53241:12;;53218:9;:19;;;53209:6;:28;;;;:::i;:::-;53208:45;;;;:::i;:::-;53207:51;;;;:::i;:::-;53172:86;;53269:26;53331:12;;53308:9;:19;;;53299:6;:28;;;;:::i;:::-;53298:45;;;;:::i;:::-;53269:74;;53356:14;53401:12;;53383:9;:14;;;53374:6;:23;;;;:::i;:::-;53373:40;;;;:::i;:::-;53356:57;;53426:30;53443:12;53426:16;:30::i;:::-;53469:22;53494:21;53469:46;;53549:1;53532:14;:18;53528:142;;;53604:54;53617:24;53643:14;53604:12;:54::i;:::-;53528:142;53682:36;53699:18;53682:16;:36::i;:::-;53731:21;53755;53731:45;;53817:14;53834:13;53817:30;;53873:1;53864:6;:10;53860:177;;;53892:12;53918:15;;;;;;;;;;;53910:29;;53947:6;53910:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53891:67;;;53981:7;53973:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;53876:161;53860:177;54049:17;54076:4;;;;;;;;;;;54069:22;;;54100:4;54069:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54049:57;;54151:17;54171:9;54151:29;;54209:1;54197:9;:13;54193:334;;;54227:12;54249:4;;;;;;;;;;;54242:21;;;54290:15;;;;;;;;;;;54325:9;54242:107;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54227:122;;54368:7;54364:152;;;54396:15;;;;;;;;;;;:37;;;54434:9;54396:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54468:32;54482:6;54490:9;54468:32;;;;;;;:::i;:::-;;;;;;;;54364:152;54212:315;54193:334;54552:1;54543:6;:10;54539:71;;;54570:28;54584:4;54591:6;54570:5;:28::i;:::-;54539:71;53076:1541;;;;;;;;;53028:1589;:::o;19101:91::-;;;;:::o;19796:90::-;;;;:::o;55071:502::-;55137:21;55175:1;55161:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55137:40;;55206:4;55188;55193:1;55188:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;55232:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55222:4;55227:1;55222:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;55258:53;55275:4;55290:6;;;;;;;;;;;55299:11;55258:8;:53::i;:::-;55350:6;;;;;;;;;;;:57;;;55422:11;55448:1;55492:4;55519;55539:15;55350:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55126:447;55071:502;:::o;55581:501::-;55729:53;55746:4;55761:6;;;;;;;;;;;55770:11;55729:8;:53::i;:::-;55825:6;;;;;;;;;;;:22;;;55855:9;55888:4;55908:11;55934:1;55977;56028:4;56048:15;55825:249;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;55581:501;;:::o;16332:675::-;16435:1;16416:21;;:7;:21;;;16408:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16488:49;16509:7;16526:1;16530:6;16488:20;:49::i;:::-;16550:22;16575:9;:18;16585:7;16575:18;;;;;;;;;;;;;;;;16550:43;;16630:6;16612:14;:24;;16604:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16749:6;16732:14;:23;16711:9;:18;16721:7;16711:18;;;;;;;;;;;;;;;:44;;;;16866:6;16850:12;;:22;;;;;;;;;;;16927:1;16901:37;;16910:7;16901:37;;;16931:6;16901:37;;;;;;:::i;:::-;;;;;;;;16951:48;16971:7;16988:1;16992:6;16951:19;:48::i;:::-;16397:610;16332:675;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:307::-;2020:1;2030:113;2044:6;2041:1;2038:13;2030:113;;;2129:1;2124:3;2120:11;2114:18;2110:1;2105:3;2101:11;2094:39;2066:2;2063:1;2059:10;2054:15;;2030:113;;;2161:6;2158:1;2155:13;2152:101;;;2241:1;2232:6;2227:3;2223:16;2216:27;2152:101;2001:258;1952:307;;;:::o;2265:102::-;2306:6;2357:2;2353:7;2348:2;2341:5;2337:14;2333:28;2323:38;;2265:102;;;:::o;2373:364::-;2461:3;2489:39;2522:5;2489:39;:::i;:::-;2544:71;2608:6;2603:3;2544:71;:::i;:::-;2537:78;;2624:52;2669:6;2664:3;2657:4;2650:5;2646:16;2624:52;:::i;:::-;2701:29;2723:6;2701:29;:::i;:::-;2696:3;2692:39;2685:46;;2465:272;2373:364;;;;:::o;2743:313::-;2856:4;2894:2;2883:9;2879:18;2871:26;;2943:9;2937:4;2933:20;2929:1;2918:9;2914:17;2907:47;2971:78;3044:4;3035:6;2971:78;:::i;:::-;2963:86;;2743:313;;;;:::o;3062:77::-;3099:7;3128:5;3117:16;;3062:77;;;:::o;3145:122::-;3218:24;3236:5;3218:24;:::i;:::-;3211:5;3208:35;3198:63;;3257:1;3254;3247:12;3198:63;3145:122;:::o;3273:139::-;3319:5;3357:6;3344:20;3335:29;;3373:33;3400:5;3373:33;:::i;:::-;3273:139;;;;:::o;3418:619::-;3495:6;3503;3511;3560:2;3548:9;3539:7;3535:23;3531:32;3528:119;;;3566:79;;:::i;:::-;3528:119;3686:1;3711:53;3756:7;3747:6;3736:9;3732:22;3711:53;:::i;:::-;3701:63;;3657:117;3813:2;3839:53;3884:7;3875:6;3864:9;3860:22;3839:53;:::i;:::-;3829:63;;3784:118;3941:2;3967:53;4012:7;4003:6;3992:9;3988:22;3967:53;:::i;:::-;3957:63;;3912:118;3418:619;;;;;:::o;4043:474::-;4111:6;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4043:474;;;;;:::o;4523:109::-;4604:21;4619:5;4604:21;:::i;:::-;4599:3;4592:34;4523:109;;:::o;4638:210::-;4725:4;4763:2;4752:9;4748:18;4740:26;;4776:65;4838:1;4827:9;4823:17;4814:6;4776:65;:::i;:::-;4638:210;;;;:::o;4854:329::-;4913:6;4962:2;4950:9;4941:7;4937:23;4933:32;4930:119;;;4968:79;;:::i;:::-;4930:119;5088:1;5113:53;5158:7;5149:6;5138:9;5134:22;5113:53;:::i;:::-;5103:63;;5059:117;4854:329;;;;:::o;5189:118::-;5276:24;5294:5;5276:24;:::i;:::-;5271:3;5264:37;5189:118;;:::o;5313:222::-;5406:4;5444:2;5433:9;5429:18;5421:26;;5457:71;5525:1;5514:9;5510:17;5501:6;5457:71;:::i;:::-;5313:222;;;;:::o;5541:619::-;5618:6;5626;5634;5683:2;5671:9;5662:7;5658:23;5654:32;5651:119;;;5689:79;;:::i;:::-;5651:119;5809:1;5834:53;5879:7;5870:6;5859:9;5855:22;5834:53;:::i;:::-;5824:63;;5780:117;5936:2;5962:53;6007:7;5998:6;5987:9;5983:22;5962:53;:::i;:::-;5952:63;;5907:118;6064:2;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6035:118;5541:619;;;;;:::o;6166:60::-;6194:3;6215:5;6208:12;;6166:60;;;:::o;6232:142::-;6282:9;6315:53;6333:34;6342:24;6360:5;6342:24;:::i;:::-;6333:34;:::i;:::-;6315:53;:::i;:::-;6302:66;;6232:142;;;:::o;6380:126::-;6430:9;6463:37;6494:5;6463:37;:::i;:::-;6450:50;;6380:126;;;:::o;6512:154::-;6590:9;6623:37;6654:5;6623:37;:::i;:::-;6610:50;;6512:154;;;:::o;6672:187::-;6787:65;6846:5;6787:65;:::i;:::-;6782:3;6775:78;6672:187;;:::o;6865:278::-;6986:4;7024:2;7013:9;7009:18;7001:26;;7037:99;7133:1;7122:9;7118:17;7109:6;7037:99;:::i;:::-;6865:278;;;;:::o;7149:86::-;7184:7;7224:4;7217:5;7213:16;7202:27;;7149:86;;;:::o;7241:112::-;7324:22;7340:5;7324:22;:::i;:::-;7319:3;7312:35;7241:112;;:::o;7359:214::-;7448:4;7486:2;7475:9;7471:18;7463:26;;7499:67;7563:1;7552:9;7548:17;7539:6;7499:67;:::i;:::-;7359:214;;;;:::o;7579:118::-;7666:24;7684:5;7666:24;:::i;:::-;7661:3;7654:37;7579:118;;:::o;7703:222::-;7796:4;7834:2;7823:9;7819:18;7811:26;;7847:71;7915:1;7904:9;7900:17;7891:6;7847:71;:::i;:::-;7703:222;;;;:::o;7931:474::-;7999:6;8007;8056:2;8044:9;8035:7;8031:23;8027:32;8024:119;;;8062:79;;:::i;:::-;8024:119;8182:1;8207:53;8252:7;8243:6;8232:9;8228:22;8207:53;:::i;:::-;8197:63;;8153:117;8309:2;8335:53;8380:7;8371:6;8360:9;8356:22;8335:53;:::i;:::-;8325:63;;8280:118;7931:474;;;;;:::o;8411:664::-;8616:4;8654:3;8643:9;8639:19;8631:27;;8668:71;8736:1;8725:9;8721:17;8712:6;8668:71;:::i;:::-;8749:72;8817:2;8806:9;8802:18;8793:6;8749:72;:::i;:::-;8831;8899:2;8888:9;8884:18;8875:6;8831:72;:::i;:::-;8913;8981:2;8970:9;8966:18;8957:6;8913:72;:::i;:::-;8995:73;9063:3;9052:9;9048:19;9039:6;8995:73;:::i;:::-;8411:664;;;;;;;;:::o;9081:442::-;9230:4;9268:2;9257:9;9253:18;9245:26;;9281:71;9349:1;9338:9;9334:17;9325:6;9281:71;:::i;:::-;9362:72;9430:2;9419:9;9415:18;9406:6;9362:72;:::i;:::-;9444;9512:2;9501:9;9497:18;9488:6;9444:72;:::i;:::-;9081:442;;;;;;:::o;9529:323::-;9585:6;9634:2;9622:9;9613:7;9609:23;9605:32;9602:119;;;9640:79;;:::i;:::-;9602:119;9760:1;9785:50;9827:7;9818:6;9807:9;9803:22;9785:50;:::i;:::-;9775:60;;9731:114;9529:323;;;;:::o;9858:329::-;9917:6;9966:2;9954:9;9945:7;9941:23;9937:32;9934:119;;;9972:79;;:::i;:::-;9934:119;10092:1;10117:53;10162:7;10153:6;10142:9;10138:22;10117:53;:::i;:::-;10107:63;;10063:117;9858:329;;;;:::o;10193:474::-;10261:6;10269;10318:2;10306:9;10297:7;10293:23;10289:32;10286:119;;;10324:79;;:::i;:::-;10286:119;10444:1;10469:53;10514:7;10505:6;10494:9;10490:22;10469:53;:::i;:::-;10459:63;;10415:117;10571:2;10597:53;10642:7;10633:6;10622:9;10618:22;10597:53;:::i;:::-;10587:63;;10542:118;10193:474;;;;;:::o;10673:149::-;10746:9;10779:37;10810:5;10779:37;:::i;:::-;10766:50;;10673:149;;;:::o;10828:177::-;10938:60;10992:5;10938:60;:::i;:::-;10933:3;10926:73;10828:177;;:::o;11011:268::-;11127:4;11165:2;11154:9;11150:18;11142:26;;11178:94;11269:1;11258:9;11254:17;11245:6;11178:94;:::i;:::-;11011:268;;;;:::o;11285:320::-;11400:4;11438:2;11427:9;11423:18;11415:26;;11451:71;11519:1;11508:9;11504:17;11495:6;11451:71;:::i;:::-;11532:66;11594:2;11583:9;11579:18;11570:6;11532:66;:::i;:::-;11285:320;;;;;:::o;11611:180::-;11659:77;11656:1;11649:88;11756:4;11753:1;11746:15;11780:4;11777:1;11770:15;11797:320;11841:6;11878:1;11872:4;11868:12;11858:22;;11925:1;11919:4;11915:12;11946:18;11936:81;;12002:4;11994:6;11990:17;11980:27;;11936:81;12064:2;12056:6;12053:14;12033:18;12030:38;12027:84;;12083:18;;:::i;:::-;12027:84;11848:269;11797:320;;;:::o;12123:180::-;12171:77;12168:1;12161:88;12268:4;12265:1;12258:15;12292:4;12289:1;12282:15;12309:305;12349:3;12368:20;12386:1;12368:20;:::i;:::-;12363:25;;12402:20;12420:1;12402:20;:::i;:::-;12397:25;;12556:1;12488:66;12484:74;12481:1;12478:81;12475:107;;;12562:18;;:::i;:::-;12475:107;12606:1;12603;12599:9;12592:16;;12309:305;;;;:::o;12620:168::-;12760:20;12756:1;12748:6;12744:14;12737:44;12620:168;:::o;12794:366::-;12936:3;12957:67;13021:2;13016:3;12957:67;:::i;:::-;12950:74;;13033:93;13122:3;13033:93;:::i;:::-;13151:2;13146:3;13142:12;13135:19;;12794:366;;;:::o;13166:419::-;13332:4;13370:2;13359:9;13355:18;13347:26;;13419:9;13413:4;13409:20;13405:1;13394:9;13390:17;13383:47;13447:131;13573:4;13447:131;:::i;:::-;13439:139;;13166:419;;;:::o;13591:143::-;13648:5;13679:6;13673:13;13664:22;;13695:33;13722:5;13695:33;:::i;:::-;13591:143;;;;:::o;13740:351::-;13810:6;13859:2;13847:9;13838:7;13834:23;13830:32;13827:119;;;13865:79;;:::i;:::-;13827:119;13985:1;14010:64;14066:7;14057:6;14046:9;14042:22;14010:64;:::i;:::-;14000:74;;13956:128;13740:351;;;;:::o;14097:332::-;14218:4;14256:2;14245:9;14241:18;14233:26;;14269:71;14337:1;14326:9;14322:17;14313:6;14269:71;:::i;:::-;14350:72;14418:2;14407:9;14403:18;14394:6;14350:72;:::i;:::-;14097:332;;;;;:::o;14435:137::-;14489:5;14520:6;14514:13;14505:22;;14536:30;14560:5;14536:30;:::i;:::-;14435:137;;;;:::o;14578:345::-;14645:6;14694:2;14682:9;14673:7;14669:23;14665:32;14662:119;;;14700:79;;:::i;:::-;14662:119;14820:1;14845:61;14898:7;14889:6;14878:9;14874:22;14845:61;:::i;:::-;14835:71;;14791:125;14578:345;;;;:::o;14929:173::-;15069:25;15065:1;15057:6;15053:14;15046:49;14929:173;:::o;15108:366::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15108:366;;;:::o;15480:419::-;15646:4;15684:2;15673:9;15669:18;15661:26;;15733:9;15727:4;15723:20;15719:1;15708:9;15704:17;15697:47;15761:131;15887:4;15761:131;:::i;:::-;15753:139;;15480:419;;;:::o;15905:147::-;16006:11;16043:3;16028:18;;15905:147;;;;:::o;16058:114::-;;:::o;16178:398::-;16337:3;16358:83;16439:1;16434:3;16358:83;:::i;:::-;16351:90;;16450:93;16539:3;16450:93;:::i;:::-;16568:1;16563:3;16559:11;16552:18;;16178:398;;;:::o;16582:379::-;16766:3;16788:147;16931:3;16788:147;:::i;:::-;16781:154;;16952:3;16945:10;;16582:379;;;:::o;16967:167::-;17107:19;17103:1;17095:6;17091:14;17084:43;16967:167;:::o;17140:366::-;17282:3;17303:67;17367:2;17362:3;17303:67;:::i;:::-;17296:74;;17379:93;17468:3;17379:93;:::i;:::-;17497:2;17492:3;17488:12;17481:19;;17140:366;;;:::o;17512:419::-;17678:4;17716:2;17705:9;17701:18;17693:26;;17765:9;17759:4;17755:20;17751:1;17740:9;17736:17;17729:47;17793:131;17919:4;17793:131;:::i;:::-;17785:139;;17512:419;;;:::o;17937:104::-;17982:7;18011:24;18029:5;18011:24;:::i;:::-;18000:35;;17937:104;;;:::o;18047:142::-;18150:32;18176:5;18150:32;:::i;:::-;18145:3;18138:45;18047:142;;:::o;18195:254::-;18304:4;18342:2;18331:9;18327:18;18319:26;;18355:87;18439:1;18428:9;18424:17;18415:6;18355:87;:::i;:::-;18195:254;;;;:::o;18455:182::-;18595:34;18591:1;18583:6;18579:14;18572:58;18455:182;:::o;18643:366::-;18785:3;18806:67;18870:2;18865:3;18806:67;:::i;:::-;18799:74;;18882:93;18971:3;18882:93;:::i;:::-;19000:2;18995:3;18991:12;18984:19;;18643:366;;;:::o;19015:419::-;19181:4;19219:2;19208:9;19204:18;19196:26;;19268:9;19262:4;19258:20;19254:1;19243:9;19239:17;19232:47;19296:131;19422:4;19296:131;:::i;:::-;19288:139;;19015:419;;;:::o;19440:222::-;19580:34;19576:1;19568:6;19564:14;19557:58;19649:5;19644:2;19636:6;19632:15;19625:30;19440:222;:::o;19668:366::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:419::-;20206:4;20244:2;20233:9;20229:18;20221:26;;20293:9;20287:4;20283:20;20279:1;20268:9;20264:17;20257:47;20321:131;20447:4;20321:131;:::i;:::-;20313:139;;20040:419;;;:::o;20465:348::-;20505:7;20528:20;20546:1;20528:20;:::i;:::-;20523:25;;20562:20;20580:1;20562:20;:::i;:::-;20557:25;;20750:1;20682:66;20678:74;20675:1;20672:81;20667:1;20660:9;20653:17;20649:105;20646:131;;;20757:18;;:::i;:::-;20646:131;20805:1;20802;20798:9;20787:20;;20465:348;;;;:::o;20819:143::-;20876:5;20907:6;20901:13;20892:22;;20923:33;20950:5;20923:33;:::i;:::-;20819:143;;;;:::o;20968:977::-;21074:6;21082;21090;21098;21106;21155:3;21143:9;21134:7;21130:23;21126:33;21123:120;;;21162:79;;:::i;:::-;21123:120;21282:1;21307:64;21363:7;21354:6;21343:9;21339:22;21307:64;:::i;:::-;21297:74;;21253:128;21420:2;21446:64;21502:7;21493:6;21482:9;21478:22;21446:64;:::i;:::-;21436:74;;21391:129;21559:2;21585:64;21641:7;21632:6;21621:9;21617:22;21585:64;:::i;:::-;21575:74;;21530:129;21698:2;21724:64;21780:7;21771:6;21760:9;21756:22;21724:64;:::i;:::-;21714:74;;21669:129;21837:3;21864:64;21920:7;21911:6;21900:9;21896:22;21864:64;:::i;:::-;21854:74;;21808:130;20968:977;;;;;;;;:::o;21951:332::-;22072:4;22110:2;22099:9;22095:18;22087:26;;22123:71;22191:1;22180:9;22176:17;22167:6;22123:71;:::i;:::-;22204:72;22272:2;22261:9;22257:18;22248:6;22204:72;:::i;:::-;21951:332;;;;;:::o;22289:224::-;22429:34;22425:1;22417:6;22413:14;22406:58;22498:7;22493:2;22485:6;22481:15;22474:32;22289:224;:::o;22519:366::-;22661:3;22682:67;22746:2;22741:3;22682:67;:::i;:::-;22675:74;;22758:93;22847:3;22758:93;:::i;:::-;22876:2;22871:3;22867:12;22860:19;;22519:366;;;:::o;22891:419::-;23057:4;23095:2;23084:9;23080:18;23072:26;;23144:9;23138:4;23134:20;23130:1;23119:9;23115:17;23108:47;23172:131;23298:4;23172:131;:::i;:::-;23164:139;;22891:419;;;:::o;23316:442::-;23465:4;23503:2;23492:9;23488:18;23480:26;;23516:71;23584:1;23573:9;23569:17;23560:6;23516:71;:::i;:::-;23597:72;23665:2;23654:9;23650:18;23641:6;23597:72;:::i;:::-;23679;23747:2;23736:9;23732:18;23723:6;23679:72;:::i;:::-;23316:442;;;;;;:::o;23764:229::-;23904:34;23900:1;23892:6;23888:14;23881:58;23973:12;23968:2;23960:6;23956:15;23949:37;23764:229;:::o;23999:366::-;24141:3;24162:67;24226:2;24221:3;24162:67;:::i;:::-;24155:74;;24238:93;24327:3;24238:93;:::i;:::-;24356:2;24351:3;24347:12;24340:19;;23999:366;;;:::o;24371:419::-;24537:4;24575:2;24564:9;24560:18;24552:26;;24624:9;24618:4;24614:20;24610:1;24599:9;24595:17;24588:47;24652:131;24778:4;24652:131;:::i;:::-;24644:139;;24371:419;;;:::o;24796:221::-;24936:34;24932:1;24924:6;24920:14;24913:58;25005:4;25000:2;24992:6;24988:15;24981:29;24796:221;:::o;25023:366::-;25165:3;25186:67;25250:2;25245:3;25186:67;:::i;:::-;25179:74;;25262:93;25351:3;25262:93;:::i;:::-;25380:2;25375:3;25371:12;25364:19;;25023:366;;;:::o;25395:419::-;25561:4;25599:2;25588:9;25584:18;25576:26;;25648:9;25642:4;25638:20;25634:1;25623:9;25619:17;25612:47;25676:131;25802:4;25676:131;:::i;:::-;25668:139;;25395:419;;;:::o;25820:225::-;25960:34;25956:1;25948:6;25944:14;25937:58;26029:8;26024:2;26016:6;26012:15;26005:33;25820:225;:::o;26051:366::-;26193:3;26214:67;26278:2;26273:3;26214:67;:::i;:::-;26207:74;;26290:93;26379:3;26290:93;:::i;:::-;26408:2;26403:3;26399:12;26392:19;;26051:366;;;:::o;26423:419::-;26589:4;26627:2;26616:9;26612:18;26604:26;;26676:9;26670:4;26666:20;26662:1;26651:9;26647:17;26640:47;26704:131;26830:4;26704:131;:::i;:::-;26696:139;;26423:419;;;:::o;26848:182::-;26988:34;26984:1;26976:6;26972:14;26965:58;26848:182;:::o;27036:366::-;27178:3;27199:67;27263:2;27258:3;27199:67;:::i;:::-;27192:74;;27275:93;27364:3;27275:93;:::i;:::-;27393:2;27388:3;27384:12;27377:19;;27036:366;;;:::o;27408:419::-;27574:4;27612:2;27601:9;27597:18;27589:26;;27661:9;27655:4;27651:20;27647:1;27636:9;27632:17;27625:47;27689:131;27815:4;27689:131;:::i;:::-;27681:139;;27408:419;;;:::o;27833:223::-;27973:34;27969:1;27961:6;27957:14;27950:58;28042:6;28037:2;28029:6;28025:15;28018:31;27833:223;:::o;28062:366::-;28204:3;28225:67;28289:2;28284:3;28225:67;:::i;:::-;28218:74;;28301:93;28390:3;28301:93;:::i;:::-;28419:2;28414:3;28410:12;28403:19;;28062:366;;;:::o;28434:419::-;28600:4;28638:2;28627:9;28623:18;28615:26;;28687:9;28681:4;28677:20;28673:1;28662:9;28658:17;28651:47;28715:131;28841:4;28715:131;:::i;:::-;28707:139;;28434:419;;;:::o;28859:221::-;28999:34;28995:1;28987:6;28983:14;28976:58;29068:4;29063:2;29055:6;29051:15;29044:29;28859:221;:::o;29086:366::-;29228:3;29249:67;29313:2;29308:3;29249:67;:::i;:::-;29242:74;;29325:93;29414:3;29325:93;:::i;:::-;29443:2;29438:3;29434:12;29427:19;;29086:366;;;:::o;29458:419::-;29624:4;29662:2;29651:9;29647:18;29639:26;;29711:9;29705:4;29701:20;29697:1;29686:9;29682:17;29675:47;29739:131;29865:4;29739:131;:::i;:::-;29731:139;;29458:419;;;:::o;29883:179::-;30023:31;30019:1;30011:6;30007:14;30000:55;29883:179;:::o;30068:366::-;30210:3;30231:67;30295:2;30290:3;30231:67;:::i;:::-;30224:74;;30307:93;30396:3;30307:93;:::i;:::-;30425:2;30420:3;30416:12;30409:19;;30068:366;;;:::o;30440:419::-;30606:4;30644:2;30633:9;30629:18;30621:26;;30693:9;30687:4;30683:20;30679:1;30668:9;30664:17;30657:47;30721:131;30847:4;30721:131;:::i;:::-;30713:139;;30440:419;;;:::o;30865:224::-;31005:34;31001:1;30993:6;30989:14;30982:58;31074:7;31069:2;31061:6;31057:15;31050:32;30865:224;:::o;31095:366::-;31237:3;31258:67;31322:2;31317:3;31258:67;:::i;:::-;31251:74;;31334:93;31423:3;31334:93;:::i;:::-;31452:2;31447:3;31443:12;31436:19;;31095:366;;;:::o;31467:419::-;31633:4;31671:2;31660:9;31656:18;31648:26;;31720:9;31714:4;31710:20;31706:1;31695:9;31691:17;31684:47;31748:131;31874:4;31748:131;:::i;:::-;31740:139;;31467:419;;;:::o;31892:222::-;32032:34;32028:1;32020:6;32016:14;32009:58;32101:5;32096:2;32088:6;32084:15;32077:30;31892:222;:::o;32120:366::-;32262:3;32283:67;32347:2;32342:3;32283:67;:::i;:::-;32276:74;;32359:93;32448:3;32359:93;:::i;:::-;32477:2;32472:3;32468:12;32461:19;;32120:366;;;:::o;32492:419::-;32658:4;32696:2;32685:9;32681:18;32673:26;;32745:9;32739:4;32735:20;32731:1;32720:9;32716:17;32709:47;32773:131;32899:4;32773:131;:::i;:::-;32765:139;;32492:419;;;:::o;32917:168::-;33057:20;33053:1;33045:6;33041:14;33034:44;32917:168;:::o;33091:366::-;33233:3;33254:67;33318:2;33313:3;33254:67;:::i;:::-;33247:74;;33330:93;33419:3;33330:93;:::i;:::-;33448:2;33443:3;33439:12;33432:19;;33091:366;;;:::o;33463:419::-;33629:4;33667:2;33656:9;33652:18;33644:26;;33716:9;33710:4;33706:20;33702:1;33691:9;33687:17;33680:47;33744:131;33870:4;33744:131;:::i;:::-;33736:139;;33463:419;;;:::o;33888:181::-;34028:33;34024:1;34016:6;34012:14;34005:57;33888:181;:::o;34075:366::-;34217:3;34238:67;34302:2;34297:3;34238:67;:::i;:::-;34231:74;;34314:93;34403:3;34314:93;:::i;:::-;34432:2;34427:3;34423:12;34416:19;;34075:366;;;:::o;34447:419::-;34613:4;34651:2;34640:9;34636:18;34628:26;;34700:9;34694:4;34690:20;34686:1;34675:9;34671:17;34664:47;34728:131;34854:4;34728:131;:::i;:::-;34720:139;;34447:419;;;:::o;34872:180::-;35012:32;35008:1;35000:6;34996:14;34989:56;34872:180;:::o;35058:366::-;35200:3;35221:67;35285:2;35280:3;35221:67;:::i;:::-;35214:74;;35297:93;35386:3;35297:93;:::i;:::-;35415:2;35410:3;35406:12;35399:19;;35058:366;;;:::o;35430:419::-;35596:4;35634:2;35623:9;35619:18;35611:26;;35683:9;35677:4;35673:20;35669:1;35658:9;35654:17;35647:47;35711:131;35837:4;35711:131;:::i;:::-;35703:139;;35430:419;;;:::o;35855:177::-;35995:29;35991:1;35983:6;35979:14;35972:53;35855:177;:::o;36038:366::-;36180:3;36201:67;36265:2;36260:3;36201:67;:::i;:::-;36194:74;;36277:93;36366:3;36277:93;:::i;:::-;36395:2;36390:3;36386:12;36379:19;;36038:366;;;:::o;36410:419::-;36576:4;36614:2;36603:9;36599:18;36591:26;;36663:9;36657:4;36653:20;36649:1;36638:9;36634:17;36627:47;36691:131;36817:4;36691:131;:::i;:::-;36683:139;;36410:419;;;:::o;36835:180::-;36883:77;36880:1;36873:88;36980:4;36977:1;36970:15;37004:4;37001:1;36994:15;37021:185;37061:1;37078:20;37096:1;37078:20;:::i;:::-;37073:25;;37112:20;37130:1;37112:20;:::i;:::-;37107:25;;37151:1;37141:35;;37156:18;;:::i;:::-;37141:35;37198:1;37195;37191:9;37186:14;;37021:185;;;;:::o;37212:191::-;37252:4;37272:20;37290:1;37272:20;:::i;:::-;37267:25;;37306:20;37324:1;37306:20;:::i;:::-;37301:25;;37345:1;37342;37339:8;37336:34;;;37350:18;;:::i;:::-;37336:34;37395:1;37392;37388:9;37380:17;;37212:191;;;;:::o;37409:243::-;37549:34;37545:1;37537:6;37533:14;37526:58;37618:26;37613:2;37605:6;37601:15;37594:51;37409:243;:::o;37658:366::-;37800:3;37821:67;37885:2;37880:3;37821:67;:::i;:::-;37814:74;;37897:93;37986:3;37897:93;:::i;:::-;38015:2;38010:3;38006:12;37999:19;;37658:366;;;:::o;38030:419::-;38196:4;38234:2;38223:9;38219:18;38211:26;;38283:9;38277:4;38273:20;38269:1;38258:9;38254:17;38247:47;38311:131;38437:4;38311:131;:::i;:::-;38303:139;;38030:419;;;:::o;38455:225::-;38595:34;38591:1;38583:6;38579:14;38572:58;38664:8;38659:2;38651:6;38647:15;38640:33;38455:225;:::o;38686:366::-;38828:3;38849:67;38913:2;38908:3;38849:67;:::i;:::-;38842:74;;38925:93;39014:3;38925:93;:::i;:::-;39043:2;39038:3;39034:12;39027:19;;38686:366;;;:::o;39058:419::-;39224:4;39262:2;39251:9;39247:18;39239:26;;39311:9;39305:4;39301:20;39297:1;39286:9;39282:17;39275:47;39339:131;39465:4;39339:131;:::i;:::-;39331:139;;39058:419;;;:::o;39483:182::-;39623:34;39619:1;39611:6;39607:14;39600:58;39483:182;:::o;39671:366::-;39813:3;39834:67;39898:2;39893:3;39834:67;:::i;:::-;39827:74;;39910:93;39999:3;39910:93;:::i;:::-;40028:2;40023:3;40019:12;40012:19;;39671:366;;;:::o;40043:419::-;40209:4;40247:2;40236:9;40232:18;40224:26;;40296:9;40290:4;40286:20;40282:1;40271:9;40267:17;40260:47;40324:131;40450:4;40324:131;:::i;:::-;40316:139;;40043:419;;;:::o;40468:332::-;40589:4;40627:2;40616:9;40612:18;40604:26;;40640:71;40708:1;40697:9;40693:17;40684:6;40640:71;:::i;:::-;40721:72;40789:2;40778:9;40774:18;40765:6;40721:72;:::i;:::-;40468:332;;;;;:::o;40806:180::-;40854:77;40851:1;40844:88;40951:4;40948:1;40941:15;40975:4;40972:1;40965:15;40992:180;41040:77;41037:1;41030:88;41137:4;41134:1;41127:15;41161:4;41158:1;41151:15;41178:351;41248:6;41297:2;41285:9;41276:7;41272:23;41268:32;41265:119;;;41303:79;;:::i;:::-;41265:119;41423:1;41448:64;41504:7;41495:6;41484:9;41480:22;41448:64;:::i;:::-;41438:74;;41394:128;41178:351;;;;:::o;41535:85::-;41580:7;41609:5;41598:16;;41535:85;;;:::o;41626:158::-;41684:9;41717:61;41735:42;41744:32;41770:5;41744:32;:::i;:::-;41735:42;:::i;:::-;41717:61;:::i;:::-;41704:74;;41626:158;;;:::o;41790:147::-;41885:45;41924:5;41885:45;:::i;:::-;41880:3;41873:58;41790:147;;:::o;41943:114::-;42010:6;42044:5;42038:12;42028:22;;41943:114;;;:::o;42063:184::-;42162:11;42196:6;42191:3;42184:19;42236:4;42231:3;42227:14;42212:29;;42063:184;;;;:::o;42253:132::-;42320:4;42343:3;42335:11;;42373:4;42368:3;42364:14;42356:22;;42253:132;;;:::o;42391:108::-;42468:24;42486:5;42468:24;:::i;:::-;42463:3;42456:37;42391:108;;:::o;42505:179::-;42574:10;42595:46;42637:3;42629:6;42595:46;:::i;:::-;42673:4;42668:3;42664:14;42650:28;;42505:179;;;;:::o;42690:113::-;42760:4;42792;42787:3;42783:14;42775:22;;42690:113;;;:::o;42839:732::-;42958:3;42987:54;43035:5;42987:54;:::i;:::-;43057:86;43136:6;43131:3;43057:86;:::i;:::-;43050:93;;43167:56;43217:5;43167:56;:::i;:::-;43246:7;43277:1;43262:284;43287:6;43284:1;43281:13;43262:284;;;43363:6;43357:13;43390:63;43449:3;43434:13;43390:63;:::i;:::-;43383:70;;43476:60;43529:6;43476:60;:::i;:::-;43466:70;;43322:224;43309:1;43306;43302:9;43297:14;;43262:284;;;43266:14;43562:3;43555:10;;42963:608;;;42839:732;;;;:::o;43577:831::-;43840:4;43878:3;43867:9;43863:19;43855:27;;43892:71;43960:1;43949:9;43945:17;43936:6;43892:71;:::i;:::-;43973:80;44049:2;44038:9;44034:18;44025:6;43973:80;:::i;:::-;44100:9;44094:4;44090:20;44085:2;44074:9;44070:18;44063:48;44128:108;44231:4;44222:6;44128:108;:::i;:::-;44120:116;;44246:72;44314:2;44303:9;44299:18;44290:6;44246:72;:::i;:::-;44328:73;44396:3;44385:9;44381:19;44372:6;44328:73;:::i;:::-;43577:831;;;;;;;;:::o;44414:807::-;44663:4;44701:3;44690:9;44686:19;44678:27;;44715:71;44783:1;44772:9;44768:17;44759:6;44715:71;:::i;:::-;44796:72;44864:2;44853:9;44849:18;44840:6;44796:72;:::i;:::-;44878:80;44954:2;44943:9;44939:18;44930:6;44878:80;:::i;:::-;44968;45044:2;45033:9;45029:18;45020:6;44968:80;:::i;:::-;45058:73;45126:3;45115:9;45111:19;45102:6;45058:73;:::i;:::-;45141;45209:3;45198:9;45194:19;45185:6;45141:73;:::i;:::-;44414:807;;;;;;;;;:::o;45227:663::-;45315:6;45323;45331;45380:2;45368:9;45359:7;45355:23;45351:32;45348:119;;;45386:79;;:::i;:::-;45348:119;45506:1;45531:64;45587:7;45578:6;45567:9;45563:22;45531:64;:::i;:::-;45521:74;;45477:128;45644:2;45670:64;45726:7;45717:6;45706:9;45702:22;45670:64;:::i;:::-;45660:74;;45615:129;45783:2;45809:64;45865:7;45856:6;45845:9;45841:22;45809:64;:::i;:::-;45799:74;;45754:129;45227:663;;;;;:::o;45896:220::-;46036:34;46032:1;46024:6;46020:14;46013:58;46105:3;46100:2;46092:6;46088:15;46081:28;45896:220;:::o;46122:366::-;46264:3;46285:67;46349:2;46344:3;46285:67;:::i;:::-;46278:74;;46361:93;46450:3;46361:93;:::i;:::-;46479:2;46474:3;46470:12;46463:19;;46122:366;;;:::o;46494:419::-;46660:4;46698:2;46687:9;46683:18;46675:26;;46747:9;46741:4;46737:20;46733:1;46722:9;46718:17;46711:47;46775:131;46901:4;46775:131;:::i;:::-;46767:139;;46494:419;;;:::o;46919:221::-;47059:34;47055:1;47047:6;47043:14;47036:58;47128:4;47123:2;47115:6;47111:15;47104:29;46919:221;:::o;47146:366::-;47288:3;47309:67;47373:2;47368:3;47309:67;:::i;:::-;47302:74;;47385:93;47474:3;47385:93;:::i;:::-;47503:2;47498:3;47494:12;47487:19;;47146:366;;;:::o;47518:419::-;47684:4;47722:2;47711:9;47707:18;47699:26;;47771:9;47765:4;47761:20;47757:1;47746:9;47742:17;47735:47;47799:131;47925:4;47799:131;:::i;:::-;47791:139;;47518:419;;;:::o

Swarm Source

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