ETH Price: $2,526.51 (+0.31%)

Token

DeFi Bomb (DBOMB)
 

Overview

Max Total Supply

99,045,438.051071800544818398 DBOMB

Holders

99

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000121768 DBOMB

Value
$0.00
0xb9EFF56DdF88EF7ADf6FD71DccfeDb072e8f152c
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:
DeFiBomb

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

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

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

    /**
     * @dev 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 {}
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File: dbomb.sol


pragma solidity 0.8.13;





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

interface IPair{
    function token0() external view returns (address);
    function token1() external view returns (address);
    function sync() external;
}

interface IRouter {
    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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountATokenDesired,
        uint amountBTokenDesired,
        uint amountATokenMin,
        uint amountBTokenMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

contract DeFiBomb is ERC20, Ownable{
    using Address for address payable;

    mapping(address => bool) public exemptFee;

    IRouter public router;
    address public pair;

    address public lpRecipient;
    address public marketingWallet;
    address public defiBombWallet;
    address public disperseWallet;

    bool private swapping;
    bool public swapEnabled;
    uint256 public swapThreshold;
    uint256 public maxWalletAmount;

    uint256 public transferFee;
    uint256 public burnFee;

    struct Fees {
        uint256 lp;
        uint256 marketing;
        uint256 defiBomb;
    }

    Fees public buyFees = Fees(20,30,40);
    Fees public sellFees = Fees(20,30,40);
    uint256 public totalSellFee = 90;
    uint256 public totalBuyFee = 90;

    bool public enableTransfers;

    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }

    event Disperse(address from, address to, uint256 amount);
    event TaxRecipientsUpdated(address newLpRecipient, address newMarketingWallet, address newDefiBombWallet);
    event FeesUpdated(string feeType, uint256 newFee);
    event SwapEnabled(bool state);
    event SwapThresholdUpdated(uint256 amount);
    event MaxWalletAmountUpdated(uint256 amount);
    event RouterUpdated(address newRouter);
    event ExemptFromFeeUpdated(address user, bool state);
    event PairUpdated(address newPair);

    constructor(address _routerAddress) ERC20("DeFi Bomb", "DBOMB") {
        require(_routerAddress != address(0), "Router address cannot be zero address");
        IRouter _router = IRouter(_routerAddress);

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

        router = _router;
        pair = _pair;

        swapEnabled = true;
        swapThreshold = 50_000 * 10**18;
        maxWalletAmount = 1_000_000 * 10**18;

        exemptFee[msg.sender] = true;
        exemptFee[address(this)] = true;
        exemptFee[address(0)] = true;

        _mint(msg.sender, 100_000_000 * 10**18);
    }

    function setTaxRecipients(address _lpRecipient, address _marketingWallet, address _defiBombWallet) external onlyOwner{
        require(_lpRecipient != address(0), "lpRecipient cannot be the zero address");
        require(_marketingWallet != address(0), "marketingWallet cannot be the zero address");
        require(_defiBombWallet != address(0), "defiBombWallet cannot be the zero address");
        lpRecipient = _lpRecipient;
        marketingWallet = _marketingWallet;
        defiBombWallet = _defiBombWallet;

        exemptFee[defiBombWallet] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[lpRecipient] = true;

        emit TaxRecipientsUpdated(_lpRecipient, _marketingWallet, _defiBombWallet);
    }

    function setTransferFee(uint256 _transferFee) external onlyOwner{
        require(_transferFee < 100, "Transfer fee must be less than 10");
        transferFee = _transferFee;
        emit FeesUpdated("transfer fee", _transferFee);
    }

    function setBurnFee(uint256 _burnFee) external onlyOwner{
        require(_burnFee < 60, "Burn fee must be less than 6");
        burnFee = _burnFee;
        emit FeesUpdated("burn fee", _burnFee);
    }

    function setBuyFees(uint256 _lp, uint256 _marketing, uint256 _defiBomb) external onlyOwner{
        require(_lp + _marketing + _defiBomb < 100, "Buy fee must be less than 10");
        buyFees = Fees(_lp, _marketing, _defiBomb);
        totalBuyFee = _lp + _marketing + _defiBomb;
        emit FeesUpdated("buy fee", totalBuyFee);
    }

    function setSellFees(uint256 _lp, uint256 _marketing, uint256 _defiBomb) external onlyOwner{
        require(_lp + _marketing + _defiBomb < 100, "Sell fee must be less than 10");
        sellFees = Fees(_lp, _marketing, _defiBomb);
        totalSellFee = _lp + _marketing + _defiBomb;
        emit FeesUpdated("sell fee", totalSellFee);
    }

    function setSwapEnabled(bool state) external onlyOwner{
        swapEnabled = state;
        emit SwapEnabled(state);
    }

    function setSwapThreshold(uint256 amount) external onlyOwner{
        swapThreshold = amount * 10**18;
        emit SwapThresholdUpdated(amount);
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner{
        require(amount >= 1_000_000, "Max wallet amount must be >= 1,000,000");
        maxWalletAmount = amount * 10**18;
        emit MaxWalletAmountUpdated(amount);
    }

    function setRouter(address newRouter) external onlyOwner{
        router = IRouter(newRouter);
        emit RouterUpdated(newRouter);
    }

    function setPair(address newPair) external onlyOwner{
        require(newPair != address(0), "Pair cannot be zero address");
        pair = newPair;
        emit PairUpdated(newPair);
    }

    function exemptFromFee(address user, bool state) external onlyOwner{
        require(exemptFee[user] != state, "State already set");
        exemptFee[user] = state;
        emit ExemptFromFeeUpdated(user, state);
    }

    function rescueETH() external onlyOwner{
        require(address(this).balance > 0, "Insufficient ETH balance");
        payable(owner()).sendValue(address(this).balance);
    }

    function rescueERC20(address tokenAdd, uint256 amount) external onlyOwner{
        require(tokenAdd != address(this), "Cannot rescue self");
        require(IERC20(tokenAdd).balanceOf(address(this)) >= amount, "Insufficient ERC20 balance");
        IERC20(tokenAdd).transfer(owner(), amount);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!exemptFee[from] && !exemptFee[to]) {
            require(enableTransfers, "Transactions are not enable");
            if(to != pair) require(balanceOf(to) + amount <= maxWalletAmount, "Receiver balance is exceeding maxWalletAmount");
        }

        if(to == disperseWallet) {
            emit Disperse(from, to, amount);
        }

        uint256 taxAmt;
        uint256 burnAmt;

        if(!swapping && !exemptFee[from] && !exemptFee[to]){
            if(to == pair){
                taxAmt = amount * totalSellFee / 1000;
                burnAmt = amount * burnFee / 1000;
            } else if(from == pair){
                taxAmt = amount * totalBuyFee / 1000;
                burnAmt = amount * burnFee / 1000;
            } else {
                taxAmt = amount * transferFee / 1000;
                burnAmt = amount * burnFee / 1000;
            }
        }

        if (!swapping && swapEnabled && to == pair && totalSellFee > 0) {
            handle_fees();
        }

        super._transfer(from, to, amount - taxAmt - burnAmt);
        if(taxAmt > 0) {
            super._transfer(from, address(this), taxAmt);
        }
        if(burnAmt > 0) {
            super._burn(from, burnAmt);
        }
    }

    function handle_fees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {
            if(swapThreshold > 1){
                contractBalance = swapThreshold;
            }
            // Split the contract balance into halves
            uint256 denominator = totalSellFee * 2;
            uint256 tokensToAddLiquidityWith = contractBalance * sellFees.lp / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance= deltaBalance / (denominator - sellFees.lp);
            uint256 ethToAddLiquidityWith = unitBalance * sellFees.lp;

            if(ethToAddLiquidityWith > 0){
                // Add liquidity to pancake
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * sellFees.marketing;
            if(marketingAmt > 0){
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 defiBombAmt = unitBalance * 2 * sellFees.defiBomb;
            if(defiBombAmt > 0){
                payable(defiBombWallet).sendValue(defiBombAmt);
            }
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> ETH
        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, 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
            lpRecipient,
            block.timestamp
        );
    }

    function setEnableTransfers() external onlyOwner {
        enableTransfers = true;
    }

    function setDisperseWallet(address _disperseWallet) external onlyOwner {
        disperseWallet = _disperseWallet;
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Disperse","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"ExemptFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"feeType","type":"string"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPair","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newLpRecipient","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":false,"internalType":"address","name":"newDefiBombWallet","type":"address"}],"name":"TaxRecipientsUpdated","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":"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"defiBomb","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defiBombWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disperseWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"exemptFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"lp","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"defiBomb","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_defiBomb","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_disperseWallet","type":"address"}],"name":"setDisperseWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnableTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_defiBomb","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpRecipient","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_defiBombWallet","type":"address"}],"name":"setTaxRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]

6080604052604051806060016040528060148152602001601e8152602001602881525060116000820151816000015560208201518160010155604082015181600201555050604051806060016040528060148152602001601e8152602001602881525060146000820151816000015560208201518160010155604082015181600201555050605a601755605a6018553480156200009b57600080fd5b50604051620058d5380380620058d58339818101604052810190620000c19190620008b8565b6040518060400160405280600981526020017f4465466920426f6d6200000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f44424f4d420000000000000000000000000000000000000000000000000000008152508160039080519060200190620001459291906200079e565b5080600490805190602001906200015e9291906200079e565b50505062000181620001756200054e60201b60201c565b6200055660201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ea9062000971565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026c9190620008b8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa9190620008b8565b6040518363ffffffff1660e01b815260040162000319929190620009a4565b6020604051808303816000875af115801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f9190620008b8565b905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60156101000a81548160ff021916908315150217905550690a968163f0a57b400000600d8190555069d3c21bcecceda1000000600e819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000545336a52b7d2dcc80cd2e40000006200061c60201b60201c565b50505062000b6b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200068e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006859062000a21565b60405180910390fd5b620006a2600083836200079460201b60201c565b8060026000828254620006b6919062000a7c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200070d919062000a7c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000774919062000aea565b60405180910390a362000790600083836200079960201b60201c565b5050565b505050565b505050565b828054620007ac9062000b36565b90600052602060002090601f016020900481019282620007d057600085556200081c565b82601f10620007eb57805160ff19168380011785556200081c565b828001600101855582156200081c579182015b828111156200081b578251825591602001919060010190620007fe565b5b5090506200082b91906200082f565b5090565b5b808211156200084a57600081600090555060010162000830565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008808262000853565b9050919050565b620008928162000873565b81146200089e57600080fd5b50565b600081519050620008b28162000887565b92915050565b600060208284031215620008d157620008d06200084e565b5b6000620008e184828501620008a1565b91505092915050565b600082825260208201905092915050565b7f526f7574657220616464726573732063616e6e6f74206265207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062000959602583620008ea565b91506200096682620008fb565b604082019050919050565b600060208201905081810360008301526200098c816200094a565b9050919050565b6200099e8162000873565b82525050565b6000604082019050620009bb600083018562000993565b620009ca602083018462000993565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a09601f83620008ea565b915062000a1682620009d1565b602082019050919050565b6000602082019050818103600083015262000a3c81620009fa565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a898262000a43565b915062000a968362000a43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ace5762000acd62000a4d565b5b828201905092915050565b62000ae48162000a43565b82525050565b600060208201905062000b01600083018462000ad9565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b4f57607f821691505b60208210810362000b655762000b6462000b07565b5b50919050565b614d5a8062000b7b6000396000f3fe6080604052600436106102815760003560e01c80638da5cb5b1161014f578063af35c6c7116100c1578063e0f3ccf51161007a578063e0f3ccf51461097f578063e4748b9e146109ac578063f2fde38b146109d9578063f8866bae14610a02578063f887ea4014610a2d578063fce589d814610a5857610288565b8063af35c6c714610871578063c0d786551461089c578063c1bc0919146108c5578063c5d32bb2146108dc578063dd62ed3e14610919578063e01af92c1461095657610288565b80639d9241ec116101135780639d9241ec1461074b578063a457c2d714610776578063a8aa1b31146107b3578063a9059cbb146107de578063aa4bde281461081b578063acb2ad6f1461084657610288565b80638da5cb5b1461067a5780638e090333146106a55780638f02bb5b146106ce57806395d89b41146106f75780639d0014b11461072257610288565b806339509351116101f357806370a08231116101ac57806370a082311461057e578063715018a6146105bb57806375f0a874146105d25780638187f516146105fd5780638ca3c198146106265780638cd4426d1461065157610288565b8063395093511461046e578063452e68dd146104ab5780634bf2c7c9146104d65780634c85841d146104ff57806359b107b9146105285780636ddd17131461055357610288565b806318160ddd1161024557806318160ddd1461037257806320800a001461039d57806323b872dd146103b457806327a14fc2146103f1578063313ce5671461041a578063329584101461044557610288565b80630445b6671461028d57806306fdde03146102b8578063095ea7b3146102e35780630d075d9c146103205780630f683e901461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a83565b6040516102af919061315d565b60405180910390f35b3480156102c457600080fd5b506102cd610a89565b6040516102da9190613211565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132c2565b610b1b565b604051610317919061331d565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613338565b610b3e565b005b34801561035557600080fd5b50610370600480360381019061036b9190613338565b610c38565b005b34801561037e57600080fd5b50610387610d32565b604051610394919061315d565b60405180910390f35b3480156103a957600080fd5b506103b2610d3c565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061338b565b610db9565b6040516103e8919061331d565b60405180910390f35b3480156103fd57600080fd5b50610418600480360381019061041391906133de565b610de8565b005b34801561042657600080fd5b5061042f610e8a565b60405161043c9190613427565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613442565b610e93565b005b34801561047a57600080fd5b50610495600480360381019061049091906132c2565b611259565b6040516104a2919061331d565b60405180910390f35b3480156104b757600080fd5b506104c0611290565b6040516104cd91906134a4565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906133de565b6112b6565b005b34801561050b57600080fd5b50610526600480360381019061052191906134bf565b611342565b005b34801561053457600080fd5b5061053d61138e565b60405161054a919061315d565b60405180910390f35b34801561055f57600080fd5b50610568611394565b604051610575919061331d565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906134bf565b6113a7565b6040516105b2919061315d565b60405180910390f35b3480156105c757600080fd5b506105d06113ef565b005b3480156105de57600080fd5b506105e7611403565b6040516105f491906134a4565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f91906134bf565b611429565b005b34801561063257600080fd5b5061063b61151b565b60405161064891906134a4565b60405180910390f35b34801561065d57600080fd5b50610678600480360381019061067391906132c2565b611541565b005b34801561068657600080fd5b5061068f6116fd565b60405161069c91906134a4565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613518565b611727565b005b3480156106da57600080fd5b506106f560048036038101906106f091906133de565b611855565b005b34801561070357600080fd5b5061070c6118e1565b6040516107199190613211565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906133de565b611973565b005b34801561075757600080fd5b506107606119cf565b60405161076d919061315d565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906132c2565b6119d5565b6040516107aa919061331d565b60405180910390f35b3480156107bf57600080fd5b506107c8611a4c565b6040516107d591906134a4565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906132c2565b611a72565b604051610812919061331d565b60405180910390f35b34801561082757600080fd5b50610830611a95565b60405161083d919061315d565b60405180910390f35b34801561085257600080fd5b5061085b611a9b565b604051610868919061315d565b60405180910390f35b34801561087d57600080fd5b50610886611aa1565b604051610893919061331d565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906134bf565b611ab4565b005b3480156108d157600080fd5b506108da611b37565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906134bf565b611b5c565b604051610910919061331d565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190613558565b611b7c565b60405161094d919061315d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190613598565b611c03565b005b34801561098b57600080fd5b50610994611c5f565b6040516109a3939291906135c5565b60405180910390f35b3480156109b857600080fd5b506109c1611c77565b6040516109d0939291906135c5565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906134bf565b611c8f565b005b348015610a0e57600080fd5b50610a17611d12565b604051610a2491906134a4565b60405180910390f35b348015610a3957600080fd5b50610a42611d38565b604051610a4f919061365b565b60405180910390f35b348015610a6457600080fd5b50610a6d611d5e565b604051610a7a919061315d565b60405180910390f35b600d5481565b606060038054610a98906136a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac4906136a5565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b5050505050905090565b600080610b26611d64565b9050610b33818585611d6c565b600191505092915050565b610b46611f35565b6064818385610b559190613705565b610b5f9190613705565b10610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906137a7565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506011600082015181600001556020820151816001015560408201518160020155905050808284610bea9190613705565b610bf49190613705565b6018819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b601854604051610c2b9190613813565b60405180910390a1505050565b610c40611f35565b6064818385610c4f9190613705565b610c599190613705565b10610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c909061388d565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506014600082015181600001556020820151816001015560408201518160020155905050808284610ce49190613705565b610cee9190613705565b6017819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b601754604051610d2591906138f9565b60405180910390a1505050565b6000600254905090565b610d44611f35565b60004711610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613973565b60405180910390fd5b610db747610d936116fd565b73ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b565b600080610dc4611d64565b9050610dd18582856120a7565b610ddc858585612133565b60019150509392505050565b610df0611f35565b620f4240811015610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613a05565b60405180910390fd5b670de0b6b3a764000081610e4a9190613a25565b600e819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e7f919061315d565b60405180910390a150565b60006012905090565b610e9b611f35565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613b83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90613c15565b60405180910390fd5b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbf13ed3f750e39a36873a4c7a0134665f2708e445334c5ffeeb38d03e37fb17e83838360405161124c93929190613c35565b60405180910390a1505050565b600080611264611d64565b90506112858185856112768589611b7c565b6112809190613705565b611d6c565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112be611f35565b603c8110611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613cb8565b60405180910390fd5b806010819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b816040516113379190613d24565b60405180910390a150565b61134a611f35565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f7611f35565b61140160006126c7565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611431611f35565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613d9e565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f8160405161151091906134a4565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611549611f35565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613e0a565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115f191906134a4565b602060405180830381865afa15801561160e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116329190613e3f565b1015611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613eb8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116976116fd565b836040518363ffffffff1660e01b81526004016116b5929190613ed8565b6020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613f16565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172f611f35565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613f8f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9817c07fa4cca31c109acf04d9dd7c6055b09f96b2927da7a8f9f447a0cf18d88282604051611849929190613faf565b60405180910390a15050565b61185d611f35565b606481106118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061404a565b60405180910390fd5b80600f819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b816040516118d691906140b6565b60405180910390a150565b6060600480546118f0906136a5565b80601f016020809104026020016040519081016040528092919081815260200182805461191c906136a5565b80156119695780601f1061193e57610100808354040283529160200191611969565b820191906000526020600020905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b61197b611f35565b670de0b6b3a76400008161198f9190613a25565b600d819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516119c4919061315d565b60405180910390a150565b60175481565b6000806119e0611d64565b905060006119ee8286611b7c565b905083811015611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90614156565b60405180910390fd5b611a408286868403611d6c565b60019250505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611a7d611d64565b9050611a8a818585612133565b600191505092915050565b600e5481565b600f5481565b601960009054906101000a900460ff1681565b611abc611f35565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8081604051611b2c91906134a4565b60405180910390a150565b611b3f611f35565b6001601960006101000a81548160ff021916908315150217905550565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c0b611f35565b80600c60156101000a81548160ff0219169083151502179055507fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c881604051611c54919061331d565b60405180910390a150565b60148060000154908060010154908060020154905083565b60118060000154908060010154908060020154905083565b611c97611f35565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906141e8565b60405180910390fd5b611d0f816126c7565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd29061427a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419061430c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f28919061315d565b60405180910390a3505050565b611f3d611d64565b73ffffffffffffffffffffffffffffffffffffffff16611f5b6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614378565b60405180910390fd5b565b80471015611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed906143e4565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161201c90614435565b60006040518083038185875af1925050503d8060008114612059576040519150601f19603f3d011682016040523d82523d6000602084013e61205e565b606091505b50509050806120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906144bc565b60405180910390fd5b505050565b60006120b38484611b7c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461212d578181101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614528565b60405180910390fd5b61212c8484848403611d6c565b5b50505050565b60008111612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d906145ba565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561221a5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231d57601960009054906101000a900460ff1661226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590614626565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461231c57600e54816122d0846113a7565b6122da9190613705565b111561231b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612312906146b8565b60405180910390fd5b5b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ae577f7f22ec900faa66d838603469b9ef3e0f80d19d9988eabd534d273cae25f75c908383836040516123a5939291906146d8565b60405180910390a15b600080600c60149054906101000a900460ff161580156124185750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561246e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d857600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612507576103e8601754846124d99190613a25565b6124e3919061473e565b91506103e8601054846124f69190613a25565b612500919061473e565b90506125d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361259b576103e86018548461256d9190613a25565b612577919061473e565b91506103e86010548461258a9190613a25565b612594919061473e565b90506125d6565b6103e8600f54846125ac9190613a25565b6125b6919061473e565b91506103e8601054846125c99190613a25565b6125d3919061473e565b90505b5b5b600c60149054906101000a900460ff161580156126015750600c60159054906101000a900460ff165b801561265a5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561266857506000601754115b156126765761267561278d565b5b6126978585838587612688919061476f565b612692919061476f565b6129a2565b60008211156126ac576126ab8530846129a2565b5b60008111156126c0576126bf8582612c21565b5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c60149054906101000a900460ff166129a0576001600c60146101000a81548160ff02191690831515021790555060006127c7306113a7565b9050600d548110612983576001600d5411156127e357600d5490505b600060026017546127f49190613a25565b90506000816014600001548461280a9190613a25565b612814919061473e565b905060008184612824919061476f565b9050600047905061283482612df7565b60008147612842919061476f565b9050600060146000015486612857919061476f565b82612862919061473e565b90506000601460000154826128779190613a25565b9050600081111561288d5761288c868261303a565b5b60006014600101546002846128a29190613a25565b6128ac9190613a25565b905060008111156129035761290281600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b5b60006014600201546002856129189190613a25565b6129229190613a25565b905060008111156129795761297881600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b5b5050505050505050505b506000600c60146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0890614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a77906148a7565b60405180910390fd5b612a8b83838361313a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614939565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba49190613705565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c08919061315d565b60405180910390a3612c1b84848461313f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906149cb565b60405180910390fd5b612c9c8260008361313a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990614a5d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d79919061476f565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dde919061315d565b60405180910390a3612df28360008461313f565b505050565b6000600267ffffffffffffffff811115612e1457612e13614a7d565b5b604051908082528060200260200182016040528015612e425781602001602082028036833780820191505090505b5090503081600081518110612e5a57612e59614aac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190614af0565b81600181518110612f3957612f38614aac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fa030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d6c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613004959493929190614c16565b600060405180830381600087803b15801561301e57600080fd5b505af1158015613032573d6000803e3d6000fd5b505050505050565b61306730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d6c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016130f096959493929190614c70565b60606040518083038185885af115801561310e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131339190614cd1565b5050505050565b505050565b505050565b6000819050919050565b61315781613144565b82525050565b6000602082019050613172600083018461314e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131b2578082015181840152602081019050613197565b838111156131c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006131e382613178565b6131ed8185613183565b93506131fd818560208601613194565b613206816131c7565b840191505092915050565b6000602082019050818103600083015261322b81846131d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061326382613238565b9050919050565b61327381613258565b811461327e57600080fd5b50565b6000813590506132908161326a565b92915050565b61329f81613144565b81146132aa57600080fd5b50565b6000813590506132bc81613296565b92915050565b600080604083850312156132d9576132d8613233565b5b60006132e785828601613281565b92505060206132f8858286016132ad565b9150509250929050565b60008115159050919050565b61331781613302565b82525050565b6000602082019050613332600083018461330e565b92915050565b60008060006060848603121561335157613350613233565b5b600061335f868287016132ad565b9350506020613370868287016132ad565b9250506040613381868287016132ad565b9150509250925092565b6000806000606084860312156133a4576133a3613233565b5b60006133b286828701613281565b93505060206133c386828701613281565b92505060406133d4868287016132ad565b9150509250925092565b6000602082840312156133f4576133f3613233565b5b6000613402848285016132ad565b91505092915050565b600060ff82169050919050565b6134218161340b565b82525050565b600060208201905061343c6000830184613418565b92915050565b60008060006060848603121561345b5761345a613233565b5b600061346986828701613281565b935050602061347a86828701613281565b925050604061348b86828701613281565b9150509250925092565b61349e81613258565b82525050565b60006020820190506134b96000830184613495565b92915050565b6000602082840312156134d5576134d4613233565b5b60006134e384828501613281565b91505092915050565b6134f581613302565b811461350057600080fd5b50565b600081359050613512816134ec565b92915050565b6000806040838503121561352f5761352e613233565b5b600061353d85828601613281565b925050602061354e85828601613503565b9150509250929050565b6000806040838503121561356f5761356e613233565b5b600061357d85828601613281565b925050602061358e85828601613281565b9150509250929050565b6000602082840312156135ae576135ad613233565b5b60006135bc84828501613503565b91505092915050565b60006060820190506135da600083018661314e565b6135e7602083018561314e565b6135f4604083018461314e565b949350505050565b6000819050919050565b600061362161361c61361784613238565b6135fc565b613238565b9050919050565b600061363382613606565b9050919050565b600061364582613628565b9050919050565b6136558161363a565b82525050565b6000602082019050613670600083018461364c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136bd57607f821691505b6020821081036136d0576136cf613676565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061371082613144565b915061371b83613144565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137505761374f6136d6565b5b828201905092915050565b7f42757920666565206d757374206265206c657373207468616e20313000000000600082015250565b6000613791601c83613183565b915061379c8261375b565b602082019050919050565b600060208201905081810360008301526137c081613784565b9050919050565b7f6275792066656500000000000000000000000000000000000000000000000000600082015250565b60006137fd600783613183565b9150613808826137c7565b602082019050919050565b6000604082019050818103600083015261382c816137f0565b905061383b602083018461314e565b92915050565b7f53656c6c20666565206d757374206265206c657373207468616e203130000000600082015250565b6000613877601d83613183565b915061388282613841565b602082019050919050565b600060208201905081810360008301526138a68161386a565b9050919050565b7f73656c6c20666565000000000000000000000000000000000000000000000000600082015250565b60006138e3600883613183565b91506138ee826138ad565b602082019050919050565b60006040820190508181036000830152613912816138d6565b9050613921602083018461314e565b92915050565b7f496e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b600061395d601883613183565b915061396882613927565b602082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4d61782077616c6c657420616d6f756e74206d757374206265203e3d20312c3060008201527f30302c3030300000000000000000000000000000000000000000000000000000602082015250565b60006139ef602683613183565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b6000613a3082613144565b9150613a3b83613144565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7457613a736136d6565b5b828202905092915050565b7f6c70526563697069656e742063616e6e6f7420626520746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613adb602683613183565b9150613ae682613a7f565b604082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f6d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b6d602a83613183565b9150613b7882613b11565b604082019050919050565b60006020820190508181036000830152613b9c81613b60565b9050919050565b7f64656669426f6d6257616c6c65742063616e6e6f7420626520746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b6000613bff602983613183565b9150613c0a82613ba3565b604082019050919050565b60006020820190508181036000830152613c2e81613bf2565b9050919050565b6000606082019050613c4a6000830186613495565b613c576020830185613495565b613c646040830184613495565b949350505050565b7f4275726e20666565206d757374206265206c657373207468616e203600000000600082015250565b6000613ca2601c83613183565b9150613cad82613c6c565b602082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f6275726e20666565000000000000000000000000000000000000000000000000600082015250565b6000613d0e600883613183565b9150613d1982613cd8565b602082019050919050565b60006040820190508181036000830152613d3d81613d01565b9050613d4c602083018461314e565b92915050565b7f506169722063616e6e6f74206265207a65726f20616464726573730000000000600082015250565b6000613d88601b83613183565b9150613d9382613d52565b602082019050919050565b60006020820190508181036000830152613db781613d7b565b9050919050565b7f43616e6e6f74207265736375652073656c660000000000000000000000000000600082015250565b6000613df4601283613183565b9150613dff82613dbe565b602082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b600081519050613e3981613296565b92915050565b600060208284031215613e5557613e54613233565b5b6000613e6384828501613e2a565b91505092915050565b7f496e73756666696369656e742045524332302062616c616e6365000000000000600082015250565b6000613ea2601a83613183565b9150613ead82613e6c565b602082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b6000604082019050613eed6000830185613495565b613efa602083018461314e565b9392505050565b600081519050613f10816134ec565b92915050565b600060208284031215613f2c57613f2b613233565b5b6000613f3a84828501613f01565b91505092915050565b7f537461746520616c726561647920736574000000000000000000000000000000600082015250565b6000613f79601183613183565b9150613f8482613f43565b602082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b6000604082019050613fc46000830185613495565b613fd1602083018461330e565b9392505050565b7f5472616e7366657220666565206d757374206265206c657373207468616e203160008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b6000614034602183613183565b915061403f82613fd8565b604082019050919050565b6000602082019050818103600083015261406381614027565b9050919050565b7f7472616e73666572206665650000000000000000000000000000000000000000600082015250565b60006140a0600c83613183565b91506140ab8261406a565b602082019050919050565b600060408201905081810360008301526140cf81614093565b90506140de602083018461314e565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614140602583613183565b915061414b826140e4565b604082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141d2602683613183565b91506141dd82614176565b604082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614264602483613183565b915061426f82614208565b604082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142f6602283613183565b91506143018261429a565b604082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614362602083613183565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006143ce601d83613183565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b600081905092915050565b50565b600061441f600083614404565b915061442a8261440f565b600082019050919050565b600061444082614412565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006144a6603a83613183565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614512601d83613183565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006145a4602983613183565b91506145af82614548565b604082019050919050565b600060208201905081810360008301526145d381614597565b9050919050565b7f5472616e73616374696f6e7320617265206e6f7420656e61626c650000000000600082015250565b6000614610601b83613183565b915061461b826145da565b602082019050919050565b6000602082019050818103600083015261463f81614603565b9050919050565b7f52656365697665722062616c616e636520697320657863656564696e67206d6160008201527f7857616c6c6574416d6f756e7400000000000000000000000000000000000000602082015250565b60006146a2602d83613183565b91506146ad82614646565b604082019050919050565b600060208201905081810360008301526146d181614695565b9050919050565b60006060820190506146ed6000830186613495565b6146fa6020830185613495565b614707604083018461314e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474982613144565b915061475483613144565b9250826147645761476361470f565b5b828204905092915050565b600061477a82613144565b915061478583613144565b925082821015614798576147976136d6565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147ff602583613183565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614891602383613183565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614923602683613183565b915061492e826148c7565b604082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b5602183613183565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a47602283613183565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614aea8161326a565b92915050565b600060208284031215614b0657614b05613233565b5b6000614b1484828501614adb565b91505092915050565b6000819050919050565b6000614b42614b3d614b3884614b1d565b6135fc565b613144565b9050919050565b614b5281614b27565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b8d81613258565b82525050565b6000614b9f8383614b84565b60208301905092915050565b6000602082019050919050565b6000614bc382614b58565b614bcd8185614b63565b9350614bd883614b74565b8060005b83811015614c09578151614bf08882614b93565b9750614bfb83614bab565b925050600181019050614bdc565b5085935050505092915050565b600060a082019050614c2b600083018861314e565b614c386020830187614b49565b8181036040830152614c4a8186614bb8565b9050614c596060830185613495565b614c66608083018461314e565b9695505050505050565b600060c082019050614c856000830189613495565b614c92602083018861314e565b614c9f6040830187614b49565b614cac6060830186614b49565b614cb96080830185613495565b614cc660a083018461314e565b979650505050505050565b600080600060608486031215614cea57614ce9613233565b5b6000614cf886828701613e2a565b9350506020614d0986828701613e2a565b9250506040614d1a86828701613e2a565b915050925092509256fea2646970667358221220ea9900e83cee813da86fd1d76bb9e9a3cc0cf082d40b0fd980bce4f7df71d0c364736f6c634300080d00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102815760003560e01c80638da5cb5b1161014f578063af35c6c7116100c1578063e0f3ccf51161007a578063e0f3ccf51461097f578063e4748b9e146109ac578063f2fde38b146109d9578063f8866bae14610a02578063f887ea4014610a2d578063fce589d814610a5857610288565b8063af35c6c714610871578063c0d786551461089c578063c1bc0919146108c5578063c5d32bb2146108dc578063dd62ed3e14610919578063e01af92c1461095657610288565b80639d9241ec116101135780639d9241ec1461074b578063a457c2d714610776578063a8aa1b31146107b3578063a9059cbb146107de578063aa4bde281461081b578063acb2ad6f1461084657610288565b80638da5cb5b1461067a5780638e090333146106a55780638f02bb5b146106ce57806395d89b41146106f75780639d0014b11461072257610288565b806339509351116101f357806370a08231116101ac57806370a082311461057e578063715018a6146105bb57806375f0a874146105d25780638187f516146105fd5780638ca3c198146106265780638cd4426d1461065157610288565b8063395093511461046e578063452e68dd146104ab5780634bf2c7c9146104d65780634c85841d146104ff57806359b107b9146105285780636ddd17131461055357610288565b806318160ddd1161024557806318160ddd1461037257806320800a001461039d57806323b872dd146103b457806327a14fc2146103f1578063313ce5671461041a578063329584101461044557610288565b80630445b6671461028d57806306fdde03146102b8578063095ea7b3146102e35780630d075d9c146103205780630f683e901461034957610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a83565b6040516102af919061315d565b60405180910390f35b3480156102c457600080fd5b506102cd610a89565b6040516102da9190613211565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906132c2565b610b1b565b604051610317919061331d565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613338565b610b3e565b005b34801561035557600080fd5b50610370600480360381019061036b9190613338565b610c38565b005b34801561037e57600080fd5b50610387610d32565b604051610394919061315d565b60405180910390f35b3480156103a957600080fd5b506103b2610d3c565b005b3480156103c057600080fd5b506103db60048036038101906103d6919061338b565b610db9565b6040516103e8919061331d565b60405180910390f35b3480156103fd57600080fd5b50610418600480360381019061041391906133de565b610de8565b005b34801561042657600080fd5b5061042f610e8a565b60405161043c9190613427565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613442565b610e93565b005b34801561047a57600080fd5b50610495600480360381019061049091906132c2565b611259565b6040516104a2919061331d565b60405180910390f35b3480156104b757600080fd5b506104c0611290565b6040516104cd91906134a4565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f891906133de565b6112b6565b005b34801561050b57600080fd5b50610526600480360381019061052191906134bf565b611342565b005b34801561053457600080fd5b5061053d61138e565b60405161054a919061315d565b60405180910390f35b34801561055f57600080fd5b50610568611394565b604051610575919061331d565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a091906134bf565b6113a7565b6040516105b2919061315d565b60405180910390f35b3480156105c757600080fd5b506105d06113ef565b005b3480156105de57600080fd5b506105e7611403565b6040516105f491906134a4565b60405180910390f35b34801561060957600080fd5b50610624600480360381019061061f91906134bf565b611429565b005b34801561063257600080fd5b5061063b61151b565b60405161064891906134a4565b60405180910390f35b34801561065d57600080fd5b50610678600480360381019061067391906132c2565b611541565b005b34801561068657600080fd5b5061068f6116fd565b60405161069c91906134a4565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190613518565b611727565b005b3480156106da57600080fd5b506106f560048036038101906106f091906133de565b611855565b005b34801561070357600080fd5b5061070c6118e1565b6040516107199190613211565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906133de565b611973565b005b34801561075757600080fd5b506107606119cf565b60405161076d919061315d565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906132c2565b6119d5565b6040516107aa919061331d565b60405180910390f35b3480156107bf57600080fd5b506107c8611a4c565b6040516107d591906134a4565b60405180910390f35b3480156107ea57600080fd5b50610805600480360381019061080091906132c2565b611a72565b604051610812919061331d565b60405180910390f35b34801561082757600080fd5b50610830611a95565b60405161083d919061315d565b60405180910390f35b34801561085257600080fd5b5061085b611a9b565b604051610868919061315d565b60405180910390f35b34801561087d57600080fd5b50610886611aa1565b604051610893919061331d565b60405180910390f35b3480156108a857600080fd5b506108c360048036038101906108be91906134bf565b611ab4565b005b3480156108d157600080fd5b506108da611b37565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906134bf565b611b5c565b604051610910919061331d565b60405180910390f35b34801561092557600080fd5b50610940600480360381019061093b9190613558565b611b7c565b60405161094d919061315d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190613598565b611c03565b005b34801561098b57600080fd5b50610994611c5f565b6040516109a3939291906135c5565b60405180910390f35b3480156109b857600080fd5b506109c1611c77565b6040516109d0939291906135c5565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb91906134bf565b611c8f565b005b348015610a0e57600080fd5b50610a17611d12565b604051610a2491906134a4565b60405180910390f35b348015610a3957600080fd5b50610a42611d38565b604051610a4f919061365b565b60405180910390f35b348015610a6457600080fd5b50610a6d611d5e565b604051610a7a919061315d565b60405180910390f35b600d5481565b606060038054610a98906136a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac4906136a5565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b5050505050905090565b600080610b26611d64565b9050610b33818585611d6c565b600191505092915050565b610b46611f35565b6064818385610b559190613705565b610b5f9190613705565b10610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906137a7565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506011600082015181600001556020820151816001015560408201518160020155905050808284610bea9190613705565b610bf49190613705565b6018819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b601854604051610c2b9190613813565b60405180910390a1505050565b610c40611f35565b6064818385610c4f9190613705565b610c599190613705565b10610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c909061388d565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506014600082015181600001556020820151816001015560408201518160020155905050808284610ce49190613705565b610cee9190613705565b6017819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b601754604051610d2591906138f9565b60405180910390a1505050565b6000600254905090565b610d44611f35565b60004711610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613973565b60405180910390fd5b610db747610d936116fd565b73ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b565b600080610dc4611d64565b9050610dd18582856120a7565b610ddc858585612133565b60019150509392505050565b610df0611f35565b620f4240811015610e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2d90613a05565b60405180910390fd5b670de0b6b3a764000081610e4a9190613a25565b600e819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00181604051610e7f919061315d565b60405180910390a150565b60006012905090565b610e9b611f35565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0190613af1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7090613b83565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90613c15565b60405180910390fd5b82600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fbf13ed3f750e39a36873a4c7a0134665f2708e445334c5ffeeb38d03e37fb17e83838360405161124c93929190613c35565b60405180910390a1505050565b600080611264611d64565b90506112858185856112768589611b7c565b6112809190613705565b611d6c565b600191505092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112be611f35565b603c8110611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890613cb8565b60405180910390fd5b806010819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b816040516113379190613d24565b60405180910390a150565b61134a611f35565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600c60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f7611f35565b61140160006126c7565b565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611431611f35565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790613d9e565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f8160405161151091906134a4565b60405180910390a150565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611549611f35565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90613e0a565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115f191906134a4565b602060405180830381865afa15801561160e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116329190613e3f565b1015611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90613eb8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116976116fd565b836040518363ffffffff1660e01b81526004016116b5929190613ed8565b6020604051808303816000875af11580156116d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f89190613f16565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172f611f35565b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036117c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b890613f8f565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9817c07fa4cca31c109acf04d9dd7c6055b09f96b2927da7a8f9f447a0cf18d88282604051611849929190613faf565b60405180910390a15050565b61185d611f35565b606481106118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061404a565b60405180910390fd5b80600f819055507fba37211ac74f2706b5a148d8d736e6522020d1a94bc21a0b2f3cc3b8980c889b816040516118d691906140b6565b60405180910390a150565b6060600480546118f0906136a5565b80601f016020809104026020016040519081016040528092919081815260200182805461191c906136a5565b80156119695780601f1061193e57610100808354040283529160200191611969565b820191906000526020600020905b81548152906001019060200180831161194c57829003601f168201915b5050505050905090565b61197b611f35565b670de0b6b3a76400008161198f9190613a25565b600d819055507f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd06476816040516119c4919061315d565b60405180910390a150565b60175481565b6000806119e0611d64565b905060006119ee8286611b7c565b905083811015611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90614156565b60405180910390fd5b611a408286868403611d6c565b60019250505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611a7d611d64565b9050611a8a818585612133565b600191505092915050565b600e5481565b600f5481565b601960009054906101000a900460ff1681565b611abc611f35565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc8081604051611b2c91906134a4565b60405180910390a150565b611b3f611f35565b6001601960006101000a81548160ff021916908315150217905550565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c0b611f35565b80600c60156101000a81548160ff0219169083151502179055507fb9bbb15e341600c8d067a0cadeba219905d5ba6d422b193c9c32265d26fc51c881604051611c54919061331d565b60405180910390a150565b60148060000154908060010154908060020154905083565b60118060000154908060010154908060020154905083565b611c97611f35565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd906141e8565b60405180910390fd5b611d0f816126c7565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd29061427a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419061430c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f28919061315d565b60405180910390a3505050565b611f3d611d64565b73ffffffffffffffffffffffffffffffffffffffff16611f5b6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614378565b60405180910390fd5b565b80471015611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed906143e4565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161201c90614435565b60006040518083038185875af1925050503d8060008114612059576040519150601f19603f3d011682016040523d82523d6000602084013e61205e565b606091505b50509050806120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906144bc565b60405180910390fd5b505050565b60006120b38484611b7c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461212d578181101561211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614528565b60405180910390fd5b61212c8484848403611d6c565b5b50505050565b60008111612176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216d906145ba565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561221a5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561231d57601960009054906101000a900460ff1661226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590614626565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461231c57600e54816122d0846113a7565b6122da9190613705565b111561231b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612312906146b8565b60405180910390fd5b5b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123ae577f7f22ec900faa66d838603469b9ef3e0f80d19d9988eabd534d273cae25f75c908383836040516123a5939291906146d8565b60405180910390a15b600080600c60149054906101000a900460ff161580156124185750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561246e5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125d857600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612507576103e8601754846124d99190613a25565b6124e3919061473e565b91506103e8601054846124f69190613a25565b612500919061473e565b90506125d7565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361259b576103e86018548461256d9190613a25565b612577919061473e565b91506103e86010548461258a9190613a25565b612594919061473e565b90506125d6565b6103e8600f54846125ac9190613a25565b6125b6919061473e565b91506103e8601054846125c99190613a25565b6125d3919061473e565b90505b5b5b600c60149054906101000a900460ff161580156126015750600c60159054906101000a900460ff165b801561265a5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561266857506000601754115b156126765761267561278d565b5b6126978585838587612688919061476f565b612692919061476f565b6129a2565b60008211156126ac576126ab8530846129a2565b5b60008111156126c0576126bf8582612c21565b5b5050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600c60149054906101000a900460ff166129a0576001600c60146101000a81548160ff02191690831515021790555060006127c7306113a7565b9050600d548110612983576001600d5411156127e357600d5490505b600060026017546127f49190613a25565b90506000816014600001548461280a9190613a25565b612814919061473e565b905060008184612824919061476f565b9050600047905061283482612df7565b60008147612842919061476f565b9050600060146000015486612857919061476f565b82612862919061473e565b90506000601460000154826128779190613a25565b9050600081111561288d5761288c868261303a565b5b60006014600101546002846128a29190613a25565b6128ac9190613a25565b905060008111156129035761290281600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b5b60006014600201546002856129189190613a25565b6129229190613a25565b905060008111156129795761297881600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611fb390919063ffffffff16565b5b5050505050505050505b506000600c60146101000a81548160ff0219169083151502179055505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0890614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a77906148a7565b60405180910390fd5b612a8b83838361313a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0890614939565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba49190613705565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c08919061315d565b60405180910390a3612c1b84848461313f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c87906149cb565b60405180910390fd5b612c9c8260008361313a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990614a5d565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612d79919061476f565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dde919061315d565b60405180910390a3612df28360008461313f565b505050565b6000600267ffffffffffffffff811115612e1457612e13614a7d565b5b604051908082528060200260200182016040528015612e425781602001602082028036833780820191505090505b5090503081600081518110612e5a57612e59614aac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f259190614af0565b81600181518110612f3957612f38614aac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612fa030600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d6c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613004959493929190614c16565b600060405180830381600087803b15801561301e57600080fd5b505af1158015613032573d6000803e3d6000fd5b505050505050565b61306730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d6c565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016130f096959493929190614c70565b60606040518083038185885af115801561310e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131339190614cd1565b5050505050565b505050565b505050565b6000819050919050565b61315781613144565b82525050565b6000602082019050613172600083018461314e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131b2578082015181840152602081019050613197565b838111156131c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006131e382613178565b6131ed8185613183565b93506131fd818560208601613194565b613206816131c7565b840191505092915050565b6000602082019050818103600083015261322b81846131d8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061326382613238565b9050919050565b61327381613258565b811461327e57600080fd5b50565b6000813590506132908161326a565b92915050565b61329f81613144565b81146132aa57600080fd5b50565b6000813590506132bc81613296565b92915050565b600080604083850312156132d9576132d8613233565b5b60006132e785828601613281565b92505060206132f8858286016132ad565b9150509250929050565b60008115159050919050565b61331781613302565b82525050565b6000602082019050613332600083018461330e565b92915050565b60008060006060848603121561335157613350613233565b5b600061335f868287016132ad565b9350506020613370868287016132ad565b9250506040613381868287016132ad565b9150509250925092565b6000806000606084860312156133a4576133a3613233565b5b60006133b286828701613281565b93505060206133c386828701613281565b92505060406133d4868287016132ad565b9150509250925092565b6000602082840312156133f4576133f3613233565b5b6000613402848285016132ad565b91505092915050565b600060ff82169050919050565b6134218161340b565b82525050565b600060208201905061343c6000830184613418565b92915050565b60008060006060848603121561345b5761345a613233565b5b600061346986828701613281565b935050602061347a86828701613281565b925050604061348b86828701613281565b9150509250925092565b61349e81613258565b82525050565b60006020820190506134b96000830184613495565b92915050565b6000602082840312156134d5576134d4613233565b5b60006134e384828501613281565b91505092915050565b6134f581613302565b811461350057600080fd5b50565b600081359050613512816134ec565b92915050565b6000806040838503121561352f5761352e613233565b5b600061353d85828601613281565b925050602061354e85828601613503565b9150509250929050565b6000806040838503121561356f5761356e613233565b5b600061357d85828601613281565b925050602061358e85828601613281565b9150509250929050565b6000602082840312156135ae576135ad613233565b5b60006135bc84828501613503565b91505092915050565b60006060820190506135da600083018661314e565b6135e7602083018561314e565b6135f4604083018461314e565b949350505050565b6000819050919050565b600061362161361c61361784613238565b6135fc565b613238565b9050919050565b600061363382613606565b9050919050565b600061364582613628565b9050919050565b6136558161363a565b82525050565b6000602082019050613670600083018461364c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136bd57607f821691505b6020821081036136d0576136cf613676565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061371082613144565b915061371b83613144565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137505761374f6136d6565b5b828201905092915050565b7f42757920666565206d757374206265206c657373207468616e20313000000000600082015250565b6000613791601c83613183565b915061379c8261375b565b602082019050919050565b600060208201905081810360008301526137c081613784565b9050919050565b7f6275792066656500000000000000000000000000000000000000000000000000600082015250565b60006137fd600783613183565b9150613808826137c7565b602082019050919050565b6000604082019050818103600083015261382c816137f0565b905061383b602083018461314e565b92915050565b7f53656c6c20666565206d757374206265206c657373207468616e203130000000600082015250565b6000613877601d83613183565b915061388282613841565b602082019050919050565b600060208201905081810360008301526138a68161386a565b9050919050565b7f73656c6c20666565000000000000000000000000000000000000000000000000600082015250565b60006138e3600883613183565b91506138ee826138ad565b602082019050919050565b60006040820190508181036000830152613912816138d6565b9050613921602083018461314e565b92915050565b7f496e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b600061395d601883613183565b915061396882613927565b602082019050919050565b6000602082019050818103600083015261398c81613950565b9050919050565b7f4d61782077616c6c657420616d6f756e74206d757374206265203e3d20312c3060008201527f30302c3030300000000000000000000000000000000000000000000000000000602082015250565b60006139ef602683613183565b91506139fa82613993565b604082019050919050565b60006020820190508181036000830152613a1e816139e2565b9050919050565b6000613a3082613144565b9150613a3b83613144565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7457613a736136d6565b5b828202905092915050565b7f6c70526563697069656e742063616e6e6f7420626520746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613adb602683613183565b9150613ae682613a7f565b604082019050919050565b60006020820190508181036000830152613b0a81613ace565b9050919050565b7f6d61726b6574696e6757616c6c65742063616e6e6f7420626520746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613b6d602a83613183565b9150613b7882613b11565b604082019050919050565b60006020820190508181036000830152613b9c81613b60565b9050919050565b7f64656669426f6d6257616c6c65742063616e6e6f7420626520746865207a657260008201527f6f20616464726573730000000000000000000000000000000000000000000000602082015250565b6000613bff602983613183565b9150613c0a82613ba3565b604082019050919050565b60006020820190508181036000830152613c2e81613bf2565b9050919050565b6000606082019050613c4a6000830186613495565b613c576020830185613495565b613c646040830184613495565b949350505050565b7f4275726e20666565206d757374206265206c657373207468616e203600000000600082015250565b6000613ca2601c83613183565b9150613cad82613c6c565b602082019050919050565b60006020820190508181036000830152613cd181613c95565b9050919050565b7f6275726e20666565000000000000000000000000000000000000000000000000600082015250565b6000613d0e600883613183565b9150613d1982613cd8565b602082019050919050565b60006040820190508181036000830152613d3d81613d01565b9050613d4c602083018461314e565b92915050565b7f506169722063616e6e6f74206265207a65726f20616464726573730000000000600082015250565b6000613d88601b83613183565b9150613d9382613d52565b602082019050919050565b60006020820190508181036000830152613db781613d7b565b9050919050565b7f43616e6e6f74207265736375652073656c660000000000000000000000000000600082015250565b6000613df4601283613183565b9150613dff82613dbe565b602082019050919050565b60006020820190508181036000830152613e2381613de7565b9050919050565b600081519050613e3981613296565b92915050565b600060208284031215613e5557613e54613233565b5b6000613e6384828501613e2a565b91505092915050565b7f496e73756666696369656e742045524332302062616c616e6365000000000000600082015250565b6000613ea2601a83613183565b9150613ead82613e6c565b602082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b6000604082019050613eed6000830185613495565b613efa602083018461314e565b9392505050565b600081519050613f10816134ec565b92915050565b600060208284031215613f2c57613f2b613233565b5b6000613f3a84828501613f01565b91505092915050565b7f537461746520616c726561647920736574000000000000000000000000000000600082015250565b6000613f79601183613183565b9150613f8482613f43565b602082019050919050565b60006020820190508181036000830152613fa881613f6c565b9050919050565b6000604082019050613fc46000830185613495565b613fd1602083018461330e565b9392505050565b7f5472616e7366657220666565206d757374206265206c657373207468616e203160008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b6000614034602183613183565b915061403f82613fd8565b604082019050919050565b6000602082019050818103600083015261406381614027565b9050919050565b7f7472616e73666572206665650000000000000000000000000000000000000000600082015250565b60006140a0600c83613183565b91506140ab8261406a565b602082019050919050565b600060408201905081810360008301526140cf81614093565b90506140de602083018461314e565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614140602583613183565b915061414b826140e4565b604082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141d2602683613183565b91506141dd82614176565b604082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614264602483613183565b915061426f82614208565b604082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006142f6602283613183565b91506143018261429a565b604082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614362602083613183565b915061436d8261432c565b602082019050919050565b6000602082019050818103600083015261439181614355565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006143ce601d83613183565b91506143d982614398565b602082019050919050565b600060208201905081810360008301526143fd816143c1565b9050919050565b600081905092915050565b50565b600061441f600083614404565b915061442a8261440f565b600082019050919050565b600061444082614412565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006144a6603a83613183565b91506144b18261444a565b604082019050919050565b600060208201905081810360008301526144d581614499565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614512601d83613183565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006145a4602983613183565b91506145af82614548565b604082019050919050565b600060208201905081810360008301526145d381614597565b9050919050565b7f5472616e73616374696f6e7320617265206e6f7420656e61626c650000000000600082015250565b6000614610601b83613183565b915061461b826145da565b602082019050919050565b6000602082019050818103600083015261463f81614603565b9050919050565b7f52656365697665722062616c616e636520697320657863656564696e67206d6160008201527f7857616c6c6574416d6f756e7400000000000000000000000000000000000000602082015250565b60006146a2602d83613183565b91506146ad82614646565b604082019050919050565b600060208201905081810360008301526146d181614695565b9050919050565b60006060820190506146ed6000830186613495565b6146fa6020830185613495565b614707604083018461314e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474982613144565b915061475483613144565b9250826147645761476361470f565b5b828204905092915050565b600061477a82613144565b915061478583613144565b925082821015614798576147976136d6565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147ff602583613183565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614891602383613183565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614923602683613183565b915061492e826148c7565b604082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b5602183613183565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a47602283613183565b9150614a52826149eb565b604082019050919050565b60006020820190508181036000830152614a7681614a3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614aea8161326a565b92915050565b600060208284031215614b0657614b05613233565b5b6000614b1484828501614adb565b91505092915050565b6000819050919050565b6000614b42614b3d614b3884614b1d565b6135fc565b613144565b9050919050565b614b5281614b27565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b8d81613258565b82525050565b6000614b9f8383614b84565b60208301905092915050565b6000602082019050919050565b6000614bc382614b58565b614bcd8185614b63565b9350614bd883614b74565b8060005b83811015614c09578151614bf08882614b93565b9750614bfb83614bab565b925050600181019050614bdc565b5085935050505092915050565b600060a082019050614c2b600083018861314e565b614c386020830187614b49565b8181036040830152614c4a8186614bb8565b9050614c596060830185613495565b614c66608083018461314e565b9695505050505050565b600060c082019050614c856000830189613495565b614c92602083018861314e565b614c9f6040830187614b49565b614cac6060830186614b49565b614cb96080830185613495565b614cc660a083018461314e565b979650505050505050565b600080600060608486031215614cea57614ce9613233565b5b6000614cf886828701613e2a565b9350506020614d0986828701613e2a565b9250506040614d1a86828701613e2a565b915050925092509256fea2646970667358221220ea9900e83cee813da86fd1d76bb9e9a3cc0cf082d40b0fd980bce4f7df71d0c364736f6c634300080d0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

30290:9847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30682:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15206:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17557:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33669:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34018:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16326:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35500:180;;;;;;;;;;;;;:::i;:::-;;18338:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34669:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16168:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32453:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19042:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30480:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33454:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39957:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31050:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30652:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16497:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27875:103;;;;;;;;;;;;;:::i;:::-;;30513:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35068:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30550:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35688:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27227:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35269:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33205:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34507:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31011:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19783:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30452:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16830:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30717:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30756:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31090:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34918:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39859:90;;;;;;;;;;;;;:::i;:::-;;30374:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17086:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34373:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30967:37;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30924:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;28133:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30586:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30424:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30789:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682:28;;;;:::o;15206:100::-;15260:13;15293:5;15286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15206:100;:::o;17557:201::-;17640:4;17657:13;17673:12;:10;:12::i;:::-;17657:28;;17696:32;17705:5;17712:7;17721:6;17696:8;:32::i;:::-;17746:4;17739:11;;;17557:201;;;;:::o;33669:341::-;27113:13;:11;:13::i;:::-;33809:3:::1;33797:9;33784:10;33778:3;:16;;;;:::i;:::-;:28;;;;:::i;:::-;:34;33770:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33866:32;;;;;;;;33871:3;33866:32;;;;33876:10;33866:32;;;;33888:9;33866:32;;::::0;33856:7:::1;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;33942:9;33929:10;33923:3;:16;;;;:::i;:::-;:28;;;;:::i;:::-;33909:11;:42;;;;33967:35;33990:11;;33967:35;;;;;;:::i;:::-;;;;;;;;33669:341:::0;;;:::o;34018:347::-;27113:13;:11;:13::i;:::-;34159:3:::1;34147:9;34134:10;34128:3;:16;;;;:::i;:::-;:28;;;;:::i;:::-;:34;34120:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34218:32;;;;;;;;34223:3;34218:32;;;;34228:10;34218:32;;;;34240:9;34218:32;;::::0;34207:8:::1;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;34295:9;34282:10;34276:3;:16;;;;:::i;:::-;:28;;;;:::i;:::-;34261:12;:43;;;;34320:37;34344:12;;34320:37;;;;;;:::i;:::-;;;;;;;;34018:347:::0;;;:::o;16326:108::-;16387:7;16414:12;;16407:19;;16326:108;:::o;35500:180::-;27113:13;:11;:13::i;:::-;35582:1:::1;35558:21;:25;35550:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35623:49;35650:21;35631:7;:5;:7::i;:::-;35623:26;;;;:49;;;;:::i;:::-;35500:180::o:0;18338:295::-;18469:4;18486:15;18504:12;:10;:12::i;:::-;18486:30;;18527:38;18543:4;18549:7;18558:6;18527:15;:38::i;:::-;18576:27;18586:4;18592:2;18596:6;18576:9;:27::i;:::-;18621:4;18614:11;;;18338:295;;;;;:::o;34669:241::-;27113:13;:11;:13::i;:::-;34760:9:::1;34750:6;:19;;34742:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34850:6;34841;:15;;;;:::i;:::-;34823;:33;;;;34872:30;34895:6;34872:30;;;;;;:::i;:::-;;;;;;;;34669:241:::0;:::o;16168:93::-;16226:5;16251:2;16244:9;;16168:93;:::o;32453:744::-;27113:13;:11;:13::i;:::-;32613:1:::1;32589:26;;:12;:26;;::::0;32581:77:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32705:1;32677:30;;:16;:30;;::::0;32669:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32800:1;32773:29;;:15;:29;;::::0;32765:83:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32873:12;32859:11;;:26;;;;;;;;;;;;;;;;;;32914:16;32896:15;;:34;;;;;;;;;;;;;;;;;;32958:15;32941:14;;:32;;;;;;;;;;;;;;;;;;33014:4;32986:9;:25;32996:14;;;;;;;;;;;32986:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;33058:4;33029:9;:26;33039:15;;;;;;;;;;;33029:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;33098:4;33073:9;:22;33083:11;;;;;;;;;;;33073:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33120:69;33141:12;33155:16;33173:15;33120:69;;;;;;;;:::i;:::-;;;;;;;;32453:744:::0;;;:::o;19042:238::-;19130:4;19147:13;19163:12;:10;:12::i;:::-;19147:28;;19186:64;19195:5;19202:7;19239:10;19211:25;19221:5;19228:7;19211:9;:25::i;:::-;:38;;;;:::i;:::-;19186:8;:64::i;:::-;19268:4;19261:11;;;19042:238;;;;:::o;30480:26::-;;;;;;;;;;;;;:::o;33454:207::-;27113:13;:11;:13::i;:::-;33540:2:::1;33529:8;:13;33521:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;33596:8;33586:7;:18;;;;33620:33;33644:8;33620:33;;;;;;:::i;:::-;;;;;;;;33454:207:::0;:::o;39957:122::-;27113:13;:11;:13::i;:::-;40056:15:::1;40039:14;;:32;;;;;;;;;;;;;;;;;;39957:122:::0;:::o;31050:31::-;;;;:::o;30652:23::-;;;;;;;;;;;;;:::o;16497:127::-;16571:7;16598:9;:18;16608:7;16598:18;;;;;;;;;;;;;;;;16591:25;;16497:127;;;:::o;27875:103::-;27113:13;:11;:13::i;:::-;27940:30:::1;27967:1;27940:18;:30::i;:::-;27875:103::o:0;30513:30::-;;;;;;;;;;;;;:::o;35068:193::-;27113:13;:11;:13::i;:::-;35158:1:::1;35139:21;;:7;:21;;::::0;35131:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35210:7;35203:4;;:14;;;;;;;;;;;;;;;;;;35233:20;35245:7;35233:20;;;;;;:::i;:::-;;;;;;;;35068:193:::0;:::o;30550:29::-;;;;;;;;;;;;;:::o;35688:302::-;27113:13;:11;:13::i;:::-;35800:4:::1;35780:25;;:8;:25;;::::0;35772:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35892:6;35854:8;35847:26;;;35882:4;35847:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;35839:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35947:8;35940:25;;;35966:7;:5;:7::i;:::-;35975:6;35940:42;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35688:302:::0;;:::o;27227:87::-;27273:7;27300:6;;;;;;;;;;;27293:13;;27227:87;:::o;35269:223::-;27113:13;:11;:13::i;:::-;35374:5:::1;35355:24;;:9;:15;35365:4;35355:15;;;;;;;;;;;;;;;;;;;;;;;;;:24;;::::0;35347:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35430:5;35412:9;:15;35422:4;35412:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35451:33;35472:4;35478:5;35451:33;;;;;;;:::i;:::-;;;;;;;;35269:223:::0;;:::o;33205:241::-;27113:13;:11;:13::i;:::-;33303:3:::1;33288:12;:18;33280:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33369:12;33355:11;:26;;;;33397:41;33425:12;33397:41;;;;;;:::i;:::-;;;;;;;;33205:241:::0;:::o;15425:104::-;15481:13;15514:7;15507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15425:104;:::o;34507:154::-;27113:13;:11;:13::i;:::-;34603:6:::1;34594;:15;;;;:::i;:::-;34578:13;:31;;;;34625:28;34646:6;34625:28;;;;;;:::i;:::-;;;;;;;;34507:154:::0;:::o;31011:32::-;;;;:::o;19783:436::-;19876:4;19893:13;19909:12;:10;:12::i;:::-;19893:28;;19932:24;19959:25;19969:5;19976:7;19959:9;:25::i;:::-;19932:52;;20023:15;20003:16;:35;;19995:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20116:60;20125:5;20132:7;20160:15;20141:16;:34;20116:8;:60::i;:::-;20207:4;20200:11;;;;19783:436;;;;:::o;30452:19::-;;;;;;;;;;;;;:::o;16830:193::-;16909:4;16926:13;16942:12;:10;:12::i;:::-;16926:28;;16965;16975:5;16982:2;16986:6;16965:9;:28::i;:::-;17011:4;17004:11;;;16830:193;;;;:::o;30717:30::-;;;;:::o;30756:26::-;;;;:::o;31090:27::-;;;;;;;;;;;;;:::o;34918:142::-;27113:13;:11;:13::i;:::-;35002:9:::1;34985:6;;:27;;;;;;;;;;;;;;;;;;35028:24;35042:9;35028:24;;;;;;:::i;:::-;;;;;;;;34918:142:::0;:::o;39859:90::-;27113:13;:11;:13::i;:::-;39937:4:::1;39919:15;;:22;;;;;;;;;;;;;;;;;;39859:90::o:0;30374:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;17086:151::-;17175:7;17202:11;:18;17214:5;17202:18;;;;;;;;;;;;;;;:27;17221:7;17202:27;;;;;;;;;;;;;;;;17195:34;;17086:151;;;;:::o;34373:126::-;27113:13;:11;:13::i;:::-;34452:5:::1;34438:11;;:19;;;;;;;;;;;;;;;;;;34473:18;34485:5;34473:18;;;;;;:::i;:::-;;;;;;;;34373:126:::0;:::o;30967:37::-;;;;;;;;;;;;;;;;;;;:::o;30924:36::-;;;;;;;;;;;;;;;;;;;:::o;28133:201::-;27113:13;:11;:13::i;:::-;28242:1:::1;28222:22;;:8;:22;;::::0;28214:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28298:28;28317:8;28298:18;:28::i;:::-;28133:201:::0;:::o;30586:29::-;;;;;;;;;;;;;:::o;30424:21::-;;;;;;;;;;;;;:::o;30789:22::-;;;;:::o;12846:98::-;12899:7;12926:10;12919:17;;12846:98;:::o;23408:380::-;23561:1;23544:19;;:5;:19;;;23536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23642:1;23623:21;;:7;:21;;;23615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23726:6;23696:11;:18;23708:5;23696:18;;;;;;;;;;;;;;;:27;23715:7;23696:27;;;;;;;;;;;;;;;:36;;;;23764:7;23748:32;;23757:5;23748:32;;;23773:6;23748:32;;;;;;:::i;:::-;;;;;;;;23408:380;;;:::o;27392:132::-;27467:12;:10;:12::i;:::-;27456:23;;:7;:5;:7::i;:::-;:23;;;27448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27392:132::o;2494:317::-;2609:6;2584:21;:31;;2576:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2663:12;2681:9;:14;;2703:6;2681:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2662:52;;;2733:7;2725:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2565:246;2494:317;;:::o;24079:453::-;24214:24;24241:25;24251:5;24258:7;24241:9;:25::i;:::-;24214:52;;24301:17;24281:16;:37;24277:248;;24363:6;24343:16;:26;;24335:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24447:51;24456:5;24463:7;24491:6;24472:16;:25;24447:8;:51::i;:::-;24277:248;24203:329;24079:453;;;:::o;35998:1429::-;36105:1;36096:6;:10;36088:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:9;:15;36179:4;36169:15;;;;;;;;;;;;;;;;;;;;;;;;;36168:16;:34;;;;;36189:9;:13;36199:2;36189:13;;;;;;;;;;;;;;;;;;;;;;;;;36188:14;36168:34;36165:250;;;36227:15;;;;;;;;;;;36219:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36298:4;;;;;;;;;;;36292:10;;:2;:10;;;36289:114;;36338:15;;36328:6;36312:13;36322:2;36312:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;36304:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;36289:114;36165:250;36436:14;;;;;;;;;;;36430:20;;:2;:20;;;36427:83;;36472:26;36481:4;36487:2;36491:6;36472:26;;;;;;;;:::i;:::-;;;;;;;;36427:83;36522:14;36547:15;36579:8;;;;;;;;;;;36578:9;:29;;;;;36592:9;:15;36602:4;36592:15;;;;;;;;;;;;;;;;;;;;;;;;;36591:16;36578:29;:47;;;;;36612:9;:13;36622:2;36612:13;;;;;;;;;;;;;;;;;;;;;;;;;36611:14;36578:47;36575:489;;;36650:4;;;;;;;;;;;36644:10;;:2;:10;;;36641:412;;36707:4;36692:12;;36683:6;:21;;;;:::i;:::-;:28;;;;:::i;:::-;36674:37;;36759:4;36749:7;;36740:6;:16;;;;:::i;:::-;:23;;;;:::i;:::-;36730:33;;36641:412;;;36796:4;;;;;;;;;;;36788:12;;:4;:12;;;36785:268;;36852:4;36838:11;;36829:6;:20;;;;:::i;:::-;:27;;;;:::i;:::-;36820:36;;36904:4;36894:7;;36885:6;:16;;;;:::i;:::-;:23;;;;:::i;:::-;36875:33;;36785:268;;;36981:4;36967:11;;36958:6;:20;;;;:::i;:::-;:27;;;;:::i;:::-;36949:36;;37033:4;37023:7;;37014:6;:16;;;;:::i;:::-;:23;;;;:::i;:::-;37004:33;;36785:268;36641:412;36575:489;37081:8;;;;;;;;;;;37080:9;:24;;;;;37093:11;;;;;;;;;;;37080:24;:38;;;;;37114:4;;;;;;;;;;;37108:10;;:2;:10;;;37080:38;:58;;;;;37137:1;37122:12;;:16;37080:58;37076:104;;;37155:13;:11;:13::i;:::-;37076:104;37192:52;37208:4;37214:2;37236:7;37227:6;37218;:15;;;;:::i;:::-;:25;;;;:::i;:::-;37192:15;:52::i;:::-;37267:1;37258:6;:10;37255:86;;;37285:44;37301:4;37315;37322:6;37285:15;:44::i;:::-;37255:86;37364:1;37354:7;:11;37351:69;;;37382:26;37394:4;37400:7;37382:11;:26::i;:::-;37351:69;36077:1350;;35998:1429;;;:::o;28494:191::-;28568:16;28587:6;;;;;;;;;;;28568:25;;28613:8;28604:6;;:17;;;;;;;;;;;;;;;;;;28668:8;28637:40;;28658:8;28637:40;;;;;;;;;;;;28557:128;28494:191;:::o;37435:1442::-;31160:8;;;;;;;;;;;31155:104;;31196:4;31185:8;;:15;;;;;;;;;;;;;;;;;;37484:23:::1;37510:24;37528:4;37510:9;:24::i;:::-;37484:50;;37568:13;;37549:15;:32;37545:1325;;37617:1;37601:13;;:17;37598:87;;;37656:13;;37638:31;;37598:87;37754:19;37791:1;37776:12;;:16;;;;:::i;:::-;37754:38;;37807:32;37874:11;37860:8;:11;;;37842:15;:29;;;;:::i;:::-;:43;;;;:::i;:::-;37807:78;;37900:14;37935:24;37917:15;:42;;;;:::i;:::-;37900:59;;37976:22;38001:21;37976:46;;38039:24;38056:6;38039:16;:24::i;:::-;38080:20;38127:14;38103:21;:38;;;;:::i;:::-;38080:61;;38156:19;38207:8;:11;;;38193;:25;;;;:::i;:::-;38177:12;:42;;;;:::i;:::-;38156:63;;38234:29;38280:8;:11;;;38266;:25;;;;:::i;:::-;38234:57;;38335:1;38311:21;:25;38308:170;;;38401:61;38414:24;38440:21;38401:12;:61::i;:::-;38308:170;38494:20;38535:8;:18;;;38531:1;38517:11;:15;;;;:::i;:::-;:36;;;;:::i;:::-;38494:59;;38586:1;38571:12;:16;38568:103;;;38607:48;38642:12;38615:15;;;;;;;;;;;38607:34;;;;:48;;;;:::i;:::-;38568:103;38687:19;38727:8;:17;;;38723:1;38709:11;:15;;;;:::i;:::-;:35;;;;:::i;:::-;38687:57;;38776:1;38762:11;:15;38759:100;;;38797:46;38831:11;38805:14;;;;;;;;;;;38797:33;;;;:46;;;;:::i;:::-;38759:100;37583:1287;;;;;;;;;37545:1325;37473:1404;31242:5:::0;31231:8;;:16;;;;;;;;;;;;;;;;;;31155:104;37435:1442::o;20689:671::-;20836:1;20820:18;;:4;:18;;;20812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20913:1;20899:16;;:2;:16;;;20891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20968:38;20989:4;20995:2;20999:6;20968:20;:38::i;:::-;21019:19;21041:9;:15;21051:4;21041:15;;;;;;;;;;;;;;;;21019:37;;21090:6;21075:11;:21;;21067:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21207:6;21193:11;:20;21175:9;:15;21185:4;21175:15;;;;;;;;;;;;;;;:38;;;;21252:6;21235:9;:13;21245:2;21235:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;21291:2;21276:26;;21285:4;21276:26;;;21295:6;21276:26;;;;;;:::i;:::-;;;;;;;;21315:37;21335:4;21341:2;21345:6;21315:19;:37::i;:::-;20801:559;20689:671;;;:::o;22379:591::-;22482:1;22463:21;;:7;:21;;;22455:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22535:49;22556:7;22573:1;22577:6;22535:20;:49::i;:::-;22597:22;22622:9;:18;22632:7;22622:18;;;;;;;;;;;;;;;;22597:43;;22677:6;22659:14;:24;;22651:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22796:6;22779:14;:23;22758:9;:18;22768:7;22758:18;;;;;;;;;;;;;;;:44;;;;22840:6;22824:12;;:22;;;;;;;:::i;:::-;;;;;;;;22890:1;22864:37;;22873:7;22864:37;;;22894:6;22864:37;;;;;;:::i;:::-;;;;;;;;22914:48;22934:7;22951:1;22955:6;22914:19;:48::i;:::-;22444:526;22379:591;;:::o;38885:459::-;39010:21;39048:1;39034:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39010:40;;39079:4;39061;39066:1;39061:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39105:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39095:4;39100:1;39095:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39131:53;39148:4;39163:6;;;;;;;;;;;39172:11;39131:8;:53::i;:::-;39223:6;;;;;;;;;;;:57;;;39281:11;39294:1;39297:4;39311;39318:15;39223:111;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38940:404;38885:459;:::o;39352:499::-;39500:53;39517:4;39532:6;;;;;;;;;;;39541:11;39500:8;:53::i;:::-;39596:6;;;;;;;;;;;:22;;;39626:9;39659:4;39679:11;39705:1;39748;39791:11;;;;;;;;;;;39817:15;39596:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39352:499;;:::o;25132:125::-;;;;:::o;25861:124::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:::-;4548:6;4556;4564;4613:2;4601:9;4592:7;4588:23;4584:32;4581:119;;;4619:79;;:::i;:::-;4581:119;4739:1;4764:53;4809:7;4800:6;4789:9;4785:22;4764:53;:::i;:::-;4754:63;;4710:117;4866:2;4892:53;4937:7;4928:6;4917:9;4913:22;4892:53;:::i;:::-;4882:63;;4837:118;4994:2;5020:53;5065:7;5056:6;5045:9;5041:22;5020:53;:::i;:::-;5010:63;;4965:118;4471:619;;;;;:::o;5096:329::-;5155:6;5204:2;5192:9;5183:7;5179:23;5175:32;5172:119;;;5210:79;;:::i;:::-;5172:119;5330:1;5355:53;5400:7;5391:6;5380:9;5376:22;5355:53;:::i;:::-;5345:63;;5301:117;5096:329;;;;:::o;5431:86::-;5466:7;5506:4;5499:5;5495:16;5484:27;;5431:86;;;:::o;5523:112::-;5606:22;5622:5;5606:22;:::i;:::-;5601:3;5594:35;5523:112;;:::o;5641:214::-;5730:4;5768:2;5757:9;5753:18;5745:26;;5781:67;5845:1;5834:9;5830:17;5821:6;5781:67;:::i;:::-;5641:214;;;;:::o;5861:619::-;5938:6;5946;5954;6003:2;5991:9;5982:7;5978:23;5974:32;5971:119;;;6009:79;;:::i;:::-;5971:119;6129:1;6154:53;6199:7;6190:6;6179:9;6175:22;6154:53;:::i;:::-;6144:63;;6100:117;6256:2;6282:53;6327:7;6318:6;6307:9;6303:22;6282:53;:::i;:::-;6272:63;;6227:118;6384:2;6410:53;6455:7;6446:6;6435:9;6431:22;6410:53;:::i;:::-;6400:63;;6355:118;5861:619;;;;;:::o;6486:118::-;6573:24;6591:5;6573:24;:::i;:::-;6568:3;6561:37;6486:118;;:::o;6610:222::-;6703:4;6741:2;6730:9;6726:18;6718:26;;6754:71;6822:1;6811:9;6807:17;6798:6;6754:71;:::i;:::-;6610:222;;;;:::o;6838:329::-;6897:6;6946:2;6934:9;6925:7;6921:23;6917:32;6914:119;;;6952:79;;:::i;:::-;6914:119;7072:1;7097:53;7142:7;7133:6;7122:9;7118:22;7097:53;:::i;:::-;7087:63;;7043:117;6838:329;;;;:::o;7173:116::-;7243:21;7258:5;7243:21;:::i;:::-;7236:5;7233:32;7223:60;;7279:1;7276;7269:12;7223:60;7173:116;:::o;7295:133::-;7338:5;7376:6;7363:20;7354:29;;7392:30;7416:5;7392:30;:::i;:::-;7295:133;;;;:::o;7434:468::-;7499:6;7507;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:53;7752:7;7743:6;7732:9;7728:22;7707:53;:::i;:::-;7697:63;;7653:117;7809:2;7835:50;7877:7;7868:6;7857:9;7853:22;7835:50;:::i;:::-;7825:60;;7780:115;7434:468;;;;;:::o;7908:474::-;7976:6;7984;8033:2;8021:9;8012:7;8008:23;8004:32;8001:119;;;8039:79;;:::i;:::-;8001:119;8159:1;8184:53;8229:7;8220:6;8209:9;8205:22;8184:53;:::i;:::-;8174:63;;8130:117;8286:2;8312:53;8357:7;8348:6;8337:9;8333:22;8312:53;:::i;:::-;8302:63;;8257:118;7908:474;;;;;:::o;8388:323::-;8444:6;8493:2;8481:9;8472:7;8468:23;8464:32;8461:119;;;8499:79;;:::i;:::-;8461:119;8619:1;8644:50;8686:7;8677:6;8666:9;8662:22;8644:50;:::i;:::-;8634:60;;8590:114;8388:323;;;;:::o;8717:442::-;8866:4;8904:2;8893:9;8889:18;8881:26;;8917:71;8985:1;8974:9;8970:17;8961:6;8917:71;:::i;:::-;8998:72;9066:2;9055:9;9051:18;9042:6;8998:72;:::i;:::-;9080;9148:2;9137:9;9133:18;9124:6;9080:72;:::i;:::-;8717:442;;;;;;:::o;9165:60::-;9193:3;9214:5;9207:12;;9165:60;;;:::o;9231:142::-;9281:9;9314:53;9332:34;9341:24;9359:5;9341:24;:::i;:::-;9332:34;:::i;:::-;9314:53;:::i;:::-;9301:66;;9231:142;;;:::o;9379:126::-;9429:9;9462:37;9493:5;9462:37;:::i;:::-;9449:50;;9379:126;;;:::o;9511:142::-;9577:9;9610:37;9641:5;9610:37;:::i;:::-;9597:50;;9511:142;;;:::o;9659:163::-;9762:53;9809:5;9762:53;:::i;:::-;9757:3;9750:66;9659:163;;:::o;9828:254::-;9937:4;9975:2;9964:9;9960:18;9952:26;;9988:87;10072:1;10061:9;10057:17;10048:6;9988:87;:::i;:::-;9828:254;;;;:::o;10088:180::-;10136:77;10133:1;10126:88;10233:4;10230:1;10223:15;10257:4;10254:1;10247:15;10274:320;10318:6;10355:1;10349:4;10345:12;10335:22;;10402:1;10396:4;10392:12;10423:18;10413:81;;10479:4;10471:6;10467:17;10457:27;;10413:81;10541:2;10533:6;10530:14;10510:18;10507:38;10504:84;;10560:18;;:::i;:::-;10504:84;10325:269;10274:320;;;:::o;10600:180::-;10648:77;10645:1;10638:88;10745:4;10742:1;10735:15;10769:4;10766:1;10759:15;10786:305;10826:3;10845:20;10863:1;10845:20;:::i;:::-;10840:25;;10879:20;10897:1;10879:20;:::i;:::-;10874:25;;11033:1;10965:66;10961:74;10958:1;10955:81;10952:107;;;11039:18;;:::i;:::-;10952:107;11083:1;11080;11076:9;11069:16;;10786:305;;;;:::o;11097:178::-;11237:30;11233:1;11225:6;11221:14;11214:54;11097:178;:::o;11281:366::-;11423:3;11444:67;11508:2;11503:3;11444:67;:::i;:::-;11437:74;;11520:93;11609:3;11520:93;:::i;:::-;11638:2;11633:3;11629:12;11622:19;;11281:366;;;:::o;11653:419::-;11819:4;11857:2;11846:9;11842:18;11834:26;;11906:9;11900:4;11896:20;11892:1;11881:9;11877:17;11870:47;11934:131;12060:4;11934:131;:::i;:::-;11926:139;;11653:419;;;:::o;12078:157::-;12218:9;12214:1;12206:6;12202:14;12195:33;12078:157;:::o;12241:365::-;12383:3;12404:66;12468:1;12463:3;12404:66;:::i;:::-;12397:73;;12479:93;12568:3;12479:93;:::i;:::-;12597:2;12592:3;12588:12;12581:19;;12241:365;;;:::o;12612:529::-;12806:4;12844:2;12833:9;12829:18;12821:26;;12893:9;12887:4;12883:20;12879:1;12868:9;12864:17;12857:47;12921:131;13047:4;12921:131;:::i;:::-;12913:139;;13062:72;13130:2;13119:9;13115:18;13106:6;13062:72;:::i;:::-;12612:529;;;;:::o;13147:179::-;13287:31;13283:1;13275:6;13271:14;13264:55;13147:179;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:158::-;14269:10;14265:1;14257:6;14253:14;14246:34;14129:158;:::o;14293:365::-;14435:3;14456:66;14520:1;14515:3;14456:66;:::i;:::-;14449:73;;14531:93;14620:3;14531:93;:::i;:::-;14649:2;14644:3;14640:12;14633:19;;14293:365;;;:::o;14664:529::-;14858:4;14896:2;14885:9;14881:18;14873:26;;14945:9;14939:4;14935:20;14931:1;14920:9;14916:17;14909:47;14973:131;15099:4;14973:131;:::i;:::-;14965:139;;15114:72;15182:2;15171:9;15167:18;15158:6;15114:72;:::i;:::-;14664:529;;;;:::o;15199:174::-;15339:26;15335:1;15327:6;15323:14;15316:50;15199:174;:::o;15379:366::-;15521:3;15542:67;15606:2;15601:3;15542:67;:::i;:::-;15535:74;;15618:93;15707:3;15618:93;:::i;:::-;15736:2;15731:3;15727:12;15720:19;;15379:366;;;:::o;15751:419::-;15917:4;15955:2;15944:9;15940:18;15932:26;;16004:9;15998:4;15994:20;15990:1;15979:9;15975:17;15968:47;16032:131;16158:4;16032:131;:::i;:::-;16024:139;;15751:419;;;:::o;16176:225::-;16316:34;16312:1;16304:6;16300:14;16293:58;16385:8;16380:2;16372:6;16368:15;16361:33;16176:225;:::o;16407:366::-;16549:3;16570:67;16634:2;16629:3;16570:67;:::i;:::-;16563:74;;16646:93;16735:3;16646:93;:::i;:::-;16764:2;16759:3;16755:12;16748:19;;16407:366;;;:::o;16779:419::-;16945:4;16983:2;16972:9;16968:18;16960:26;;17032:9;17026:4;17022:20;17018:1;17007:9;17003:17;16996:47;17060:131;17186:4;17060:131;:::i;:::-;17052:139;;16779:419;;;:::o;17204:348::-;17244:7;17267:20;17285:1;17267:20;:::i;:::-;17262:25;;17301:20;17319:1;17301:20;:::i;:::-;17296:25;;17489:1;17421:66;17417:74;17414:1;17411:81;17406:1;17399:9;17392:17;17388:105;17385:131;;;17496:18;;:::i;:::-;17385:131;17544:1;17541;17537:9;17526:20;;17204:348;;;;:::o;17558:225::-;17698:34;17694:1;17686:6;17682:14;17675:58;17767:8;17762:2;17754:6;17750:15;17743:33;17558:225;:::o;17789:366::-;17931:3;17952:67;18016:2;18011:3;17952:67;:::i;:::-;17945:74;;18028:93;18117:3;18028:93;:::i;:::-;18146:2;18141:3;18137:12;18130:19;;17789:366;;;:::o;18161:419::-;18327:4;18365:2;18354:9;18350:18;18342:26;;18414:9;18408:4;18404:20;18400:1;18389:9;18385:17;18378:47;18442:131;18568:4;18442:131;:::i;:::-;18434:139;;18161:419;;;:::o;18586:229::-;18726:34;18722:1;18714:6;18710:14;18703:58;18795:12;18790:2;18782:6;18778:15;18771:37;18586:229;:::o;18821:366::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:419::-;19359:4;19397:2;19386:9;19382:18;19374:26;;19446:9;19440:4;19436:20;19432:1;19421:9;19417:17;19410:47;19474:131;19600:4;19474:131;:::i;:::-;19466:139;;19193:419;;;:::o;19618:228::-;19758:34;19754:1;19746:6;19742:14;19735:58;19827:11;19822:2;19814:6;19810:15;19803:36;19618:228;:::o;19852:366::-;19994:3;20015:67;20079:2;20074:3;20015:67;:::i;:::-;20008:74;;20091:93;20180:3;20091:93;:::i;:::-;20209:2;20204:3;20200:12;20193:19;;19852:366;;;:::o;20224:419::-;20390:4;20428:2;20417:9;20413:18;20405:26;;20477:9;20471:4;20467:20;20463:1;20452:9;20448:17;20441:47;20505:131;20631:4;20505:131;:::i;:::-;20497:139;;20224:419;;;:::o;20649:442::-;20798:4;20836:2;20825:9;20821:18;20813:26;;20849:71;20917:1;20906:9;20902:17;20893:6;20849:71;:::i;:::-;20930:72;20998:2;20987:9;20983:18;20974:6;20930:72;:::i;:::-;21012;21080:2;21069:9;21065:18;21056:6;21012:72;:::i;:::-;20649:442;;;;;;:::o;21097:178::-;21237:30;21233:1;21225:6;21221:14;21214:54;21097:178;:::o;21281:366::-;21423:3;21444:67;21508:2;21503:3;21444:67;:::i;:::-;21437:74;;21520:93;21609:3;21520:93;:::i;:::-;21638:2;21633:3;21629:12;21622:19;;21281:366;;;:::o;21653:419::-;21819:4;21857:2;21846:9;21842:18;21834:26;;21906:9;21900:4;21896:20;21892:1;21881:9;21877:17;21870:47;21934:131;22060:4;21934:131;:::i;:::-;21926:139;;21653:419;;;:::o;22078:158::-;22218:10;22214:1;22206:6;22202:14;22195:34;22078:158;:::o;22242:365::-;22384:3;22405:66;22469:1;22464:3;22405:66;:::i;:::-;22398:73;;22480:93;22569:3;22480:93;:::i;:::-;22598:2;22593:3;22589:12;22582:19;;22242:365;;;:::o;22613:529::-;22807:4;22845:2;22834:9;22830:18;22822:26;;22894:9;22888:4;22884:20;22880:1;22869:9;22865:17;22858:47;22922:131;23048:4;22922:131;:::i;:::-;22914:139;;23063:72;23131:2;23120:9;23116:18;23107:6;23063:72;:::i;:::-;22613:529;;;;:::o;23148:177::-;23288:29;23284:1;23276:6;23272:14;23265:53;23148:177;:::o;23331:366::-;23473:3;23494:67;23558:2;23553:3;23494:67;:::i;:::-;23487:74;;23570:93;23659:3;23570:93;:::i;:::-;23688:2;23683:3;23679:12;23672:19;;23331:366;;;:::o;23703:419::-;23869:4;23907:2;23896:9;23892:18;23884:26;;23956:9;23950:4;23946:20;23942:1;23931:9;23927:17;23920:47;23984:131;24110:4;23984:131;:::i;:::-;23976:139;;23703:419;;;:::o;24128:168::-;24268:20;24264:1;24256:6;24252:14;24245:44;24128:168;:::o;24302:366::-;24444:3;24465:67;24529:2;24524:3;24465:67;:::i;:::-;24458:74;;24541:93;24630:3;24541:93;:::i;:::-;24659:2;24654:3;24650:12;24643:19;;24302:366;;;:::o;24674:419::-;24840:4;24878:2;24867:9;24863:18;24855:26;;24927:9;24921:4;24917:20;24913:1;24902:9;24898:17;24891:47;24955:131;25081:4;24955:131;:::i;:::-;24947:139;;24674:419;;;:::o;25099:143::-;25156:5;25187:6;25181:13;25172:22;;25203:33;25230:5;25203:33;:::i;:::-;25099:143;;;;:::o;25248:351::-;25318:6;25367:2;25355:9;25346:7;25342:23;25338:32;25335:119;;;25373:79;;:::i;:::-;25335:119;25493:1;25518:64;25574:7;25565:6;25554:9;25550:22;25518:64;:::i;:::-;25508:74;;25464:128;25248:351;;;;:::o;25605:176::-;25745:28;25741:1;25733:6;25729:14;25722:52;25605:176;:::o;25787:366::-;25929:3;25950:67;26014:2;26009:3;25950:67;:::i;:::-;25943:74;;26026:93;26115:3;26026:93;:::i;:::-;26144:2;26139:3;26135:12;26128:19;;25787:366;;;:::o;26159:419::-;26325:4;26363:2;26352:9;26348:18;26340:26;;26412:9;26406:4;26402:20;26398:1;26387:9;26383:17;26376:47;26440:131;26566:4;26440:131;:::i;:::-;26432:139;;26159:419;;;:::o;26584:332::-;26705:4;26743:2;26732:9;26728:18;26720:26;;26756:71;26824:1;26813:9;26809:17;26800:6;26756:71;:::i;:::-;26837:72;26905:2;26894:9;26890:18;26881:6;26837:72;:::i;:::-;26584:332;;;;;:::o;26922:137::-;26976:5;27007:6;27001:13;26992:22;;27023:30;27047:5;27023:30;:::i;:::-;26922:137;;;;:::o;27065:345::-;27132:6;27181:2;27169:9;27160:7;27156:23;27152:32;27149:119;;;27187:79;;:::i;:::-;27149:119;27307:1;27332:61;27385:7;27376:6;27365:9;27361:22;27332:61;:::i;:::-;27322:71;;27278:125;27065:345;;;;:::o;27416:167::-;27556:19;27552:1;27544:6;27540:14;27533:43;27416:167;:::o;27589:366::-;27731:3;27752:67;27816:2;27811:3;27752:67;:::i;:::-;27745:74;;27828:93;27917:3;27828:93;:::i;:::-;27946:2;27941:3;27937:12;27930:19;;27589:366;;;:::o;27961:419::-;28127:4;28165:2;28154:9;28150:18;28142:26;;28214:9;28208:4;28204:20;28200:1;28189:9;28185:17;28178:47;28242:131;28368:4;28242:131;:::i;:::-;28234:139;;27961:419;;;:::o;28386:320::-;28501:4;28539:2;28528:9;28524:18;28516:26;;28552:71;28620:1;28609:9;28605:17;28596:6;28552:71;:::i;:::-;28633:66;28695:2;28684:9;28680:18;28671:6;28633:66;:::i;:::-;28386:320;;;;;:::o;28712:220::-;28852:34;28848:1;28840:6;28836:14;28829:58;28921:3;28916:2;28908:6;28904:15;28897:28;28712:220;:::o;28938:366::-;29080:3;29101:67;29165:2;29160:3;29101:67;:::i;:::-;29094:74;;29177:93;29266:3;29177:93;:::i;:::-;29295:2;29290:3;29286:12;29279:19;;28938:366;;;:::o;29310:419::-;29476:4;29514:2;29503:9;29499:18;29491:26;;29563:9;29557:4;29553:20;29549:1;29538:9;29534:17;29527:47;29591:131;29717:4;29591:131;:::i;:::-;29583:139;;29310:419;;;:::o;29735:162::-;29875:14;29871:1;29863:6;29859:14;29852:38;29735:162;:::o;29903:366::-;30045:3;30066:67;30130:2;30125:3;30066:67;:::i;:::-;30059:74;;30142:93;30231:3;30142:93;:::i;:::-;30260:2;30255:3;30251:12;30244:19;;29903:366;;;:::o;30275:529::-;30469:4;30507:2;30496:9;30492:18;30484:26;;30556:9;30550:4;30546:20;30542:1;30531:9;30527:17;30520:47;30584:131;30710:4;30584:131;:::i;:::-;30576:139;;30725:72;30793:2;30782:9;30778:18;30769:6;30725:72;:::i;:::-;30275:529;;;;:::o;30810:224::-;30950:34;30946:1;30938:6;30934:14;30927:58;31019:7;31014:2;31006:6;31002:15;30995:32;30810:224;:::o;31040:366::-;31182:3;31203:67;31267:2;31262:3;31203:67;:::i;:::-;31196:74;;31279:93;31368:3;31279:93;:::i;:::-;31397:2;31392:3;31388:12;31381:19;;31040:366;;;:::o;31412:419::-;31578:4;31616:2;31605:9;31601:18;31593:26;;31665:9;31659:4;31655:20;31651:1;31640:9;31636:17;31629:47;31693:131;31819:4;31693:131;:::i;:::-;31685:139;;31412:419;;;:::o;31837:225::-;31977:34;31973:1;31965:6;31961:14;31954:58;32046:8;32041:2;32033:6;32029:15;32022:33;31837:225;:::o;32068:366::-;32210:3;32231:67;32295:2;32290:3;32231:67;:::i;:::-;32224:74;;32307:93;32396:3;32307:93;:::i;:::-;32425:2;32420:3;32416:12;32409:19;;32068:366;;;:::o;32440:419::-;32606:4;32644:2;32633:9;32629:18;32621:26;;32693:9;32687:4;32683:20;32679:1;32668:9;32664:17;32657:47;32721:131;32847:4;32721:131;:::i;:::-;32713:139;;32440:419;;;:::o;32865:223::-;33005:34;33001:1;32993:6;32989:14;32982:58;33074:6;33069:2;33061:6;33057:15;33050:31;32865:223;:::o;33094:366::-;33236:3;33257:67;33321:2;33316:3;33257:67;:::i;:::-;33250:74;;33333:93;33422:3;33333:93;:::i;:::-;33451:2;33446:3;33442:12;33435:19;;33094:366;;;:::o;33466:419::-;33632:4;33670:2;33659:9;33655:18;33647:26;;33719:9;33713:4;33709:20;33705:1;33694:9;33690:17;33683:47;33747:131;33873:4;33747:131;:::i;:::-;33739:139;;33466:419;;;:::o;33891:221::-;34031:34;34027:1;34019:6;34015:14;34008:58;34100:4;34095:2;34087:6;34083:15;34076:29;33891:221;:::o;34118:366::-;34260:3;34281:67;34345:2;34340:3;34281:67;:::i;:::-;34274:74;;34357:93;34446:3;34357:93;:::i;:::-;34475:2;34470:3;34466:12;34459:19;;34118:366;;;:::o;34490:419::-;34656:4;34694:2;34683:9;34679:18;34671:26;;34743:9;34737:4;34733:20;34729:1;34718:9;34714:17;34707:47;34771:131;34897:4;34771:131;:::i;:::-;34763:139;;34490:419;;;:::o;34915:182::-;35055:34;35051:1;35043:6;35039:14;35032:58;34915:182;:::o;35103:366::-;35245:3;35266:67;35330:2;35325:3;35266:67;:::i;:::-;35259:74;;35342:93;35431:3;35342:93;:::i;:::-;35460:2;35455:3;35451:12;35444:19;;35103:366;;;:::o;35475:419::-;35641:4;35679:2;35668:9;35664:18;35656:26;;35728:9;35722:4;35718:20;35714:1;35703:9;35699:17;35692:47;35756:131;35882:4;35756:131;:::i;:::-;35748:139;;35475:419;;;:::o;35900:179::-;36040:31;36036:1;36028:6;36024:14;36017:55;35900:179;:::o;36085:366::-;36227:3;36248:67;36312:2;36307:3;36248:67;:::i;:::-;36241:74;;36324:93;36413:3;36324:93;:::i;:::-;36442:2;36437:3;36433:12;36426:19;;36085:366;;;:::o;36457:419::-;36623:4;36661:2;36650:9;36646:18;36638:26;;36710:9;36704:4;36700:20;36696:1;36685:9;36681:17;36674:47;36738:131;36864:4;36738:131;:::i;:::-;36730:139;;36457:419;;;:::o;36882:147::-;36983:11;37020:3;37005:18;;36882:147;;;;:::o;37035:114::-;;:::o;37155:398::-;37314:3;37335:83;37416:1;37411:3;37335:83;:::i;:::-;37328:90;;37427:93;37516:3;37427:93;:::i;:::-;37545:1;37540:3;37536:11;37529:18;;37155:398;;;:::o;37559:379::-;37743:3;37765:147;37908:3;37765:147;:::i;:::-;37758:154;;37929:3;37922:10;;37559:379;;;:::o;37944:245::-;38084:34;38080:1;38072:6;38068:14;38061:58;38153:28;38148:2;38140:6;38136:15;38129:53;37944:245;:::o;38195:366::-;38337:3;38358:67;38422:2;38417:3;38358:67;:::i;:::-;38351:74;;38434:93;38523:3;38434:93;:::i;:::-;38552:2;38547:3;38543:12;38536:19;;38195:366;;;:::o;38567:419::-;38733:4;38771:2;38760:9;38756:18;38748:26;;38820:9;38814:4;38810:20;38806:1;38795:9;38791:17;38784:47;38848:131;38974:4;38848:131;:::i;:::-;38840:139;;38567:419;;;:::o;38992:179::-;39132:31;39128:1;39120:6;39116:14;39109:55;38992:179;:::o;39177:366::-;39319:3;39340:67;39404:2;39399:3;39340:67;:::i;:::-;39333:74;;39416:93;39505:3;39416:93;:::i;:::-;39534:2;39529:3;39525:12;39518:19;;39177:366;;;:::o;39549:419::-;39715:4;39753:2;39742:9;39738:18;39730:26;;39802:9;39796:4;39792:20;39788:1;39777:9;39773:17;39766:47;39830:131;39956:4;39830:131;:::i;:::-;39822:139;;39549:419;;;:::o;39974:228::-;40114:34;40110:1;40102:6;40098:14;40091:58;40183:11;40178:2;40170:6;40166:15;40159:36;39974:228;:::o;40208:366::-;40350:3;40371:67;40435:2;40430:3;40371:67;:::i;:::-;40364:74;;40447:93;40536:3;40447:93;:::i;:::-;40565:2;40560:3;40556:12;40549:19;;40208:366;;;:::o;40580:419::-;40746:4;40784:2;40773:9;40769:18;40761:26;;40833:9;40827:4;40823:20;40819:1;40808:9;40804:17;40797:47;40861:131;40987:4;40861:131;:::i;:::-;40853:139;;40580:419;;;:::o;41005:177::-;41145:29;41141:1;41133:6;41129:14;41122:53;41005:177;:::o;41188:366::-;41330:3;41351:67;41415:2;41410:3;41351:67;:::i;:::-;41344:74;;41427:93;41516:3;41427:93;:::i;:::-;41545:2;41540:3;41536:12;41529:19;;41188:366;;;:::o;41560:419::-;41726:4;41764:2;41753:9;41749:18;41741:26;;41813:9;41807:4;41803:20;41799:1;41788:9;41784:17;41777:47;41841:131;41967:4;41841:131;:::i;:::-;41833:139;;41560:419;;;:::o;41985:232::-;42125:34;42121:1;42113:6;42109:14;42102:58;42194:15;42189:2;42181:6;42177:15;42170:40;41985:232;:::o;42223:366::-;42365:3;42386:67;42450:2;42445:3;42386:67;:::i;:::-;42379:74;;42462:93;42551:3;42462:93;:::i;:::-;42580:2;42575:3;42571:12;42564:19;;42223:366;;;:::o;42595:419::-;42761:4;42799:2;42788:9;42784:18;42776:26;;42848:9;42842:4;42838:20;42834:1;42823:9;42819:17;42812:47;42876:131;43002:4;42876:131;:::i;:::-;42868:139;;42595:419;;;:::o;43020:442::-;43169:4;43207:2;43196:9;43192:18;43184:26;;43220:71;43288:1;43277:9;43273:17;43264:6;43220:71;:::i;:::-;43301:72;43369:2;43358:9;43354:18;43345:6;43301:72;:::i;:::-;43383;43451:2;43440:9;43436:18;43427:6;43383:72;:::i;:::-;43020:442;;;;;;:::o;43468:180::-;43516:77;43513:1;43506:88;43613:4;43610:1;43603:15;43637:4;43634:1;43627:15;43654:185;43694:1;43711:20;43729:1;43711:20;:::i;:::-;43706:25;;43745:20;43763:1;43745:20;:::i;:::-;43740:25;;43784:1;43774:35;;43789:18;;:::i;:::-;43774:35;43831:1;43828;43824:9;43819:14;;43654:185;;;;:::o;43845:191::-;43885:4;43905:20;43923:1;43905:20;:::i;:::-;43900:25;;43939:20;43957:1;43939:20;:::i;:::-;43934:25;;43978:1;43975;43972:8;43969:34;;;43983:18;;:::i;:::-;43969:34;44028:1;44025;44021:9;44013:17;;43845:191;;;;:::o;44042:224::-;44182:34;44178:1;44170:6;44166:14;44159:58;44251:7;44246:2;44238:6;44234:15;44227:32;44042:224;:::o;44272:366::-;44414:3;44435:67;44499:2;44494:3;44435:67;:::i;:::-;44428:74;;44511:93;44600:3;44511:93;:::i;:::-;44629:2;44624:3;44620:12;44613:19;;44272:366;;;:::o;44644:419::-;44810:4;44848:2;44837:9;44833:18;44825:26;;44897:9;44891:4;44887:20;44883:1;44872:9;44868:17;44861:47;44925:131;45051:4;44925:131;:::i;:::-;44917:139;;44644:419;;;:::o;45069:222::-;45209:34;45205:1;45197:6;45193:14;45186:58;45278:5;45273:2;45265:6;45261:15;45254:30;45069:222;:::o;45297:366::-;45439:3;45460:67;45524:2;45519:3;45460:67;:::i;:::-;45453:74;;45536:93;45625:3;45536:93;:::i;:::-;45654:2;45649:3;45645:12;45638:19;;45297:366;;;:::o;45669:419::-;45835:4;45873:2;45862:9;45858:18;45850:26;;45922:9;45916:4;45912:20;45908:1;45897:9;45893:17;45886:47;45950:131;46076:4;45950:131;:::i;:::-;45942:139;;45669:419;;;:::o;46094:225::-;46234:34;46230:1;46222:6;46218:14;46211:58;46303:8;46298:2;46290:6;46286:15;46279:33;46094:225;:::o;46325:366::-;46467:3;46488:67;46552:2;46547:3;46488:67;:::i;:::-;46481:74;;46564:93;46653:3;46564:93;:::i;:::-;46682:2;46677:3;46673:12;46666:19;;46325:366;;;:::o;46697:419::-;46863:4;46901:2;46890:9;46886:18;46878:26;;46950:9;46944:4;46940:20;46936:1;46925:9;46921:17;46914:47;46978:131;47104:4;46978:131;:::i;:::-;46970:139;;46697:419;;;:::o;47122:220::-;47262:34;47258:1;47250:6;47246:14;47239:58;47331:3;47326:2;47318:6;47314:15;47307:28;47122:220;:::o;47348:366::-;47490:3;47511:67;47575:2;47570:3;47511:67;:::i;:::-;47504:74;;47587:93;47676:3;47587:93;:::i;:::-;47705:2;47700:3;47696:12;47689:19;;47348:366;;;:::o;47720:419::-;47886:4;47924:2;47913:9;47909:18;47901:26;;47973:9;47967:4;47963:20;47959:1;47948:9;47944:17;47937:47;48001:131;48127:4;48001:131;:::i;:::-;47993:139;;47720:419;;;:::o;48145:221::-;48285:34;48281:1;48273:6;48269:14;48262:58;48354:4;48349:2;48341:6;48337:15;48330:29;48145:221;:::o;48372:366::-;48514:3;48535:67;48599:2;48594:3;48535:67;:::i;:::-;48528:74;;48611:93;48700:3;48611:93;:::i;:::-;48729:2;48724:3;48720:12;48713:19;;48372:366;;;:::o;48744:419::-;48910:4;48948:2;48937:9;48933:18;48925:26;;48997:9;48991:4;48987:20;48983:1;48972:9;48968:17;48961:47;49025:131;49151:4;49025:131;:::i;:::-;49017:139;;48744:419;;;:::o;49169:180::-;49217:77;49214:1;49207:88;49314:4;49311:1;49304:15;49338:4;49335:1;49328:15;49355:180;49403:77;49400:1;49393:88;49500:4;49497:1;49490:15;49524:4;49521:1;49514:15;49541:143;49598:5;49629:6;49623:13;49614:22;;49645:33;49672:5;49645:33;:::i;:::-;49541:143;;;;:::o;49690:351::-;49760:6;49809:2;49797:9;49788:7;49784:23;49780:32;49777:119;;;49815:79;;:::i;:::-;49777:119;49935:1;49960:64;50016:7;50007:6;49996:9;49992:22;49960:64;:::i;:::-;49950:74;;49906:128;49690:351;;;;:::o;50047:85::-;50092:7;50121:5;50110:16;;50047:85;;;:::o;50138:158::-;50196:9;50229:61;50247:42;50256:32;50282:5;50256:32;:::i;:::-;50247:42;:::i;:::-;50229:61;:::i;:::-;50216:74;;50138:158;;;:::o;50302:147::-;50397:45;50436:5;50397:45;:::i;:::-;50392:3;50385:58;50302:147;;:::o;50455:114::-;50522:6;50556:5;50550:12;50540:22;;50455:114;;;:::o;50575:184::-;50674:11;50708:6;50703:3;50696:19;50748:4;50743:3;50739:14;50724:29;;50575:184;;;;:::o;50765:132::-;50832:4;50855:3;50847:11;;50885:4;50880:3;50876:14;50868:22;;50765:132;;;:::o;50903:108::-;50980:24;50998:5;50980:24;:::i;:::-;50975:3;50968:37;50903:108;;:::o;51017:179::-;51086:10;51107:46;51149:3;51141:6;51107:46;:::i;:::-;51185:4;51180:3;51176:14;51162:28;;51017:179;;;;:::o;51202:113::-;51272:4;51304;51299:3;51295:14;51287:22;;51202:113;;;:::o;51351:732::-;51470:3;51499:54;51547:5;51499:54;:::i;:::-;51569:86;51648:6;51643:3;51569:86;:::i;:::-;51562:93;;51679:56;51729:5;51679:56;:::i;:::-;51758:7;51789:1;51774:284;51799:6;51796:1;51793:13;51774:284;;;51875:6;51869:13;51902:63;51961:3;51946:13;51902:63;:::i;:::-;51895:70;;51988:60;52041:6;51988:60;:::i;:::-;51978:70;;51834:224;51821:1;51818;51814:9;51809:14;;51774:284;;;51778:14;52074:3;52067:10;;51475:608;;;51351:732;;;;:::o;52089:831::-;52352:4;52390:3;52379:9;52375:19;52367:27;;52404:71;52472:1;52461:9;52457:17;52448:6;52404:71;:::i;:::-;52485:80;52561:2;52550:9;52546:18;52537:6;52485:80;:::i;:::-;52612:9;52606:4;52602:20;52597:2;52586:9;52582:18;52575:48;52640:108;52743:4;52734:6;52640:108;:::i;:::-;52632:116;;52758:72;52826:2;52815:9;52811:18;52802:6;52758:72;:::i;:::-;52840:73;52908:3;52897:9;52893:19;52884:6;52840:73;:::i;:::-;52089:831;;;;;;;;:::o;52926:807::-;53175:4;53213:3;53202:9;53198:19;53190:27;;53227:71;53295:1;53284:9;53280:17;53271:6;53227:71;:::i;:::-;53308:72;53376:2;53365:9;53361:18;53352:6;53308:72;:::i;:::-;53390:80;53466:2;53455:9;53451:18;53442:6;53390:80;:::i;:::-;53480;53556:2;53545:9;53541:18;53532:6;53480:80;:::i;:::-;53570:73;53638:3;53627:9;53623:19;53614:6;53570:73;:::i;:::-;53653;53721:3;53710:9;53706:19;53697:6;53653:73;:::i;:::-;52926:807;;;;;;;;;:::o;53739:663::-;53827:6;53835;53843;53892:2;53880:9;53871:7;53867:23;53863:32;53860:119;;;53898:79;;:::i;:::-;53860:119;54018:1;54043:64;54099:7;54090:6;54079:9;54075:22;54043:64;:::i;:::-;54033:74;;53989:128;54156:2;54182:64;54238:7;54229:6;54218:9;54214:22;54182:64;:::i;:::-;54172:74;;54127:129;54295:2;54321:64;54377:7;54368:6;54357:9;54353:22;54321:64;:::i;:::-;54311:74;;54266:129;53739:663;;;;;:::o

Swarm Source

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