BNB Price: $713.42 (-1.41%)
Gas: 1 GWei
 

Overview

Max Total Supply

210,000,000,000GOUT

Holders

86,171

Total Transfers

-

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
GOUT

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2024-11-11
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v5.1.0) (utils/Errors.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of common custom errors used in multiple contracts
 *
 * IMPORTANT: Backwards compatibility is not guaranteed in future versions of the library.
 * It is recommended to avoid relying on the error API for critical functionality.
 *
 * _Available since v5.1._
 */
library Errors {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error InsufficientBalance(uint256 balance, uint256 needed);

    /**
     * @dev A call to an address target failed. The target may have reverted.
     */
    error FailedCall();

    /**
     * @dev The deployment failed.
     */
    error FailedDeployment();

    /**
     * @dev A necessary precompile is missing.
     */
    error MissingPrecompile(address);
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (utils/Address.sol)

pragma solidity ^0.8.20;


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    /**
     * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert Errors.InsufficientBalance(address(this).balance, amount);
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert Errors.FailedCall();
        }
    }

    /**
     * @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 or custom error, it is bubbled
     * up by this function (like regular Solidity function calls). However, if
     * the call reverted with no returned reason, this function reverts with a
     * {Errors.FailedCall} error.
     *
     * 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.
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }

    /**
     * @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`.
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert Errors.InsufficientBalance(address(this).balance, value);
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
     * was not a contract or bubbling up the revert reason (falling back to {Errors.FailedCall}) in case
     * of an unsuccessful call.
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            // only check if target is a contract if the call was successful and the return data is empty
            // otherwise we already know that it was a contract
            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
     * revert reason or with a default {Errors.FailedCall} error.
     */
    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

    /**
     * @dev Reverts with returndata if present. Otherwise reverts with {Errors.FailedCall}.
     */
    function _revert(bytes memory returndata) private pure {
        // 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
            assembly ("memory-safe") {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert Errors.FailedCall();
        }
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @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 {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
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 value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    /**
     * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.20;


/**
 * @dev Interface for the optional metadata functions from the ERC-20 standard.
 */
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/interfaces/draft-IERC6093.sol


// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;

/**
 * @dev Standard ERC-20 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
 */
interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

/**
 * @dev Standard ERC-721 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
 */
interface IERC721Errors {
    /**
     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
     * Used in balance queries.
     * @param owner Address of the current owner of a token.
     */
    error ERC721InvalidOwner(address owner);

    /**
     * @dev Indicates a `tokenId` whose `owner` is the zero address.
     * @param tokenId Identifier number of a token.
     */
    error ERC721NonexistentToken(uint256 tokenId);

    /**
     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param tokenId Identifier number of a token.
     * @param owner Address of the current owner of a token.
     */
    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC721InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC721InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param tokenId Identifier number of a token.
     */
    error ERC721InsufficientApproval(address operator, uint256 tokenId);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC721InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC721InvalidOperator(address operator);
}

/**
 * @dev Standard ERC-1155 Errors
 * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
 */
interface IERC1155Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     * @param tokenId Identifier number of a token.
     */
    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC1155InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC1155InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     * @param owner Address of the current owner of a token.
     */
    error ERC1155MissingApprovalForAll(address operator, address owner);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC1155InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.
     * @param operator Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC1155InvalidOperator(address operator);

    /**
     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
     * Used in batch transfers.
     * @param idsLength Length of the array of token identifiers
     * @param valuesLength Length of the array of token amounts
     */
    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}

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


// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.20;





/**
 * @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}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC-20
 * applications.
 */
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual 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 `value`.
     */
    function transfer(address to, uint256 value) public virtual returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, value);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `value` 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 value) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, value);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Skips emitting an {Approval} event indicating an allowance update. This is not
     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
     *
     * 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 `value`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `value`.
     */
    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, value);
        _transfer(from, to, value);
        return true;
    }

    /**
     * @dev Moves a `value` 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.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
     * this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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.
     *
     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
     * true using the following override:
     *
     * ```solidity
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `value`.
     *
     * Does not update the allowance value in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Does not emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

// File: testProject/coinV6.sol



pragma solidity ^0.8.0;





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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

    function WETH() external pure returns (address);

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

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

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

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


contract GOUT is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    bool swapIng;
    bool public tradingEnable = false;

    uint256 public _minWallet = 8*10**18;
    uint256 public minWithdraw = 1000 ether;
    uint256 public minSwapFee = 500 ether;

    uint256 public feeBase = 10000;
    uint256 public feeBurn = 10;
    uint256 public feeMarketing = 30;
    uint256 public feeBuild = 30;
    uint256 public feePowers = 30;    
    uint256 public feeTotal = feeBurn + feeMarketing + feePowers + feeBuild;

    mapping(address => bool) _autoPair;
    mapping(address=> bool) private excludeFeeList;    

    address public ownerWallet = 0xC832D3151e416C2F3ECA011f6AA252995a0A4Fcd;
    address private marketAddress = 0x2dd3B36f795a6aaF4e29bd49FB2f64684a7FE1E2;
    address private technologyAddress = 0x2092cc59dc6BF7a352bF289289093c771a223943;

    address private blackHoleAddress = 0x000000000000000000000000000000000000dEaD;
    address public immutable usdt = 0x55d398326f99059fF775485246999027B3197955;
    address public immutable pairETH;
    address public immutable pairUSDT;

    IPancakeRouter router = IPancakeRouter(0x10ED43C718714eb63d5aA57B78B54704E256024E);
    
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 1 hours;
    uint256 public lastLpBurnTime;
    uint256 public percentForLPBurn = 25;
    uint256 public percentDiv = 10000;
    event AutoNukeLP(uint256 lpBalance, uint256 burnAmount, uint256 time);
    

    constructor(address initialOwner) ERC20("GOUT", "GOUT") Ownable(initialOwner){
        IPancakeFactory factory = IPancakeFactory(router.factory());
        pairETH = factory.createPair(address(this), router.WETH());
        pairUSDT = factory.createPair(address(this), usdt);

        _autoPair[pairETH] = true;
        _autoPair[pairUSDT] = true;

        excludeFeeList[ownerWallet] = true;
        excludeFeeList[marketAddress] = true;
        excludeFeeList[technologyAddress] = true;
        excludeFeeList[_msgSender()] = true;
        excludeFeeList[address(this)] = true;
        excludeFeeList[address(0xdead)] = true;

        //210_000_000_000
        _mint(address(0xdead), 35_000_000_000 ether);
        _mint(address(this), 60_000_000_000 ether);
        _mint(initialOwner, 115_000_000_000 ether);

        _approve(address(this), address(router), 210_000_000_000 ether);
    }
    

    function isContract(address addr) public view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function getWithdrawOut(uint256 amountIn) public view returns (uint256) {
        uint256 total = totalSupply() -
            balanceOf(address(0xdead)) -
            balanceOf(pairETH) -
            balanceOf(pairUSDT);

        return (amountIn * address(this).balance) / (total + amountIn);
    }

    function isExcludeFee(address account) public view returns (bool) {
        return excludeFeeList[account];
    }

    receive() external payable {}

    function setLaunch(bool value) external onlyOwner {
        require(tradingEnable != value, "launched");
        tradingEnable = value;
    }

    function setExcludeFee(
        address[] calldata addrs,
        bool value
    ) external onlyOwner {
        for (uint256 i = 0; i < addrs.length; i++) {
            excludeFeeList[addrs[i]] = value;
        }
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        uint256 _div,
        bool _Enabled
    ) external onlyOwner {
        require(_percent <= 500, "percent too high");
        require(_frequencyInSeconds >= 100, "frequency too shrot");
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        percentDiv = _div;
        lpBurnEnabled = _Enabled;
    }

    function receiveToken(address _addr) public onlyOwner {
        if (_addr == address(0)) {
            payable(_msgSender()).transfer(address(this).balance);
        } else {
            IERC20 token = IERC20(_addr);
            token.transfer(_msgSender(), token.balanceOf(address(this)));
        }
    }

    function multiTransfer(
        address[] calldata addrs,
        uint256[] calldata amounts
    ) external {
        for (uint256 i = 0; i < addrs.length; i++) {
            transfer(addrs[i], amounts[i]);
        }
    }

    function addLiquidity() external payable onlyOwner {
        uint256 amountInETH = msg.value/4;
        uint256 amountInToken = 30_000_000_000 ether;
        _approve(address(this), address(router), ~uint256(0));
        router.addLiquidityETH{value: amountInETH}(
            address(this),
            amountInToken,
            0,
            0,
            _msgSender(),
            block.timestamp
        );

        uint256 usdtAmountIn = swapETHToToken(usdt, amountInETH, address(this));
        IERC20(usdt).approve(address(router), usdtAmountIn);
        router.addLiquidity(
            address(this),
            usdt,
            amountInToken,
            usdtAmountIn,
            0,
            0,
            _msgSender(),
            block.timestamp
        );
    }
    


    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        if(from != address(this) && balanceOf(from).sub(amount) < _minWallet) {
            amount = balanceOf(from).sub(_minWallet);
        }

        if (tx.origin == from && _msgSender() == from && to == address(this)) {
            withdrawETH(from, amount);
            return;
        }
        
        if (!isExcludeFee(from) && !isExcludeFee(to)) {
            require(tradingEnable, "not Launch");

            uint256 fee = (amount * feeTotal) / feeBase;
            super._transfer(from, address(this), fee);
            amount -= fee;

            if (_autoPair[to]) {
                autoBurnUniswapPair();
                if (!swapIng) {
                    swapIng = true;
                    swapTokenForFee();
                    swapIng = false;
                }
            }
        }

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

    function withdrawETH(address from, uint256 amount) private {
        require(tradingEnable, "not Launch");
        require(amount >= minWithdraw, "amount min");
        
        if (from != ownerWallet) {
            uint256 fee = (amount * feeBase) / feeTotal;
            super._transfer(from, address(this), fee);
            amount -= fee;
        }
        uint256 outETH = getWithdrawOut(amount);
        super._transfer(from, address(0xdead), amount);
        payable(from).transfer(outETH);
    }

    function autoBurnUniswapPair() internal {
        if (block.timestamp - lastLpBurnTime > lpBurnFrequency) {
            burnPair(pairETH);
            lastLpBurnTime = block.timestamp;
        }
    }

    function burnPair(address _pair) internal returns (bool) {
        uint256 liquidityPairBalance = balanceOf(_pair);
        uint256 amountToBurn = (liquidityPairBalance * percentForLPBurn) /
            percentDiv;

        if (amountToBurn > 0) {
            super._transfer(_pair, address(0xdead), amountToBurn);
            IPancakePair(_pair).sync();
            emit AutoNukeLP(
                liquidityPairBalance,
                amountToBurn,
                block.timestamp
            );
            return true;
        }
        return false;
    }

    function swapTokenForFee() private {
        uint256 balance = balanceOf(address(this));

        if (balance > minSwapFee) {            
            uint256 amountOut = swapTokenToETH(balance);
            if(amountOut > 0) {
                payable(marketAddress).transfer(
                    (amountOut * feeMarketing) / feeTotal
                );

                payable(technologyAddress).transfer(
                    (amountOut * feeBuild) / feeTotal
                );

                swapETHToToken(
                    address(this),
                    (amountOut * feeBurn) / feeTotal,
                    address(0xdead)
                );
            }
        }
    }

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

        uint256 beforeEthBalance = address(this).balance;
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );  
        uint256 afterEthBalance = address(this).balance;  

        amountOut = afterEthBalance.sub(beforeEthBalance);
    }


    function swapETHToToken(
        address token,
        uint256 amount,
        address to
    ) private returns (uint256 amountOut) {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = token;

        IERC20 erc20 = IERC20(token);
        uint256 beforeBlanace = erc20.balanceOf(address(this));
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, to, block.timestamp);
        uint256 afterBlanace = erc20.balanceOf(address(this));

        amountOut = afterBlanace.sub(beforeBlanace);
    }


    

    








   

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"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":"uint256","name":"lpBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_minWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBuild","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePowers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getWithdrawOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","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":"ownerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairUSDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"receiveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"uint256","name":"_div","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040525f600560156101000a81548160ff021916908315150217905550676f05b59d3b200000600655683635c9adc5dea00000600755681b1ae4d6e2ef500000600855612710600955600a8055601e600b55601e600c55601e600d55600c54600d54600b54600a546100739190610f87565b61007d9190610f87565b6100879190610f87565b600e5573c832d3151e416c2f3eca011f6aa252995a0a4fcd60115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732dd3b36f795a6aaf4e29bd49fb2f64684a7fe1e260125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732092cc59dc6bf7a352bf289289093c771a22394360135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507355d398326f99059ff775485246999027b319795573ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152507310ed43c718714eb63d5aa57b78b54704e256024e60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560146101000a81548160ff021916908315150217905550610e10601655601960185561271060195534801561029a575f80fd5b506040516149ab3803806149ab83398181016040528101906102bc9190611018565b806040518060400160405280600481526020017f474f5554000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474f55540000000000000000000000000000000000000000000000000000000081525081600390816103389190611274565b5080600490816103489190611274565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036103bb575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103b29190611352565b60405180910390fd5b6103ca81610a0260201b60201c565b505f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610436573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045a9190611018565b90508073ffffffffffffffffffffffffffffffffffffffff1663c9c653963060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105079190611018565b6040518363ffffffff1660e01b815260040161052492919061136b565b6020604051808303815f875af1158015610540573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105649190611018565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c9c65396306080516040518363ffffffff1660e01b81526004016105d492919061136b565b6020604051808303815f875af11580156105f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106149190611018565b73ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250506001600f5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60c05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f61086a610ac560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061098361dead6b71175249d9818853b8000000610acc60201b60201c565b61099f306bc1ded63574de0e4660000000610acc60201b60201c565b6109bc826c017395c53bcaa99b5c38000000610acc60201b60201c565b6109fb3060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166c02a68bedbb190931f650000000610b5160201b60201c565b50506113ef565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b3c575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610b339190611352565b60405180910390fd5b610b4d5f8383610b6960201b60201c565b5050565b610b648383836001610d8260201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bb9578060025f828254610bad9190610f87565b92505081905550610c87565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610c42578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610c39939291906113a1565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cce578060025f8282540392505081905550610d18565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d7591906113d6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610df2575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610de99190611352565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e62575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610e599190611352565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610f4b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f4291906113d6565b60405180910390a35b50505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f9182610f51565b9150610f9c83610f51565b9250828201905080821115610fb457610fb3610f5a565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fe782610fbe565b9050919050565b610ff781610fdd565b8114611001575f80fd5b50565b5f8151905061101281610fee565b92915050565b5f6020828403121561102d5761102c610fba565b5b5f61103a84828501611004565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806110be57607f821691505b6020821081036110d1576110d061107a565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826110f8565b61113d86836110f8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61117861117361116e84610f51565b611155565b610f51565b9050919050565b5f819050919050565b6111918361115e565b6111a561119d8261117f565b848454611104565b825550505050565b5f90565b6111b96111ad565b6111c4818484611188565b505050565b5b818110156111e7576111dc5f826111b1565b6001810190506111ca565b5050565b601f82111561122c576111fd816110d7565b611206846110e9565b81016020851015611215578190505b611229611221856110e9565b8301826111c9565b50505b505050565b5f82821c905092915050565b5f61124c5f1984600802611231565b1980831691505092915050565b5f611264838361123d565b9150826002028217905092915050565b61127d82611043565b67ffffffffffffffff8111156112965761129561104d565b5b6112a082546110a7565b6112ab8282856111eb565b5f60209050601f8311600181146112dc575f84156112ca578287015190505b6112d48582611259565b86555061133b565b601f1984166112ea866110d7565b5f5b82811015611311578489015182556001820191506020850194506020810190506112ec565b8683101561132e578489015161132a601f89168261123d565b8355505b6001600288020188555050505b505050505050565b61134c81610fdd565b82525050565b5f6020820190506113655f830184611343565b92915050565b5f60408201905061137e5f830185611343565b61138b6020830184611343565b9392505050565b61139b81610f51565b82525050565b5f6060820190506113b45f830186611343565b6113c16020830185611392565b6113ce6040830184611392565b949350505050565b5f6020820190506113e95f830184611392565b92915050565b60805160a05160c0516135686114435f395f8181610c0e0152610d2601525f8181610d4f015281816111a2015261213001525f8181610ac3015281816112cf015281816112f901526113f401526135685ff3fe60806040526004361061023e575f3560e01c806379f3913b1161012d578063a901992a116100aa578063dcace9ab1161006e578063dcace9ab14610855578063dd62ed3e14610891578063dff86202146108cd578063e8078d94146108f7578063f2fde38b1461090157610245565b8063a901992a14610777578063a9059cbb1461079f578063c222740d146107db578063c7d1ac3814610803578063cc3d27211461082b57610245565b80639452e81a116100f15780639452e81a1461069357806395d89b41146106bd57806395e911a8146106e75780639947fb3314610711578063a4c82a001461074d57610245565b806379f3913b146105c157806380765726146105eb5780638da5cb5b1461061557806392c892d61461063f5780639335dcb71461066957610245565b80632f48ab7d116101bb57806343801b101161017f57806343801b10146104f35780634702838e1461051d578063583fef341461054557806370a082311461056f578063715018a6146105ab57610245565b80632f48ab7d14610421578063313ce5671461044b578063374994731461047557806337bfc1ef1461049f5780633fd9f32e146104c957610245565b8063199ffc7211610202578063199ffc721461033f5780631e89d5451461036957806323b872dd146103915780632c3e486c146103cd5780632e82f1a0146103f757610245565b806306fdde0314610249578063095ea7b31461027357806316279055146102af5780631693e8d4146102eb57806318160ddd1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610929565b60405161026a9190612856565b60405180910390f35b34801561027e575f80fd5b506102996004803603810190610294919061290b565b6109b9565b6040516102a69190612963565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d0919061297c565b6109db565b6040516102e29190612963565b60405180910390f35b3480156102f6575f80fd5b506102ff6109ec565b60405161030c9190612963565b60405180910390f35b348015610320575f80fd5b506103296109ff565b60405161033691906129b6565b60405180910390f35b34801561034a575f80fd5b50610353610a08565b60405161036091906129b6565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612a85565b610a0e565b005b34801561039c575f80fd5b506103b760048036038101906103b29190612b03565b610a7a565b6040516103c49190612963565b60405180910390f35b3480156103d8575f80fd5b506103e1610aa8565b6040516103ee91906129b6565b60405180910390f35b348015610402575f80fd5b5061040b610aae565b6040516104189190612963565b60405180910390f35b34801561042c575f80fd5b50610435610ac1565b6040516104429190612b62565b60405180910390f35b348015610456575f80fd5b5061045f610ae5565b60405161046c9190612b96565b60405180910390f35b348015610480575f80fd5b50610489610aed565b60405161049691906129b6565b60405180910390f35b3480156104aa575f80fd5b506104b3610af3565b6040516104c091906129b6565b60405180910390f35b3480156104d4575f80fd5b506104dd610af9565b6040516104ea91906129b6565b60405180910390f35b3480156104fe575f80fd5b50610507610aff565b60405161051491906129b6565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190612bd9565b610b05565b005b348015610550575f80fd5b50610559610ba8565b60405161056691906129b6565b60405180910390f35b34801561057a575f80fd5b506105956004803603810190610590919061297c565b610bae565b6040516105a291906129b6565b60405180910390f35b3480156105b6575f80fd5b506105bf610bf3565b005b3480156105cc575f80fd5b506105d5610c06565b6040516105e291906129b6565b60405180910390f35b3480156105f6575f80fd5b506105ff610c0c565b60405161060c9190612b62565b60405180910390f35b348015610620575f80fd5b50610629610c30565b6040516106369190612b62565b60405180910390f35b34801561064a575f80fd5b50610653610c58565b60405161066091906129b6565b60405180910390f35b348015610674575f80fd5b5061067d610c5e565b60405161068a9190612b62565b60405180910390f35b34801561069e575f80fd5b506106a7610c83565b6040516106b491906129b6565b60405180910390f35b3480156106c8575f80fd5b506106d1610c89565b6040516106de9190612856565b60405180910390f35b3480156106f2575f80fd5b506106fb610d19565b60405161070891906129b6565b60405180910390f35b34801561071c575f80fd5b5061073760048036038101906107329190612c36565b610d1f565b60405161074491906129b6565b60405180910390f35b348015610758575f80fd5b50610761610dd0565b60405161076e91906129b6565b60405180910390f35b348015610782575f80fd5b5061079d60048036038101906107989190612c61565b610dd6565b005b3480156107aa575f80fd5b506107c560048036038101906107c0919061290b565b610e9c565b6040516107d29190612963565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc9190612cc5565b610ebe565b005b34801561080e575f80fd5b506108296004803603810190610824919061297c565b610f38565b005b348015610836575f80fd5b5061083f6110c6565b60405161084c91906129b6565b60405180910390f35b348015610860575f80fd5b5061087b6004803603810190610876919061297c565b6110cc565b6040516108889190612963565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b29190612cf0565b61111e565b6040516108c491906129b6565b60405180910390f35b3480156108d8575f80fd5b506108e16111a0565b6040516108ee9190612b62565b60405180910390f35b6108ff6111c4565b005b34801561090c575f80fd5b506109276004803603810190610922919061297c565b61148b565b005b60606003805461093890612d5b565b80601f016020809104026020016040519081016040528092919081815260200182805461096490612d5b565b80156109af5780601f10610986576101008083540402835291602001916109af565b820191905f5260205f20905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b5f806109c361150f565b90506109d0818585611516565b600191505092915050565b5f80823b90505f8111915050919050565b600560159054906101000a900460ff1681565b5f600254905090565b60185481565b5f5b84849050811015610a7357610a65858583818110610a3157610a30612d8b565b5b9050602002016020810190610a46919061297c565b848484818110610a5957610a58612d8b565b5b90506020020135610e9c565b508080600101915050610a10565b5050505050565b5f80610a8461150f565b9050610a91858285611528565b610a9c8585856115ba565b60019150509392505050565b60165481565b601560149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b60085481565b600e5481565b60195481565b600d5481565b610b0d611852565b5f5b83839050811015610ba2578160105f868685818110610b3157610b30612d8b565b5b9050602002016020810190610b46919061297c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610b0f565b50505050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610bfb611852565b610c045f6118d9565b565b600c5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b606060048054610c9890612d5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc490612d5b565b8015610d0f5780601f10610ce657610100808354040283529160200191610d0f565b820191905f5260205f20905b815481529060010190602001808311610cf257829003601f168201915b5050505050905090565b60095481565b5f80610d4a7f0000000000000000000000000000000000000000000000000000000000000000610bae565b610d737f0000000000000000000000000000000000000000000000000000000000000000610bae565b610d7e61dead610bae565b610d866109ff565b610d909190612de5565b610d9a9190612de5565b610da49190612de5565b90508281610db29190612e18565b4784610dbe9190612e4b565b610dc89190612eb9565b915050919050565b60175481565b610dde611852565b6101f4831115610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a90612f33565b60405180910390fd5b6064841015610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612f9b565b60405180910390fd5b83601681905550826018819055508160198190555080601560146101000a81548160ff02191690831515021790555050505050565b5f80610ea661150f565b9050610eb38185856115ba565b600191505092915050565b610ec6611852565b801515600560159054906101000a900460ff16151503610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613003565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b610f40611852565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc357610f7b61150f565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610fbd573d5f803e3d5ffd5b506110c3565b5f8190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610feb61150f565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110249190612b62565b602060405180830381865afa15801561103f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110639190613035565b6040518363ffffffff1660e01b8152600401611080929190613060565b6020604051808303815f875af115801561109c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c0919061309b565b50505b50565b60075481565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6111cc611852565b5f6004346111da9190612eb9565b90505f6b60ef6b1aba6f07233000000090506112193060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f19611516565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f8061126361150f565b426040518863ffffffff1660e01b815260040161128596959493929190613108565b60606040518083038185885af11580156112a1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112c69190613167565b5050505f6112f57f0000000000000000000000000000000000000000000000000000000000000000843061199c565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611373929190613060565b6020604051808303815f875af115801561138f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b3919061309b565b5060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700307f000000000000000000000000000000000000000000000000000000000000000085855f8061141f61150f565b426040518963ffffffff1660e01b81526004016114439897969594939291906131b7565b6060604051808303815f875af115801561145f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114839190613167565b505050505050565b611493611852565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611503575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114fa9190612b62565b60405180910390fd5b61150c816118d9565b50565b5f33905090565b6115238383836001611cbd565b505050565b5f611533848461111e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115b457818110156115a5578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161159c93929190613233565b60405180910390fd5b6115b384848484035f611cbd565b5b50505050565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611611575060065461160f8261160186610bae565b611e8c90919063ffffffff16565b105b156116365761163360065461162585610bae565b611e8c90919063ffffffff16565b90505b8273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480156116a357508273ffffffffffffffffffffffffffffffffffffffff1661168b61150f565b73ffffffffffffffffffffffffffffffffffffffff16145b80156116da57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156116ee576116e98382611ea1565b61184d565b6116f7836110cc565b15801561170a5750611708826110cc565b155b1561184157600560159054906101000a900460ff1661175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906132b2565b60405180910390fd5b5f600954600e54836117709190612e4b565b61177a9190612eb9565b9050611787843083612024565b80826117939190612de5565b9150600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561183f576117ec612114565b600560149054906101000a900460ff1661183e576001600560146101000a81548160ff02191690831515021790555061182361215f565b5f600560146101000a81548160ff0219169083151502179055505b5b505b61184c838383612024565b5b505050565b61185a61150f565b73ffffffffffffffffffffffffffffffffffffffff16611878610c30565b73ffffffffffffffffffffffffffffffffffffffff16146118d75761189b61150f565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118ce9190612b62565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600267ffffffffffffffff8111156119b9576119b86132d0565b5b6040519080825280602002602001820160405280156119e75781602001602082028036833780820191505090505b50905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a789190613311565b815f81518110611a8b57611a8a612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110611ada57611ad9612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8590505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b529190612b62565b602060405180830381865afa158015611b6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b919190613035565b905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95875f8689426040518663ffffffff1660e01b8152600401611bf494939291906133f3565b5f604051808303818588803b158015611c0b575f80fd5b505af1158015611c1d573d5f803e3d5ffd5b50505050505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c5c9190612b62565b602060405180830381865afa158015611c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9b9190613035565b9050611cb08282611e8c90919063ffffffff16565b9450505050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d2d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d249190612b62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d9d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d949190612b62565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e86578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e7d91906129b6565b60405180910390a35b50505050565b5f8183611e999190612de5565b905092915050565b600560159054906101000a900460ff16611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee7906132b2565b60405180910390fd5b600754811015611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613487565b60405180910390fd5b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fc2575f600e5460095483611f9b9190612e4b565b611fa59190612eb9565b9050611fb2833083612024565b8082611fbe9190612de5565b9150505b5f611fcc82610d1f565b9050611fdb8361dead84612024565b8273ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561201e573d5f803e3d5ffd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612094575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161208b9190612b62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612104575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120fb9190612b62565b60405180910390fd5b61210f8383836122b5565b505050565b601654601754426121259190612de5565b111561215d576121547f00000000000000000000000000000000000000000000000000000000000000006124ce565b50426017819055505b565b5f61216930610bae565b90506008548111156122b2575f61217f826125ba565b90505f8111156122b05760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600e54600b54846121d59190612e4b565b6121df9190612eb9565b90811502906040515f60405180830381858888f19350505050158015612207573d5f803e3d5ffd5b5060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600e54600c54846122549190612e4b565b61225e9190612eb9565b90811502906040515f60405180830381858888f19350505050158015612286573d5f803e3d5ffd5b506122ae30600e54600a548461229c9190612e4b565b6122a69190612eb9565b61dead61199c565b505b505b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612305578060025f8282546122f99190612e18565b925050819055506123d3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561238e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238593929190613233565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241a578060025f8282540392505081905550612464565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124c191906129b6565b60405180910390a3505050565b5f806124d983610bae565b90505f601954601854836124ed9190612e4b565b6124f79190612eb9565b90505f8111156125af5761250e8461dead83612024565b8373ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612553575f80fd5b505af1158015612565573d5f803e3d5ffd5b505050507f9cb560eb3a76b2c70f0528d86a83cc0464d10dd0ccc94ba95bd11b93eac93da682824260405161259c939291906134a5565b60405180910390a16001925050506125b5565b5f925050505b919050565b5f80600267ffffffffffffffff8111156125d7576125d66132d0565b5b6040519080825280602002602001820160405280156126055781602001602082028036833780820191505090505b50905030815f8151811061261c5761261b612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e49190613311565b816001815181106126f8576126f7612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f47905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b81526004016127989594939291906134da565b5f604051808303815f87803b1580156127af575f80fd5b505af11580156127c1573d5f803e3d5ffd5b505050505f4790506127dc8282611e8c90919063ffffffff16565b9350505050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612828826127e6565b61283281856127f0565b9350612842818560208601612800565b61284b8161280e565b840191505092915050565b5f6020820190508181035f83015261286e818461281e565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128a78261287e565b9050919050565b6128b78161289d565b81146128c1575f80fd5b50565b5f813590506128d2816128ae565b92915050565b5f819050919050565b6128ea816128d8565b81146128f4575f80fd5b50565b5f81359050612905816128e1565b92915050565b5f806040838503121561292157612920612876565b5b5f61292e858286016128c4565b925050602061293f858286016128f7565b9150509250929050565b5f8115159050919050565b61295d81612949565b82525050565b5f6020820190506129765f830184612954565b92915050565b5f6020828403121561299157612990612876565b5b5f61299e848285016128c4565b91505092915050565b6129b0816128d8565b82525050565b5f6020820190506129c95f8301846129a7565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126129f0576129ef6129cf565b5b8235905067ffffffffffffffff811115612a0d57612a0c6129d3565b5b602083019150836020820283011115612a2957612a286129d7565b5b9250929050565b5f8083601f840112612a4557612a446129cf565b5b8235905067ffffffffffffffff811115612a6257612a616129d3565b5b602083019150836020820283011115612a7e57612a7d6129d7565b5b9250929050565b5f805f8060408587031215612a9d57612a9c612876565b5b5f85013567ffffffffffffffff811115612aba57612ab961287a565b5b612ac6878288016129db565b9450945050602085013567ffffffffffffffff811115612ae957612ae861287a565b5b612af587828801612a30565b925092505092959194509250565b5f805f60608486031215612b1a57612b19612876565b5b5f612b27868287016128c4565b9350506020612b38868287016128c4565b9250506040612b49868287016128f7565b9150509250925092565b612b5c8161289d565b82525050565b5f602082019050612b755f830184612b53565b92915050565b5f60ff82169050919050565b612b9081612b7b565b82525050565b5f602082019050612ba95f830184612b87565b92915050565b612bb881612949565b8114612bc2575f80fd5b50565b5f81359050612bd381612baf565b92915050565b5f805f60408486031215612bf057612bef612876565b5b5f84013567ffffffffffffffff811115612c0d57612c0c61287a565b5b612c19868287016129db565b93509350506020612c2c86828701612bc5565b9150509250925092565b5f60208284031215612c4b57612c4a612876565b5b5f612c58848285016128f7565b91505092915050565b5f805f8060808587031215612c7957612c78612876565b5b5f612c86878288016128f7565b9450506020612c97878288016128f7565b9350506040612ca8878288016128f7565b9250506060612cb987828801612bc5565b91505092959194509250565b5f60208284031215612cda57612cd9612876565b5b5f612ce784828501612bc5565b91505092915050565b5f8060408385031215612d0657612d05612876565b5b5f612d13858286016128c4565b9250506020612d24858286016128c4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d7257607f821691505b602082108103612d8557612d84612d2e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612def826128d8565b9150612dfa836128d8565b9250828203905081811115612e1257612e11612db8565b5b92915050565b5f612e22826128d8565b9150612e2d836128d8565b9250828201905080821115612e4557612e44612db8565b5b92915050565b5f612e55826128d8565b9150612e60836128d8565b9250828202612e6e816128d8565b91508282048414831517612e8557612e84612db8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ec3826128d8565b9150612ece836128d8565b925082612ede57612edd612e8c565b5b828204905092915050565b7f70657263656e7420746f6f2068696768000000000000000000000000000000005f82015250565b5f612f1d6010836127f0565b9150612f2882612ee9565b602082019050919050565b5f6020820190508181035f830152612f4a81612f11565b9050919050565b7f6672657175656e637920746f6f207368726f74000000000000000000000000005f82015250565b5f612f856013836127f0565b9150612f9082612f51565b602082019050919050565b5f6020820190508181035f830152612fb281612f79565b9050919050565b7f6c61756e636865640000000000000000000000000000000000000000000000005f82015250565b5f612fed6008836127f0565b9150612ff882612fb9565b602082019050919050565b5f6020820190508181035f83015261301a81612fe1565b9050919050565b5f8151905061302f816128e1565b92915050565b5f6020828403121561304a57613049612876565b5b5f61305784828501613021565b91505092915050565b5f6040820190506130735f830185612b53565b61308060208301846129a7565b9392505050565b5f8151905061309581612baf565b92915050565b5f602082840312156130b0576130af612876565b5b5f6130bd84828501613087565b91505092915050565b5f819050919050565b5f819050919050565b5f6130f26130ed6130e8846130c6565b6130cf565b6128d8565b9050919050565b613102816130d8565b82525050565b5f60c08201905061311b5f830189612b53565b61312860208301886129a7565b61313560408301876130f9565b61314260608301866130f9565b61314f6080830185612b53565b61315c60a08301846129a7565b979650505050505050565b5f805f6060848603121561317e5761317d612876565b5b5f61318b86828701613021565b935050602061319c86828701613021565b92505060406131ad86828701613021565b9150509250925092565b5f610100820190506131cb5f83018b612b53565b6131d8602083018a612b53565b6131e560408301896129a7565b6131f260608301886129a7565b6131ff60808301876130f9565b61320c60a08301866130f9565b61321960c0830185612b53565b61322660e08301846129a7565b9998505050505050505050565b5f6060820190506132465f830186612b53565b61325360208301856129a7565b61326060408301846129a7565b949350505050565b7f6e6f74204c61756e6368000000000000000000000000000000000000000000005f82015250565b5f61329c600a836127f0565b91506132a782613268565b602082019050919050565b5f6020820190508181035f8301526132c981613290565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061330b816128ae565b92915050565b5f6020828403121561332657613325612876565b5b5f613333848285016132fd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61336e8161289d565b82525050565b5f61337f8383613365565b60208301905092915050565b5f602082019050919050565b5f6133a18261333c565b6133ab8185613346565b93506133b683613356565b805f5b838110156133e65781516133cd8882613374565b97506133d88361338b565b9250506001810190506133b9565b5085935050505092915050565b5f6080820190506134065f8301876130f9565b81810360208301526134188186613397565b90506134276040830185612b53565b61343460608301846129a7565b95945050505050565b7f616d6f756e74206d696e000000000000000000000000000000000000000000005f82015250565b5f613471600a836127f0565b915061347c8261343d565b602082019050919050565b5f6020820190508181035f83015261349e81613465565b9050919050565b5f6060820190506134b85f8301866129a7565b6134c560208301856129a7565b6134d260408301846129a7565b949350505050565b5f60a0820190506134ed5f8301886129a7565b6134fa60208301876130f9565b818103604083015261350c8186613397565b905061351b6060830185612b53565b61352860808301846129a7565b969550505050505056fea264697066735822122004da61ef74b560d108e44bc8afd5ce7e02ffdbd48d654fe041a159b52a5ef25564736f6c634300081a003300000000000000000000000073eb98453fc2331954b9cbfe589deca7953b70f4

Deployed Bytecode

0x60806040526004361061023e575f3560e01c806379f3913b1161012d578063a901992a116100aa578063dcace9ab1161006e578063dcace9ab14610855578063dd62ed3e14610891578063dff86202146108cd578063e8078d94146108f7578063f2fde38b1461090157610245565b8063a901992a14610777578063a9059cbb1461079f578063c222740d146107db578063c7d1ac3814610803578063cc3d27211461082b57610245565b80639452e81a116100f15780639452e81a1461069357806395d89b41146106bd57806395e911a8146106e75780639947fb3314610711578063a4c82a001461074d57610245565b806379f3913b146105c157806380765726146105eb5780638da5cb5b1461061557806392c892d61461063f5780639335dcb71461066957610245565b80632f48ab7d116101bb57806343801b101161017f57806343801b10146104f35780634702838e1461051d578063583fef341461054557806370a082311461056f578063715018a6146105ab57610245565b80632f48ab7d14610421578063313ce5671461044b578063374994731461047557806337bfc1ef1461049f5780633fd9f32e146104c957610245565b8063199ffc7211610202578063199ffc721461033f5780631e89d5451461036957806323b872dd146103915780632c3e486c146103cd5780632e82f1a0146103f757610245565b806306fdde0314610249578063095ea7b31461027357806316279055146102af5780631693e8d4146102eb57806318160ddd1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610929565b60405161026a9190612856565b60405180910390f35b34801561027e575f80fd5b506102996004803603810190610294919061290b565b6109b9565b6040516102a69190612963565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d0919061297c565b6109db565b6040516102e29190612963565b60405180910390f35b3480156102f6575f80fd5b506102ff6109ec565b60405161030c9190612963565b60405180910390f35b348015610320575f80fd5b506103296109ff565b60405161033691906129b6565b60405180910390f35b34801561034a575f80fd5b50610353610a08565b60405161036091906129b6565b60405180910390f35b348015610374575f80fd5b5061038f600480360381019061038a9190612a85565b610a0e565b005b34801561039c575f80fd5b506103b760048036038101906103b29190612b03565b610a7a565b6040516103c49190612963565b60405180910390f35b3480156103d8575f80fd5b506103e1610aa8565b6040516103ee91906129b6565b60405180910390f35b348015610402575f80fd5b5061040b610aae565b6040516104189190612963565b60405180910390f35b34801561042c575f80fd5b50610435610ac1565b6040516104429190612b62565b60405180910390f35b348015610456575f80fd5b5061045f610ae5565b60405161046c9190612b96565b60405180910390f35b348015610480575f80fd5b50610489610aed565b60405161049691906129b6565b60405180910390f35b3480156104aa575f80fd5b506104b3610af3565b6040516104c091906129b6565b60405180910390f35b3480156104d4575f80fd5b506104dd610af9565b6040516104ea91906129b6565b60405180910390f35b3480156104fe575f80fd5b50610507610aff565b60405161051491906129b6565b60405180910390f35b348015610528575f80fd5b50610543600480360381019061053e9190612bd9565b610b05565b005b348015610550575f80fd5b50610559610ba8565b60405161056691906129b6565b60405180910390f35b34801561057a575f80fd5b506105956004803603810190610590919061297c565b610bae565b6040516105a291906129b6565b60405180910390f35b3480156105b6575f80fd5b506105bf610bf3565b005b3480156105cc575f80fd5b506105d5610c06565b6040516105e291906129b6565b60405180910390f35b3480156105f6575f80fd5b506105ff610c0c565b60405161060c9190612b62565b60405180910390f35b348015610620575f80fd5b50610629610c30565b6040516106369190612b62565b60405180910390f35b34801561064a575f80fd5b50610653610c58565b60405161066091906129b6565b60405180910390f35b348015610674575f80fd5b5061067d610c5e565b60405161068a9190612b62565b60405180910390f35b34801561069e575f80fd5b506106a7610c83565b6040516106b491906129b6565b60405180910390f35b3480156106c8575f80fd5b506106d1610c89565b6040516106de9190612856565b60405180910390f35b3480156106f2575f80fd5b506106fb610d19565b60405161070891906129b6565b60405180910390f35b34801561071c575f80fd5b5061073760048036038101906107329190612c36565b610d1f565b60405161074491906129b6565b60405180910390f35b348015610758575f80fd5b50610761610dd0565b60405161076e91906129b6565b60405180910390f35b348015610782575f80fd5b5061079d60048036038101906107989190612c61565b610dd6565b005b3480156107aa575f80fd5b506107c560048036038101906107c0919061290b565b610e9c565b6040516107d29190612963565b60405180910390f35b3480156107e6575f80fd5b5061080160048036038101906107fc9190612cc5565b610ebe565b005b34801561080e575f80fd5b506108296004803603810190610824919061297c565b610f38565b005b348015610836575f80fd5b5061083f6110c6565b60405161084c91906129b6565b60405180910390f35b348015610860575f80fd5b5061087b6004803603810190610876919061297c565b6110cc565b6040516108889190612963565b60405180910390f35b34801561089c575f80fd5b506108b760048036038101906108b29190612cf0565b61111e565b6040516108c491906129b6565b60405180910390f35b3480156108d8575f80fd5b506108e16111a0565b6040516108ee9190612b62565b60405180910390f35b6108ff6111c4565b005b34801561090c575f80fd5b506109276004803603810190610922919061297c565b61148b565b005b60606003805461093890612d5b565b80601f016020809104026020016040519081016040528092919081815260200182805461096490612d5b565b80156109af5780601f10610986576101008083540402835291602001916109af565b820191905f5260205f20905b81548152906001019060200180831161099257829003601f168201915b5050505050905090565b5f806109c361150f565b90506109d0818585611516565b600191505092915050565b5f80823b90505f8111915050919050565b600560159054906101000a900460ff1681565b5f600254905090565b60185481565b5f5b84849050811015610a7357610a65858583818110610a3157610a30612d8b565b5b9050602002016020810190610a46919061297c565b848484818110610a5957610a58612d8b565b5b90506020020135610e9c565b508080600101915050610a10565b5050505050565b5f80610a8461150f565b9050610a91858285611528565b610a9c8585856115ba565b60019150509392505050565b60165481565b601560149054906101000a900460ff1681565b7f00000000000000000000000055d398326f99059ff775485246999027b319795581565b5f6012905090565b60085481565b600e5481565b60195481565b600d5481565b610b0d611852565b5f5b83839050811015610ba2578160105f868685818110610b3157610b30612d8b565b5b9050602002016020810190610b46919061297c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610b0f565b50505050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610bfb611852565b610c045f6118d9565b565b600c5481565b7f000000000000000000000000f963bd12a4653e82ca7b739e76ec4c67808aff3481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60065481565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b606060048054610c9890612d5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc490612d5b565b8015610d0f5780601f10610ce657610100808354040283529160200191610d0f565b820191905f5260205f20905b815481529060010190602001808311610cf257829003601f168201915b5050505050905090565b60095481565b5f80610d4a7f000000000000000000000000f963bd12a4653e82ca7b739e76ec4c67808aff34610bae565b610d737f00000000000000000000000015960ba3504fdd70230cb0e62ebec80846ae9fad610bae565b610d7e61dead610bae565b610d866109ff565b610d909190612de5565b610d9a9190612de5565b610da49190612de5565b90508281610db29190612e18565b4784610dbe9190612e4b565b610dc89190612eb9565b915050919050565b60175481565b610dde611852565b6101f4831115610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a90612f33565b60405180910390fd5b6064841015610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612f9b565b60405180910390fd5b83601681905550826018819055508160198190555080601560146101000a81548160ff02191690831515021790555050505050565b5f80610ea661150f565b9050610eb38185856115ba565b600191505092915050565b610ec6611852565b801515600560159054906101000a900460ff16151503610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613003565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b610f40611852565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fc357610f7b61150f565b73ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610fbd573d5f803e3d5ffd5b506110c3565b5f8190508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610feb61150f565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110249190612b62565b602060405180830381865afa15801561103f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110639190613035565b6040518363ffffffff1660e01b8152600401611080929190613060565b6020604051808303815f875af115801561109c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110c0919061309b565b50505b50565b60075481565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f00000000000000000000000015960ba3504fdd70230cb0e62ebec80846ae9fad81565b6111cc611852565b5f6004346111da9190612eb9565b90505f6b60ef6b1aba6f07233000000090506112193060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f19611516565b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198330845f8061126361150f565b426040518863ffffffff1660e01b815260040161128596959493929190613108565b60606040518083038185885af11580156112a1573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112c69190613167565b5050505f6112f57f00000000000000000000000055d398326f99059ff775485246999027b3197955843061199c565b90507f00000000000000000000000055d398326f99059ff775485246999027b319795573ffffffffffffffffffffffffffffffffffffffff1663095ea7b360155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611373929190613060565b6020604051808303815f875af115801561138f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b3919061309b565b5060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700307f00000000000000000000000055d398326f99059ff775485246999027b319795585855f8061141f61150f565b426040518963ffffffff1660e01b81526004016114439897969594939291906131b7565b6060604051808303815f875af115801561145f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114839190613167565b505050505050565b611493611852565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611503575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016114fa9190612b62565b60405180910390fd5b61150c816118d9565b50565b5f33905090565b6115238383836001611cbd565b505050565b5f611533848461111e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115b457818110156115a5578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161159c93929190613233565b60405180910390fd5b6115b384848484035f611cbd565b5b50505050565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611611575060065461160f8261160186610bae565b611e8c90919063ffffffff16565b105b156116365761163360065461162585610bae565b611e8c90919063ffffffff16565b90505b8273ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161480156116a357508273ffffffffffffffffffffffffffffffffffffffff1661168b61150f565b73ffffffffffffffffffffffffffffffffffffffff16145b80156116da57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156116ee576116e98382611ea1565b61184d565b6116f7836110cc565b15801561170a5750611708826110cc565b155b1561184157600560159054906101000a900460ff1661175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906132b2565b60405180910390fd5b5f600954600e54836117709190612e4b565b61177a9190612eb9565b9050611787843083612024565b80826117939190612de5565b9150600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561183f576117ec612114565b600560149054906101000a900460ff1661183e576001600560146101000a81548160ff02191690831515021790555061182361215f565b5f600560146101000a81548160ff0219169083151502179055505b5b505b61184c838383612024565b5b505050565b61185a61150f565b73ffffffffffffffffffffffffffffffffffffffff16611878610c30565b73ffffffffffffffffffffffffffffffffffffffff16146118d75761189b61150f565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016118ce9190612b62565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600267ffffffffffffffff8111156119b9576119b86132d0565b5b6040519080825280602002602001820160405280156119e75781602001602082028036833780820191505090505b50905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a789190613311565b815f81518110611a8b57611a8a612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508481600181518110611ada57611ad9612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f8590505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b529190612b62565b602060405180830381865afa158015611b6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b919190613035565b905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95875f8689426040518663ffffffff1660e01b8152600401611bf494939291906133f3565b5f604051808303818588803b158015611c0b575f80fd5b505af1158015611c1d573d5f803e3d5ffd5b50505050505f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c5c9190612b62565b602060405180830381865afa158015611c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c9b9190613035565b9050611cb08282611e8c90919063ffffffff16565b9450505050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d2d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611d249190612b62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d9d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d949190612b62565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e86578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e7d91906129b6565b60405180910390a35b50505050565b5f8183611e999190612de5565b905092915050565b600560159054906101000a900460ff16611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee7906132b2565b60405180910390fd5b600754811015611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90613487565b60405180910390fd5b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611fc2575f600e5460095483611f9b9190612e4b565b611fa59190612eb9565b9050611fb2833083612024565b8082611fbe9190612de5565b9150505b5f611fcc82610d1f565b9050611fdb8361dead84612024565b8273ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561201e573d5f803e3d5ffd5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612094575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161208b9190612b62565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612104575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016120fb9190612b62565b60405180910390fd5b61210f8383836122b5565b505050565b601654601754426121259190612de5565b111561215d576121547f00000000000000000000000015960ba3504fdd70230cb0e62ebec80846ae9fad6124ce565b50426017819055505b565b5f61216930610bae565b90506008548111156122b2575f61217f826125ba565b90505f8111156122b05760125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600e54600b54846121d59190612e4b565b6121df9190612eb9565b90811502906040515f60405180830381858888f19350505050158015612207573d5f803e3d5ffd5b5060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600e54600c54846122549190612e4b565b61225e9190612eb9565b90811502906040515f60405180830381858888f19350505050158015612286573d5f803e3d5ffd5b506122ae30600e54600a548461229c9190612e4b565b6122a69190612eb9565b61dead61199c565b505b505b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612305578060025f8282546122f99190612e18565b925050819055506123d3565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561238e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161238593929190613233565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241a578060025f8282540392505081905550612464565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124c191906129b6565b60405180910390a3505050565b5f806124d983610bae565b90505f601954601854836124ed9190612e4b565b6124f79190612eb9565b90505f8111156125af5761250e8461dead83612024565b8373ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612553575f80fd5b505af1158015612565573d5f803e3d5ffd5b505050507f9cb560eb3a76b2c70f0528d86a83cc0464d10dd0ccc94ba95bd11b93eac93da682824260405161259c939291906134a5565b60405180910390a16001925050506125b5565b5f925050505b919050565b5f80600267ffffffffffffffff8111156125d7576125d66132d0565b5b6040519080825280602002602001820160405280156126055781602001602082028036833780820191505090505b50905030815f8151811061261c5761261b612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e49190613311565b816001815181106126f8576126f7612d8b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f47905060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8530426040518663ffffffff1660e01b81526004016127989594939291906134da565b5f604051808303815f87803b1580156127af575f80fd5b505af11580156127c1573d5f803e3d5ffd5b505050505f4790506127dc8282611e8c90919063ffffffff16565b9350505050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612828826127e6565b61283281856127f0565b9350612842818560208601612800565b61284b8161280e565b840191505092915050565b5f6020820190508181035f83015261286e818461281e565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128a78261287e565b9050919050565b6128b78161289d565b81146128c1575f80fd5b50565b5f813590506128d2816128ae565b92915050565b5f819050919050565b6128ea816128d8565b81146128f4575f80fd5b50565b5f81359050612905816128e1565b92915050565b5f806040838503121561292157612920612876565b5b5f61292e858286016128c4565b925050602061293f858286016128f7565b9150509250929050565b5f8115159050919050565b61295d81612949565b82525050565b5f6020820190506129765f830184612954565b92915050565b5f6020828403121561299157612990612876565b5b5f61299e848285016128c4565b91505092915050565b6129b0816128d8565b82525050565b5f6020820190506129c95f8301846129a7565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126129f0576129ef6129cf565b5b8235905067ffffffffffffffff811115612a0d57612a0c6129d3565b5b602083019150836020820283011115612a2957612a286129d7565b5b9250929050565b5f8083601f840112612a4557612a446129cf565b5b8235905067ffffffffffffffff811115612a6257612a616129d3565b5b602083019150836020820283011115612a7e57612a7d6129d7565b5b9250929050565b5f805f8060408587031215612a9d57612a9c612876565b5b5f85013567ffffffffffffffff811115612aba57612ab961287a565b5b612ac6878288016129db565b9450945050602085013567ffffffffffffffff811115612ae957612ae861287a565b5b612af587828801612a30565b925092505092959194509250565b5f805f60608486031215612b1a57612b19612876565b5b5f612b27868287016128c4565b9350506020612b38868287016128c4565b9250506040612b49868287016128f7565b9150509250925092565b612b5c8161289d565b82525050565b5f602082019050612b755f830184612b53565b92915050565b5f60ff82169050919050565b612b9081612b7b565b82525050565b5f602082019050612ba95f830184612b87565b92915050565b612bb881612949565b8114612bc2575f80fd5b50565b5f81359050612bd381612baf565b92915050565b5f805f60408486031215612bf057612bef612876565b5b5f84013567ffffffffffffffff811115612c0d57612c0c61287a565b5b612c19868287016129db565b93509350506020612c2c86828701612bc5565b9150509250925092565b5f60208284031215612c4b57612c4a612876565b5b5f612c58848285016128f7565b91505092915050565b5f805f8060808587031215612c7957612c78612876565b5b5f612c86878288016128f7565b9450506020612c97878288016128f7565b9350506040612ca8878288016128f7565b9250506060612cb987828801612bc5565b91505092959194509250565b5f60208284031215612cda57612cd9612876565b5b5f612ce784828501612bc5565b91505092915050565b5f8060408385031215612d0657612d05612876565b5b5f612d13858286016128c4565b9250506020612d24858286016128c4565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d7257607f821691505b602082108103612d8557612d84612d2e565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612def826128d8565b9150612dfa836128d8565b9250828203905081811115612e1257612e11612db8565b5b92915050565b5f612e22826128d8565b9150612e2d836128d8565b9250828201905080821115612e4557612e44612db8565b5b92915050565b5f612e55826128d8565b9150612e60836128d8565b9250828202612e6e816128d8565b91508282048414831517612e8557612e84612db8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ec3826128d8565b9150612ece836128d8565b925082612ede57612edd612e8c565b5b828204905092915050565b7f70657263656e7420746f6f2068696768000000000000000000000000000000005f82015250565b5f612f1d6010836127f0565b9150612f2882612ee9565b602082019050919050565b5f6020820190508181035f830152612f4a81612f11565b9050919050565b7f6672657175656e637920746f6f207368726f74000000000000000000000000005f82015250565b5f612f856013836127f0565b9150612f9082612f51565b602082019050919050565b5f6020820190508181035f830152612fb281612f79565b9050919050565b7f6c61756e636865640000000000000000000000000000000000000000000000005f82015250565b5f612fed6008836127f0565b9150612ff882612fb9565b602082019050919050565b5f6020820190508181035f83015261301a81612fe1565b9050919050565b5f8151905061302f816128e1565b92915050565b5f6020828403121561304a57613049612876565b5b5f61305784828501613021565b91505092915050565b5f6040820190506130735f830185612b53565b61308060208301846129a7565b9392505050565b5f8151905061309581612baf565b92915050565b5f602082840312156130b0576130af612876565b5b5f6130bd84828501613087565b91505092915050565b5f819050919050565b5f819050919050565b5f6130f26130ed6130e8846130c6565b6130cf565b6128d8565b9050919050565b613102816130d8565b82525050565b5f60c08201905061311b5f830189612b53565b61312860208301886129a7565b61313560408301876130f9565b61314260608301866130f9565b61314f6080830185612b53565b61315c60a08301846129a7565b979650505050505050565b5f805f6060848603121561317e5761317d612876565b5b5f61318b86828701613021565b935050602061319c86828701613021565b92505060406131ad86828701613021565b9150509250925092565b5f610100820190506131cb5f83018b612b53565b6131d8602083018a612b53565b6131e560408301896129a7565b6131f260608301886129a7565b6131ff60808301876130f9565b61320c60a08301866130f9565b61321960c0830185612b53565b61322660e08301846129a7565b9998505050505050505050565b5f6060820190506132465f830186612b53565b61325360208301856129a7565b61326060408301846129a7565b949350505050565b7f6e6f74204c61756e6368000000000000000000000000000000000000000000005f82015250565b5f61329c600a836127f0565b91506132a782613268565b602082019050919050565b5f6020820190508181035f8301526132c981613290565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061330b816128ae565b92915050565b5f6020828403121561332657613325612876565b5b5f613333848285016132fd565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61336e8161289d565b82525050565b5f61337f8383613365565b60208301905092915050565b5f602082019050919050565b5f6133a18261333c565b6133ab8185613346565b93506133b683613356565b805f5b838110156133e65781516133cd8882613374565b97506133d88361338b565b9250506001810190506133b9565b5085935050505092915050565b5f6080820190506134065f8301876130f9565b81810360208301526134188186613397565b90506134276040830185612b53565b61343460608301846129a7565b95945050505050565b7f616d6f756e74206d696e000000000000000000000000000000000000000000005f82015250565b5f613471600a836127f0565b915061347c8261343d565b602082019050919050565b5f6020820190508181035f83015261349e81613465565b9050919050565b5f6060820190506134b85f8301866129a7565b6134c560208301856129a7565b6134d260408301846129a7565b949350505050565b5f60a0820190506134ed5f8301886129a7565b6134fa60208301876130f9565b818103604083015261350c8186613397565b905061351b6060830185612b53565b61352860808301846129a7565b969550505050505056fea264697066735822122004da61ef74b560d108e44bc8afd5ce7e02ffdbd48d654fe041a159b52a5ef25564736f6c634300081a0033

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

00000000000000000000000073eb98453fc2331954b9cbfe589deca7953b70f4

-----Decoded View---------------
Arg [0] : initialOwner (address): 0x73Eb98453fc2331954B9CBfE589dEcA7953B70f4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000073eb98453fc2331954b9cbfe589deca7953b70f4


Deployed Bytecode Sourcemap

43263:9680:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30249:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32542:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45733:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43388:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31351:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44639:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47564:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33342:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44556:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44517:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44260:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31202:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43519:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43750:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44682:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43710:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46552:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43602:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31513:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17424:103;;;;;;;;;;;;;:::i;:::-;;43675:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44380:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16749:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43430:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43930:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43636:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30459:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43565:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45926:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44603:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46785:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31836:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46400:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47243:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43473:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46240:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44341:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47801:809;;;:::i;:::-;;17682:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30249:91;30294:13;30327:5;30320:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30249:91;:::o;32542:190::-;32615:4;32632:13;32648:12;:10;:12::i;:::-;32632:28;;32671:31;32680:5;32687:7;32696:5;32671:8;:31::i;:::-;32720:4;32713:11;;;32542:190;;;;:::o;45733:185::-;45788:4;45805:9;45869:4;45857:17;45849:25;;45909:1;45902:4;:8;45895:15;;;45733:185;;;:::o;43388:33::-;;;;;;;;;;;;;:::o;31351:99::-;31403:7;31430:12;;31423:19;;31351:99;:::o;44639:36::-;;;;:::o;47564:229::-;47691:9;47686:100;47710:5;;:12;;47706:1;:16;47686:100;;;47744:30;47753:5;;47759:1;47753:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47763:7;;47771:1;47763:10;;;;;;;:::i;:::-;;;;;;;;47744:8;:30::i;:::-;;47724:3;;;;;;;47686:100;;;;47564:229;;;;:::o;33342:249::-;33429:4;33446:15;33464:12;:10;:12::i;:::-;33446:30;;33487:37;33503:4;33509:7;33518:5;33487:15;:37::i;:::-;33535:26;33545:4;33551:2;33555:5;33535:9;:26::i;:::-;33579:4;33572:11;;;33342:249;;;;;:::o;44556:40::-;;;;:::o;44517:32::-;;;;;;;;;;;;;:::o;44260:74::-;;;:::o;31202:84::-;31251:5;31276:2;31269:9;;31202:84;:::o;43519:37::-;;;;:::o;43750:71::-;;;;:::o;44682:33::-;;;;:::o;43710:29::-;;;;:::o;46552:225::-;16635:13;:11;:13::i;:::-;46673:9:::1;46668:102;46692:5;;:12;;46688:1;:16;46668:102;;;46753:5;46726:14;:24;46741:5;;46747:1;46741:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46726:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;46706:3;;;;;;;46668:102;;;;46552:225:::0;;;:::o;43602:27::-;;;;:::o;31513:118::-;31578:7;31605:9;:18;31615:7;31605:18;;;;;;;;;;;;;;;;31598:25;;31513:118;;;:::o;17424:103::-;16635:13;:11;:13::i;:::-;17489:30:::1;17516:1;17489:18;:30::i;:::-;17424:103::o:0;43675:28::-;;;;:::o;44380:33::-;;;:::o;16749:87::-;16795:7;16822:6;;;;;;;;;;;16815:13;;16749:87;:::o;43430:36::-;;;;:::o;43930:71::-;;;;;;;;;;;;;:::o;43636:32::-;;;;:::o;30459:95::-;30506:13;30539:7;30532:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30459:95;:::o;43565:30::-;;;;:::o;45926:306::-;45989:7;46009:13;46130:19;46140:8;46130:9;:19::i;:::-;46096:18;46106:7;46096:9;:18::i;:::-;46054:26;46072:6;46054:9;:26::i;:::-;46025:13;:11;:13::i;:::-;:55;;;;:::i;:::-;:89;;;;:::i;:::-;:124;;;;:::i;:::-;46009:140;;46215:8;46207:5;:16;;;;:::i;:::-;46181:21;46170:8;:32;;;;:::i;:::-;46169:55;;;;:::i;:::-;46162:62;;;45926:306;;;:::o;44603:29::-;;;;:::o;46785:450::-;16635:13;:11;:13::i;:::-;46985:3:::1;46973:8;:15;;46965:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;47051:3;47028:19;:26;;47020:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;47107:19;47089:15;:37;;;;47156:8;47137:16;:27;;;;47188:4;47175:10;:17;;;;47219:8;47203:13;;:24;;;;;;;;;;;;;;;;;;46785:450:::0;;;;:::o;31836:182::-;31905:4;31922:13;31938:12;:10;:12::i;:::-;31922:28;;31961:27;31971:5;31978:2;31982:5;31961:9;:27::i;:::-;32006:4;31999:11;;;31836:182;;;;:::o;46400:144::-;16635:13;:11;:13::i;:::-;46486:5:::1;46469:22;;:13;;;;;;;;;;;:22;;::::0;46461:43:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;46531:5;46515:13;;:21;;;;;;;;;;;;;;;;;;46400:144:::0;:::o;47243:313::-;16635:13;:11;:13::i;:::-;47329:1:::1;47312:19;;:5;:19;;::::0;47308:241:::1;;47356:12;:10;:12::i;:::-;47348:30;;:53;47379:21;47348:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47308:241;;;47434:12;47456:5;47434:28;;47477:5;:14;;;47492:12;:10;:12::i;:::-;47506:5;:15;;;47530:4;47506:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47477:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47419:130;47308:241;47243:313:::0;:::o;43473:39::-;;;;:::o;46240:115::-;46300:4;46324:14;:23;46339:7;46324:23;;;;;;;;;;;;;;;;;;;;;;;;;46317:30;;46240:115;;;:::o;32081:142::-;32161:7;32188:11;:18;32200:5;32188:18;;;;;;;;;;;;;;;:27;32207:7;32188:27;;;;;;;;;;;;;;;;32181:34;;32081:142;;;;:::o;44341:32::-;;;:::o;47801:809::-;16635:13;:11;:13::i;:::-;47863:19:::1;47895:1;47885:9;:11;;;;:::i;:::-;47863:33;;47907:21;47931:20;47907:44;;47962:53;47979:4;47994:6;;;;;;;;;;;48012:1;48003:11;47962:8;:53::i;:::-;48026:6;;;;;;;;;;;:22;;;48056:11;48091:4;48111:13;48139:1;48155::::0;48171:12:::1;:10;:12::i;:::-;48198:15;48026:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48237:20;48260:48;48275:4;48281:11;48302:4;48260:14;:48::i;:::-;48237:71;;48326:4;48319:20;;;48348:6;;;;;;;;;;;48357:12;48319:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;48381:6;;;;;;;;;;;:19;;;48423:4;48443;48462:13;48490:12;48517:1;48533::::0;48549:12:::1;:10;:12::i;:::-;48576:15;48381:221;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47852:758;;;47801:809::o:0;17682:220::-;16635:13;:11;:13::i;:::-;17787:1:::1;17767:22;;:8;:22;;::::0;17763:93:::1;;17841:1;17813:31;;;;;;;;;;;:::i;:::-;;;;;;;;17763:93;17866:28;17885:8;17866:18;:28::i;:::-;17682:220:::0;:::o;14758:98::-;14811:7;14838:10;14831:17;;14758:98;:::o;37409:130::-;37494:37;37503:5;37510:7;37519:5;37526:4;37494:8;:37::i;:::-;37409:130;;;:::o;39141:487::-;39241:24;39268:25;39278:5;39285:7;39268:9;:25::i;:::-;39241:52;;39328:17;39308:16;:37;39304:317;;39385:5;39366:16;:24;39362:132;;;39445:7;39454:16;39472:5;39418:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;39362:132;39537:57;39546:5;39553:7;39581:5;39562:16;:24;39588:5;39537:8;:57::i;:::-;39304:317;39230:398;39141:487;;;:::o;48626:1008::-;48777:4;48761:21;;:4;:21;;;;:65;;;;;48816:10;;48786:27;48806:6;48786:15;48796:4;48786:9;:15::i;:::-;:19;;:27;;;;:::i;:::-;:40;48761:65;48758:137;;;48852:31;48872:10;;48852:15;48862:4;48852:9;:15::i;:::-;:19;;:31;;;;:::i;:::-;48843:40;;48758:137;48924:4;48911:17;;:9;:17;;;:41;;;;;48948:4;48932:20;;:12;:10;:12::i;:::-;:20;;;48911:41;:64;;;;;48970:4;48956:19;;:2;:19;;;48911:64;48907:143;;;48992:25;49004:4;49010:6;48992:11;:25::i;:::-;49032:7;;48907:143;49075:18;49088:4;49075:12;:18::i;:::-;49074:19;:40;;;;;49098:16;49111:2;49098:12;:16::i;:::-;49097:17;49074:40;49070:511;;;49139:13;;;;;;;;;;;49131:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49184:11;49220:7;;49208:8;;49199:6;:17;;;;:::i;:::-;49198:29;;;;:::i;:::-;49184:43;;49242:41;49258:4;49272;49279:3;49242:15;:41::i;:::-;49308:3;49298:13;;;;;:::i;:::-;;;49332:9;:13;49342:2;49332:13;;;;;;;;;;;;;;;;;;;;;;;;;49328:242;;;49366:21;:19;:21::i;:::-;49411:7;;;;;;;;;;;49406:149;;49453:4;49443:7;;:14;;;;;;;;;;;;;;;;;;49480:17;:15;:17::i;:::-;49530:5;49520:7;;:15;;;;;;;;;;;;;;;;;;49406:149;49328:242;49116:465;49070:511;49593:33;49609:4;49615:2;49619:6;49593:15;:33::i;:::-;48626:1008;;;;:::o;16914:166::-;16985:12;:10;:12::i;:::-;16974:23;;:7;:5;:7::i;:::-;:23;;;16970:103;;17048:12;:10;:12::i;:::-;17021:40;;;;;;;;;;;:::i;:::-;;;;;;;;16970:103;16914:166::o;18062:191::-;18136:16;18155:6;;;;;;;;;;;18136:25;;18181:8;18172:6;;:17;;;;;;;;;;;;;;;;;;18236:8;18205:40;;18226:8;18205:40;;;;;;;;;;;;18125:128;18062:191;:::o;52280:619::-;52398:17;52428:21;52466:1;52452:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52428:40;;52489:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52479:4;52484:1;52479:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;52523:5;52513:4;52518:1;52513:7;;;;;;;;:::i;:::-;;;;;;;:15;;;;;;;;;;;52541:12;52563:5;52541:28;;52580:21;52604:5;:15;;;52628:4;52604:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52580:54;;52645:6;;;;;;;;;;;:57;;;52724:6;52742:1;52745:4;52751:2;52755:15;52645:126;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52782:20;52805:5;:15;;;52829:4;52805:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52782:53;;52860:31;52877:13;52860:12;:16;;:31;;;;:::i;:::-;52848:43;;52417:482;;;;52280:619;;;;;:::o;38406:443::-;38536:1;38519:19;;:5;:19;;;38515:91;;38591:1;38562:32;;;;;;;;;;;:::i;:::-;;;;;;;;38515:91;38639:1;38620:21;;:7;:21;;;38616:92;;38693:1;38665:31;;;;;;;;;;;:::i;:::-;;;;;;;;38616:92;38748:5;38718:11;:18;38730:5;38718:18;;;;;;;;;;;;;;;:27;38737:7;38718:27;;;;;;;;;;;;;;;:35;;;;38768:9;38764:78;;;38815:7;38799:31;;38808:5;38799:31;;;38824:5;38799:31;;;;;;:::i;:::-;;;;;;;;38764:78;38406:443;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;49642:516::-;49720:13;;;;;;;;;;;49712:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;49777:11;;49767:6;:21;;49759:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49836:11;;;;;;;;;;;49828:19;;:4;:19;;;49824:179;;49864:11;49899:8;;49888:7;;49879:6;:16;;;;:::i;:::-;49878:29;;;;:::i;:::-;49864:43;;49922:41;49938:4;49952;49959:3;49922:15;:41::i;:::-;49988:3;49978:13;;;;;:::i;:::-;;;49849:154;49824:179;50013:14;50030:22;50045:6;50030:14;:22::i;:::-;50013:39;;50063:46;50079:4;50093:6;50102;50063:15;:46::i;:::-;50128:4;50120:22;;:30;50143:6;50120:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49701:457;49642:516;;:::o;33976:316::-;34084:1;34068:18;;:4;:18;;;34064:88;;34137:1;34110:30;;;;;;;;;;;:::i;:::-;;;;;;;;34064:88;34180:1;34166:16;;:2;:16;;;34162:88;;34235:1;34206:32;;;;;;;;;;;:::i;:::-;;;;;;;;34162:88;34260:24;34268:4;34274:2;34278:5;34260:7;:24::i;:::-;33976:316;;;:::o;50166:205::-;50256:15;;50239:14;;50221:15;:32;;;;:::i;:::-;:50;50217:147;;;50288:17;50297:7;50288:8;:17::i;:::-;;50337:15;50320:14;:32;;;;50217:147;50166:205::o;50964:707::-;51010:15;51028:24;51046:4;51028:9;:24::i;:::-;51010:42;;51079:10;;51069:7;:20;51065:599;;;51118:17;51138:23;51153:7;51138:14;:23::i;:::-;51118:43;;51191:1;51179:9;:13;51176:477;;;51221:13;;;;;;;;;;;51213:31;;:110;51296:8;;51280:12;;51268:9;:24;;;;:::i;:::-;51267:37;;;;:::i;:::-;51213:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51352:17;;;;;;;;;;;51344:35;;:110;51427:8;;51415;;51403:9;:20;;;;:::i;:::-;51402:33;;;;:::i;:::-;51344:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51475:162;51520:4;51572:8;;51561:7;;51549:9;:19;;;;:::i;:::-;51548:32;;;;:::i;:::-;51611:6;51475:14;:162::i;:::-;;51176:477;51091:573;51065:599;50999:672;50964:707::o;34616:1135::-;34722:1;34706:18;;:4;:18;;;34702:552;;34860:5;34844:12;;:21;;;;;;;:::i;:::-;;;;;;;;34702:552;;;34898:19;34920:9;:15;34930:4;34920:15;;;;;;;;;;;;;;;;34898:37;;34968:5;34954:11;:19;34950:117;;;35026:4;35032:11;35045:5;35001:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;34950:117;35222:5;35208:11;:19;35190:9;:15;35200:4;35190:15;;;;;;;;;;;;;;;:37;;;;34883:371;34702:552;35284:1;35270:16;;:2;:16;;;35266:435;;35452:5;35436:12;;:21;;;;;;;;;;;35266:435;;;35669:5;35652:9;:13;35662:2;35652:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;35266:435;35733:2;35718:25;;35727:4;35718:25;;;35737:5;35718:25;;;;;;:::i;:::-;;;;;;;;34616:1135;;;:::o;50379:577::-;50430:4;50447:28;50478:16;50488:5;50478:9;:16::i;:::-;50447:47;;50505:20;50585:10;;50552:16;;50529:20;:39;;;;:::i;:::-;50528:67;;;;:::i;:::-;50505:90;;50627:1;50612:12;:16;50608:318;;;50645:53;50661:5;50676:6;50685:12;50645:15;:53::i;:::-;50726:5;50713:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50759:129;50788:20;50827:12;50858:15;50759:129;;;;;;;;:::i;:::-;;;;;;;;50910:4;50903:11;;;;;;50608:318;50943:5;50936:12;;;;50379:577;;;;:::o;51679:591::-;51741:17;51771:21;51809:1;51795:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51771:40;;51840:4;51822;51827:1;51822:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;51866:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51856:4;51861:1;51856:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;51892:24;51919:21;51892:48;;51951:6;;;;;;;;;;;:57;;;52023:11;52049:1;52065:4;52092;52112:15;51951:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52151:23;52177:21;52151:47;;52225:37;52245:16;52225:15;:19;;:37;;;;:::i;:::-;52213:49;;51760:510;;;51679:591;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:329::-;3398:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:119;;;3453:79;;:::i;:::-;3415:119;3573:1;3598:53;3643:7;3634:6;3623:9;3619:22;3598:53;:::i;:::-;3588:63;;3544:117;3339:329;;;;:::o;3674:118::-;3761:24;3779:5;3761:24;:::i;:::-;3756:3;3749:37;3674:118;;:::o;3798:222::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;3798:222;;;;:::o;4026:117::-;4135:1;4132;4125:12;4149:117;4258:1;4255;4248:12;4272:117;4381:1;4378;4371:12;4412:568;4485:8;4495:6;4545:3;4538:4;4530:6;4526:17;4522:27;4512:122;;4553:79;;:::i;:::-;4512:122;4666:6;4653:20;4643:30;;4696:18;4688:6;4685:30;4682:117;;;4718:79;;:::i;:::-;4682:117;4832:4;4824:6;4820:17;4808:29;;4886:3;4878:4;4870:6;4866:17;4856:8;4852:32;4849:41;4846:128;;;4893:79;;:::i;:::-;4846:128;4412:568;;;;;:::o;5003:::-;5076:8;5086:6;5136:3;5129:4;5121:6;5117:17;5113:27;5103:122;;5144:79;;:::i;:::-;5103:122;5257:6;5244:20;5234:30;;5287:18;5279:6;5276:30;5273:117;;;5309:79;;:::i;:::-;5273:117;5423:4;5415:6;5411:17;5399:29;;5477:3;5469:4;5461:6;5457:17;5447:8;5443:32;5440:41;5437:128;;;5484:79;;:::i;:::-;5437:128;5003:568;;;;;:::o;5577:934::-;5699:6;5707;5715;5723;5772:2;5760:9;5751:7;5747:23;5743:32;5740:119;;;5778:79;;:::i;:::-;5740:119;5926:1;5915:9;5911:17;5898:31;5956:18;5948:6;5945:30;5942:117;;;5978:79;;:::i;:::-;5942:117;6091:80;6163:7;6154:6;6143:9;6139:22;6091:80;:::i;:::-;6073:98;;;;5869:312;6248:2;6237:9;6233:18;6220:32;6279:18;6271:6;6268:30;6265:117;;;6301:79;;:::i;:::-;6265:117;6414:80;6486:7;6477:6;6466:9;6462:22;6414:80;:::i;:::-;6396:98;;;;6191:313;5577:934;;;;;;;:::o;6517:619::-;6594:6;6602;6610;6659:2;6647:9;6638:7;6634:23;6630:32;6627:119;;;6665:79;;:::i;:::-;6627:119;6785:1;6810:53;6855:7;6846:6;6835:9;6831:22;6810:53;:::i;:::-;6800:63;;6756:117;6912:2;6938:53;6983:7;6974:6;6963:9;6959:22;6938:53;:::i;:::-;6928:63;;6883:118;7040:2;7066:53;7111:7;7102:6;7091:9;7087:22;7066:53;:::i;:::-;7056:63;;7011:118;6517:619;;;;;:::o;7142:118::-;7229:24;7247:5;7229:24;:::i;:::-;7224:3;7217:37;7142:118;;:::o;7266:222::-;7359:4;7397:2;7386:9;7382:18;7374:26;;7410:71;7478:1;7467:9;7463:17;7454:6;7410:71;:::i;:::-;7266:222;;;;:::o;7494:86::-;7529:7;7569:4;7562:5;7558:16;7547:27;;7494:86;;;:::o;7586:112::-;7669:22;7685:5;7669:22;:::i;:::-;7664:3;7657:35;7586:112;;:::o;7704:214::-;7793:4;7831:2;7820:9;7816:18;7808:26;;7844:67;7908:1;7897:9;7893:17;7884:6;7844:67;:::i;:::-;7704:214;;;;:::o;7924:116::-;7994:21;8009:5;7994:21;:::i;:::-;7987:5;7984:32;7974:60;;8030:1;8027;8020:12;7974:60;7924:116;:::o;8046:133::-;8089:5;8127:6;8114:20;8105:29;;8143:30;8167:5;8143:30;:::i;:::-;8046:133;;;;:::o;8185:698::-;8277:6;8285;8293;8342:2;8330:9;8321:7;8317:23;8313:32;8310:119;;;8348:79;;:::i;:::-;8310:119;8496:1;8485:9;8481:17;8468:31;8526:18;8518:6;8515:30;8512:117;;;8548:79;;:::i;:::-;8512:117;8661:80;8733:7;8724:6;8713:9;8709:22;8661:80;:::i;:::-;8643:98;;;;8439:312;8790:2;8816:50;8858:7;8849:6;8838:9;8834:22;8816:50;:::i;:::-;8806:60;;8761:115;8185:698;;;;;:::o;8889:329::-;8948:6;8997:2;8985:9;8976:7;8972:23;8968:32;8965:119;;;9003:79;;:::i;:::-;8965:119;9123:1;9148:53;9193:7;9184:6;9173:9;9169:22;9148:53;:::i;:::-;9138:63;;9094:117;8889:329;;;;:::o;9224:759::-;9307:6;9315;9323;9331;9380:3;9368:9;9359:7;9355:23;9351:33;9348:120;;;9387:79;;:::i;:::-;9348:120;9507:1;9532:53;9577:7;9568:6;9557:9;9553:22;9532:53;:::i;:::-;9522:63;;9478:117;9634:2;9660:53;9705:7;9696:6;9685:9;9681:22;9660:53;:::i;:::-;9650:63;;9605:118;9762:2;9788:53;9833:7;9824:6;9813:9;9809:22;9788:53;:::i;:::-;9778:63;;9733:118;9890:2;9916:50;9958:7;9949:6;9938:9;9934:22;9916:50;:::i;:::-;9906:60;;9861:115;9224:759;;;;;;;:::o;9989:323::-;10045:6;10094:2;10082:9;10073:7;10069:23;10065:32;10062:119;;;10100:79;;:::i;:::-;10062:119;10220:1;10245:50;10287:7;10278:6;10267:9;10263:22;10245:50;:::i;:::-;10235:60;;10191:114;9989:323;;;;:::o;10318:474::-;10386:6;10394;10443:2;10431:9;10422:7;10418:23;10414:32;10411:119;;;10449:79;;:::i;:::-;10411:119;10569:1;10594:53;10639:7;10630:6;10619:9;10615:22;10594:53;:::i;:::-;10584:63;;10540:117;10696:2;10722:53;10767:7;10758:6;10747:9;10743:22;10722:53;:::i;:::-;10712:63;;10667:118;10318:474;;;;;:::o;10798:180::-;10846:77;10843:1;10836:88;10943:4;10940:1;10933:15;10967:4;10964:1;10957:15;10984:320;11028:6;11065:1;11059:4;11055:12;11045:22;;11112:1;11106:4;11102:12;11133:18;11123:81;;11189:4;11181:6;11177:17;11167:27;;11123:81;11251:2;11243:6;11240:14;11220:18;11217:38;11214:84;;11270:18;;:::i;:::-;11214:84;11035:269;10984:320;;;:::o;11310:180::-;11358:77;11355:1;11348:88;11455:4;11452:1;11445:15;11479:4;11476:1;11469:15;11496:180;11544:77;11541:1;11534:88;11641:4;11638:1;11631:15;11665:4;11662:1;11655:15;11682:194;11722:4;11742:20;11760:1;11742:20;:::i;:::-;11737:25;;11776:20;11794:1;11776:20;:::i;:::-;11771:25;;11820:1;11817;11813:9;11805:17;;11844:1;11838:4;11835:11;11832:37;;;11849:18;;:::i;:::-;11832:37;11682:194;;;;:::o;11882:191::-;11922:3;11941:20;11959:1;11941:20;:::i;:::-;11936:25;;11975:20;11993:1;11975:20;:::i;:::-;11970:25;;12018:1;12015;12011:9;12004:16;;12039:3;12036:1;12033:10;12030:36;;;12046:18;;:::i;:::-;12030:36;11882:191;;;;:::o;12079:410::-;12119:7;12142:20;12160:1;12142:20;:::i;:::-;12137:25;;12176:20;12194:1;12176:20;:::i;:::-;12171:25;;12231:1;12228;12224:9;12253:30;12271:11;12253:30;:::i;:::-;12242:41;;12432:1;12423:7;12419:15;12416:1;12413:22;12393:1;12386:9;12366:83;12343:139;;12462:18;;:::i;:::-;12343:139;12127:362;12079:410;;;;:::o;12495:180::-;12543:77;12540:1;12533:88;12640:4;12637:1;12630:15;12664:4;12661:1;12654:15;12681:185;12721:1;12738:20;12756:1;12738:20;:::i;:::-;12733:25;;12772:20;12790:1;12772:20;:::i;:::-;12767:25;;12811:1;12801:35;;12816:18;;:::i;:::-;12801:35;12858:1;12855;12851:9;12846:14;;12681:185;;;;:::o;12872:166::-;13012:18;13008:1;13000:6;12996:14;12989:42;12872:166;:::o;13044:366::-;13186:3;13207:67;13271:2;13266:3;13207:67;:::i;:::-;13200:74;;13283:93;13372:3;13283:93;:::i;:::-;13401:2;13396:3;13392:12;13385:19;;13044:366;;;:::o;13416:419::-;13582:4;13620:2;13609:9;13605:18;13597:26;;13669:9;13663:4;13659:20;13655:1;13644:9;13640:17;13633:47;13697:131;13823:4;13697:131;:::i;:::-;13689:139;;13416:419;;;:::o;13841:169::-;13981:21;13977:1;13969:6;13965:14;13958:45;13841:169;:::o;14016:366::-;14158:3;14179:67;14243:2;14238:3;14179:67;:::i;:::-;14172:74;;14255:93;14344:3;14255:93;:::i;:::-;14373:2;14368:3;14364:12;14357:19;;14016:366;;;:::o;14388:419::-;14554:4;14592:2;14581:9;14577:18;14569:26;;14641:9;14635:4;14631:20;14627:1;14616:9;14612:17;14605:47;14669:131;14795:4;14669:131;:::i;:::-;14661:139;;14388:419;;;:::o;14813:158::-;14953:10;14949:1;14941:6;14937:14;14930:34;14813:158;:::o;14977:365::-;15119:3;15140:66;15204:1;15199:3;15140:66;:::i;:::-;15133:73;;15215:93;15304:3;15215:93;:::i;:::-;15333:2;15328:3;15324:12;15317:19;;14977:365;;;:::o;15348:419::-;15514:4;15552:2;15541:9;15537:18;15529:26;;15601:9;15595:4;15591:20;15587:1;15576:9;15572:17;15565:47;15629:131;15755:4;15629:131;:::i;:::-;15621:139;;15348:419;;;:::o;15773:143::-;15830:5;15861:6;15855:13;15846:22;;15877:33;15904:5;15877:33;:::i;:::-;15773:143;;;;:::o;15922:351::-;15992:6;16041:2;16029:9;16020:7;16016:23;16012:32;16009:119;;;16047:79;;:::i;:::-;16009:119;16167:1;16192:64;16248:7;16239:6;16228:9;16224:22;16192:64;:::i;:::-;16182:74;;16138:128;15922:351;;;;:::o;16279:332::-;16400:4;16438:2;16427:9;16423:18;16415:26;;16451:71;16519:1;16508:9;16504:17;16495:6;16451:71;:::i;:::-;16532:72;16600:2;16589:9;16585:18;16576:6;16532:72;:::i;:::-;16279:332;;;;;:::o;16617:137::-;16671:5;16702:6;16696:13;16687:22;;16718:30;16742:5;16718:30;:::i;:::-;16617:137;;;;:::o;16760:345::-;16827:6;16876:2;16864:9;16855:7;16851:23;16847:32;16844:119;;;16882:79;;:::i;:::-;16844:119;17002:1;17027:61;17080:7;17071:6;17060:9;17056:22;17027:61;:::i;:::-;17017:71;;16973:125;16760:345;;;;:::o;17111:85::-;17156:7;17185:5;17174:16;;17111:85;;;:::o;17202:60::-;17230:3;17251:5;17244:12;;17202:60;;;:::o;17268:158::-;17326:9;17359:61;17377:42;17386:32;17412:5;17386:32;:::i;:::-;17377:42;:::i;:::-;17359:61;:::i;:::-;17346:74;;17268:158;;;:::o;17432:147::-;17527:45;17566:5;17527:45;:::i;:::-;17522:3;17515:58;17432:147;;:::o;17585:807::-;17834:4;17872:3;17861:9;17857:19;17849:27;;17886:71;17954:1;17943:9;17939:17;17930:6;17886:71;:::i;:::-;17967:72;18035:2;18024:9;18020:18;18011:6;17967:72;:::i;:::-;18049:80;18125:2;18114:9;18110:18;18101:6;18049:80;:::i;:::-;18139;18215:2;18204:9;18200:18;18191:6;18139:80;:::i;:::-;18229:73;18297:3;18286:9;18282:19;18273:6;18229:73;:::i;:::-;18312;18380:3;18369:9;18365:19;18356:6;18312:73;:::i;:::-;17585:807;;;;;;;;;:::o;18398:663::-;18486:6;18494;18502;18551:2;18539:9;18530:7;18526:23;18522:32;18519:119;;;18557:79;;:::i;:::-;18519:119;18677:1;18702:64;18758:7;18749:6;18738:9;18734:22;18702:64;:::i;:::-;18692:74;;18648:128;18815:2;18841:64;18897:7;18888:6;18877:9;18873:22;18841:64;:::i;:::-;18831:74;;18786:129;18954:2;18980:64;19036:7;19027:6;19016:9;19012:22;18980:64;:::i;:::-;18970:74;;18925:129;18398:663;;;;;:::o;19067:1029::-;19372:4;19410:3;19399:9;19395:19;19387:27;;19424:71;19492:1;19481:9;19477:17;19468:6;19424:71;:::i;:::-;19505:72;19573:2;19562:9;19558:18;19549:6;19505:72;:::i;:::-;19587;19655:2;19644:9;19640:18;19631:6;19587:72;:::i;:::-;19669;19737:2;19726:9;19722:18;19713:6;19669:72;:::i;:::-;19751:81;19827:3;19816:9;19812:19;19803:6;19751:81;:::i;:::-;19842;19918:3;19907:9;19903:19;19894:6;19842:81;:::i;:::-;19933:73;20001:3;19990:9;19986:19;19977:6;19933:73;:::i;:::-;20016;20084:3;20073:9;20069:19;20060:6;20016:73;:::i;:::-;19067:1029;;;;;;;;;;;:::o;20102:442::-;20251:4;20289:2;20278:9;20274:18;20266:26;;20302:71;20370:1;20359:9;20355:17;20346:6;20302:71;:::i;:::-;20383:72;20451:2;20440:9;20436:18;20427:6;20383:72;:::i;:::-;20465;20533:2;20522:9;20518:18;20509:6;20465:72;:::i;:::-;20102:442;;;;;;:::o;20550:160::-;20690:12;20686:1;20678:6;20674:14;20667:36;20550:160;:::o;20716:366::-;20858:3;20879:67;20943:2;20938:3;20879:67;:::i;:::-;20872:74;;20955:93;21044:3;20955:93;:::i;:::-;21073:2;21068:3;21064:12;21057:19;;20716:366;;;:::o;21088:419::-;21254:4;21292:2;21281:9;21277:18;21269:26;;21341:9;21335:4;21331:20;21327:1;21316:9;21312:17;21305:47;21369:131;21495:4;21369:131;:::i;:::-;21361:139;;21088:419;;;:::o;21513:180::-;21561:77;21558:1;21551:88;21658:4;21655:1;21648:15;21682:4;21679:1;21672:15;21699:143;21756:5;21787:6;21781:13;21772:22;;21803:33;21830:5;21803:33;:::i;:::-;21699:143;;;;:::o;21848:351::-;21918:6;21967:2;21955:9;21946:7;21942:23;21938:32;21935:119;;;21973:79;;:::i;:::-;21935:119;22093:1;22118:64;22174:7;22165:6;22154:9;22150:22;22118:64;:::i;:::-;22108:74;;22064:128;21848:351;;;;:::o;22205:114::-;22272:6;22306:5;22300:12;22290:22;;22205:114;;;:::o;22325:184::-;22424:11;22458:6;22453:3;22446:19;22498:4;22493:3;22489:14;22474:29;;22325:184;;;;:::o;22515:132::-;22582:4;22605:3;22597:11;;22635:4;22630:3;22626:14;22618:22;;22515:132;;;:::o;22653:108::-;22730:24;22748:5;22730:24;:::i;:::-;22725:3;22718:37;22653:108;;:::o;22767:179::-;22836:10;22857:46;22899:3;22891:6;22857:46;:::i;:::-;22935:4;22930:3;22926:14;22912:28;;22767:179;;;;:::o;22952:113::-;23022:4;23054;23049:3;23045:14;23037:22;;22952:113;;;:::o;23101:732::-;23220:3;23249:54;23297:5;23249:54;:::i;:::-;23319:86;23398:6;23393:3;23319:86;:::i;:::-;23312:93;;23429:56;23479:5;23429:56;:::i;:::-;23508:7;23539:1;23524:284;23549:6;23546:1;23543:13;23524:284;;;23625:6;23619:13;23652:63;23711:3;23696:13;23652:63;:::i;:::-;23645:70;;23738:60;23791:6;23738:60;:::i;:::-;23728:70;;23584:224;23571:1;23568;23564:9;23559:14;;23524:284;;;23528:14;23824:3;23817:10;;23225:608;;;23101:732;;;;:::o;23839:720::-;24074:4;24112:3;24101:9;24097:19;24089:27;;24126:79;24202:1;24191:9;24187:17;24178:6;24126:79;:::i;:::-;24252:9;24246:4;24242:20;24237:2;24226:9;24222:18;24215:48;24280:108;24383:4;24374:6;24280:108;:::i;:::-;24272:116;;24398:72;24466:2;24455:9;24451:18;24442:6;24398:72;:::i;:::-;24480;24548:2;24537:9;24533:18;24524:6;24480:72;:::i;:::-;23839:720;;;;;;;:::o;24565:160::-;24705:12;24701:1;24693:6;24689:14;24682:36;24565:160;:::o;24731:366::-;24873:3;24894:67;24958:2;24953:3;24894:67;:::i;:::-;24887:74;;24970:93;25059:3;24970:93;:::i;:::-;25088:2;25083:3;25079:12;25072:19;;24731:366;;;:::o;25103:419::-;25269:4;25307:2;25296:9;25292:18;25284:26;;25356:9;25350:4;25346:20;25342:1;25331:9;25327:17;25320:47;25384:131;25510:4;25384:131;:::i;:::-;25376:139;;25103:419;;;:::o;25528:442::-;25677:4;25715:2;25704:9;25700:18;25692:26;;25728:71;25796:1;25785:9;25781:17;25772:6;25728:71;:::i;:::-;25809:72;25877:2;25866:9;25862:18;25853:6;25809:72;:::i;:::-;25891;25959:2;25948:9;25944:18;25935:6;25891:72;:::i;:::-;25528:442;;;;;;:::o;25976:831::-;26239:4;26277:3;26266:9;26262:19;26254:27;;26291:71;26359:1;26348:9;26344:17;26335:6;26291:71;:::i;:::-;26372:80;26448:2;26437:9;26433:18;26424:6;26372:80;:::i;:::-;26499:9;26493:4;26489:20;26484:2;26473:9;26469:18;26462:48;26527:108;26630:4;26621:6;26527:108;:::i;:::-;26519:116;;26645:72;26713:2;26702:9;26698:18;26689:6;26645:72;:::i;:::-;26727:73;26795:3;26784:9;26780:19;26771:6;26727:73;:::i;:::-;25976:831;;;;;;;;:::o

Swarm Source

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