ETH Price: $3,309.79 (+1.05%)
Gas: 4 Gwei

Token

Reflect Dao (RFD)
 

Overview

Max Total Supply

1,000,000 RFD

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
9,027.007295 RFD

Value
$0.00
0xba03eca6b692532648c4da21840fb9af578147a2
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RDAO

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-05
*/

// Sources flattened with hardhat v2.1.2 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/math/[email protected]

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 no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/utils/[email protected]

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


// File @openzeppelin/contracts/access/[email protected]

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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


// File @openzeppelin/contracts/utils/introspection/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC1155/[email protected]

pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}


// File hardhat/[email protected]

pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}


// File contracts/RDAO.sol

pragma solidity ^0.8.0;






contract RDAO is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

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

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100 * 10**4 * 10**6;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Reflect Dao";
    string private _symbol = "RFD";
    uint8 private _decimals = 6;

    uint256 priceFactor = 10**6;

    mapping(address => bool) private _isManager;

    address _lpToken;
    IERC20 _usdcToken;
    IERC1155 _nftToken;

    uint256 public vipTokenId = 1;
    uint256 public guardTokenId = 2;

    constructor(IERC20 _usdcAddr) {
        _rOwned[_msgSender()] = _rTotal;
        _usdcToken = _usdcAddr;
        addManager(_msgSender());
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    modifier onlyManager() {
        require(_isManager[msg.sender], "Not a manager");
        _;
    }

    modifier onlyGuardian() {
        require(
            _nftToken.balanceOf(msg.sender, guardTokenId) > 0,
            "Not a guardian"
        );
        _;
    }

    function setLpToken(address _lpAddr) public onlyOwner {
        _lpToken = _lpAddr;
    }

    function setNFTToken(IERC1155 _nftAddr) public onlyOwner {
        _nftToken = _nftAddr;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account])
            return _tOwned[account].mul(priceFactor).div(10**6);
        return
            tokenFromReflection(_rOwned[account]).mul(priceFactor).div(10**6);
    }

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyManager {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyManager {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function addManager(address account) public onlyOwner() {
        _isManager[account] = true;
    }

    function removeManager(address account) external onlyOwner() {
        _isManager[account] = false;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount)
        private
        pure
        returns (uint256, uint256)
    {
        uint256 tFee = tAmount.div(100).mul(3);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function rebase() public onlyGuardian {
        uint256 usdcBalance = _usdcToken.balanceOf(_lpToken);
        uint256 tokenBalance = balanceOf(_lpToken);

        if (usdcBalance > tokenBalance) {
            priceFactor = priceFactor
                .mul(10**6 + 2 * 10**4)
                .div(10**6)
                .mul(tokenBalance)
                .div(usdcBalance);
        } else if (usdcBalance < tokenBalance) {
            priceFactor = priceFactor
                .mul(10**6 - 2 * 10**4)
                .div(10**6)
                .mul(tokenBalance)
                .div(usdcBalance);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_usdcAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"guardTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpAddr","type":"address"}],"name":"setLpToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"_nftAddr","type":"address"}],"name":"setNFTToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vipTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405264e8d4a5100060001962000019919062000684565b600019620000289190620005c1565b6006556040518060400160405280600b81526020017f5265666c6563742044616f00000000000000000000000000000000000000000081525060089080519060200190620000789291906200042b565b506040518060400160405280600381526020017f524644000000000000000000000000000000000000000000000000000000000081525060099080519060200190620000c69291906200042b565b506006600a60006101000a81548160ff021916908360ff160217905550620f4240600b55600160105560026011553480156200010157600080fd5b50604051620046ac380380620046ac8339818101604052810190620001279190620004f2565b6000620001396200031060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460016000620001ee6200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028d620002816200031060201b60201c565b6200031860201b60201c565b6200029d6200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef64e8d4a5100060405162000301919062000593565b60405180910390a35062000763565b600033905090565b620003286200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200034e6200040260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200039e9062000571565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000439906200064e565b90600052602060002090601f0160209004810192826200045d5760008555620004a9565b82601f106200047857805160ff1916838001178555620004a9565b82800160010185558215620004a9579182015b82811115620004a85782518255916020019190600101906200048b565b5b509050620004b89190620004bc565b5090565b5b80821115620004d7576000816000905550600101620004bd565b5090565b600081519050620004ec8162000749565b92915050565b6000602082840312156200050557600080fd5b60006200051584828501620004db565b91505092915050565b60006200052d602083620005b0565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6200056b8162000644565b82525050565b600060208201905081810360008301526200058c816200051e565b9050919050565b6000602082019050620005aa600083018462000560565b92915050565b600082825260208201905092915050565b6000620005ce8262000644565b9150620005db8362000644565b925082821015620005f157620005f0620006bc565b5b828203905092915050565b6000620006098262000624565b9050919050565b60006200061d82620005fc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200066757607f821691505b602082108114156200067e576200067d6200071a565b5b50919050565b6000620006918262000644565b91506200069e8362000644565b925082620006b157620006b0620006eb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620007548162000610565b81146200076057600080fd5b50565b613f3980620007736000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063af14052c11610097578063f2cc0c1811610071578063f2cc0c181461051b578063f2fde38b14610537578063f84354f114610553578063fbb8f6931461056f576101c4565b8063af14052c146104b1578063cba0e996146104bb578063dd62ed3e146104eb576101c4565b80639ee933b5116100d35780639ee933b514610419578063a457c2d714610435578063a9059cbb14610465578063ac18de4314610495576101c4565b8063715018a6146103d35780638da5cb5b146103dd57806395d89b41146103fb576101c4565b80632d06177a11610166578063395093511161014057806339509351146103255780634549b03914610355578063608127b11461038557806370a08231146103a3576101c4565b80632d06177a146102bb5780632d838119146102d7578063313ce56714610307576101c4565b806310e71a02116101a257806310e71a021461023357806313114a9d1461024f57806318160ddd1461026d57806323b872dd1461028b576101c4565b8063053ab182146101c957806306fdde03146101e5578063095ea7b314610203575b600080fd5b6101e360048036038101906101de91906133ac565b61058d565b005b6101ed610707565b6040516101fa919061397e565b60405180910390f35b61021d60048036038101906102189190613347565b610799565b60405161022a9190613963565b60405180910390f35b61024d60048036038101906102489190613383565b6107b7565b005b610257610877565b6040516102649190613b40565b60405180910390f35b610275610881565b6040516102829190613b40565b60405180910390f35b6102a560048036038101906102a091906132f8565b61088e565b6040516102b29190613963565b60405180910390f35b6102d560048036038101906102d09190613293565b610967565b005b6102f160048036038101906102ec91906133ac565b610a3e565b6040516102fe9190613b40565b60405180910390f35b61030f610aac565b60405161031c9190613b5b565b60405180910390f35b61033f600480360381019061033a9190613347565b610ac3565b60405161034c9190613963565b60405180910390f35b61036f600480360381019061036a91906133fe565b610b76565b60405161037c9190613b40565b60405180910390f35b61038d610bfb565b60405161039a9190613b40565b60405180910390f35b6103bd60048036038101906103b89190613293565b610c01565b6040516103ca9190613b40565b60405180910390f35b6103db610d3e565b005b6103e5610e78565b6040516103f2919061391f565b60405180910390f35b610403610ea1565b604051610410919061397e565b60405180910390f35b610433600480360381019061042e9190613293565b610f33565b005b61044f600480360381019061044a9190613347565b610ff3565b60405161045c9190613963565b60405180910390f35b61047f600480360381019061047a9190613347565b6110c0565b60405161048c9190613963565b60405180910390f35b6104af60048036038101906104aa9190613293565b6110de565b005b6104b96111b5565b005b6104d560048036038101906104d09190613293565b61146e565b6040516104e29190613963565b60405180910390f35b610505600480360381019061050091906132bc565b6114c4565b6040516105129190613b40565b60405180910390f35b61053560048036038101906105309190613293565b61154b565b005b610551600480360381019061054c9190613293565b6117f6565b005b61056d60048036038101906105689190613293565b61199f565b005b610577611d7d565b6040516105849190613b40565b60405180910390f35b6000610597611d83565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061d90613b20565b60405180910390fd5b600061063183611d8b565b50505050905061068981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106e181600654611de390919063ffffffff16565b6006819055506106fc83600754611df990919063ffffffff16565b600781905550505050565b60606008805461071690613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461074290613d41565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050905090565b60006107ad6107a6611d83565b8484611e0f565b6001905092915050565b6107bf611d83565b73ffffffffffffffffffffffffffffffffffffffff166107dd610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90613aa0565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b600064e8d4a51000905090565b600061089b848484611fda565b61095c846108a7611d83565b61095785604051806060016040528060288152602001613eb760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090d611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123f19092919063ffffffff16565b611e0f565b600190509392505050565b61096f611d83565b73ffffffffffffffffffffffffffffffffffffffff1661098d610e78565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613aa0565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654821115610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c906139c0565b60405180910390fd5b6000610a8f612446565b9050610aa4818461247190919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610b6c610ad0611d83565b84610b678560036000610ae1611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b611e0f565b6001905092915050565b600064e8d4a51000831115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613a40565b60405180910390fd5b81610bdf576000610bd084611d8b565b50505050905080915050610bf5565b6000610bea84611d8b565b505050915050809150505b92915050565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610cc557610cbe620f4240610cb0600b54600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248790919063ffffffff16565b61247190919063ffffffff16565b9050610d39565b610d36620f4240610d28600b54610d1a600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3e565b61248790919063ffffffff16565b61247190919063ffffffff16565b90505b919050565b610d46611d83565b73ffffffffffffffffffffffffffffffffffffffff16610d64610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613aa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610eb090613d41565b80601f0160208091040260200160405190810160405280929190818152602001828054610edc90613d41565b8015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b5050505050905090565b610f3b611d83565b73ffffffffffffffffffffffffffffffffffffffff16610f59610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690613aa0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110b6611000611d83565b846110b185604051806060016040528060258152602001613edf602591396003600061102a611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123f19092919063ffffffff16565b611e0f565b6001905092915050565b60006110d46110cd611d83565b8484611fda565b6001905092915050565b6110e6611d83565b73ffffffffffffffffffffffffffffffffffffffff16611104610e78565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613aa0565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336011546040518363ffffffff1660e01b815260040161121592919061393a565b60206040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126591906133d5565b116112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613a60565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611324919061391f565b60206040518083038186803b15801561133c57600080fd5b505afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906133d5565b905060006113a3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c01565b905080821115611409576113fe826113f0836113e2620f42406113d4620f9060600b5461248790919063ffffffff16565b61247190919063ffffffff16565b61248790919063ffffffff16565b61247190919063ffffffff16565b600b8190555061146a565b80821015611469576114628261145483611446620f4240611438620ef420600b5461248790919063ffffffff16565b61247190919063ffffffff16565b61248790919063ffffffff16565b61247190919063ffffffff16565b600b819055505b5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613a80565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90613a20565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611738576116f4600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117fe611d83565b73ffffffffffffffffffffffffffffffffffffffff1661181c610e78565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613aa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d9906139e0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613a80565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613a20565b60405180910390fd5b60005b600580549050811015611d79578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611b18577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d665760056001600580549050611b739190613c73565b81548110611baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611d2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611d79565b8080611d7190613d73565b915050611aba565b5050565b60105481565b600033905090565b6000806000806000806000611d9f8861249d565b915091506000611dad612446565b90506000806000611dbf8c86866124ef565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60008183611df19190613c73565b905092915050565b60008183611e079190613b92565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690613b00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690613a00565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fcd9190613b40565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613ae0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b1906139a0565b60405180910390fd5b600081116120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490613ac0565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121a05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121b5576121b083838361254d565b6123ec565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122585750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561226d576122688383836127a0565b6123eb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123115750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612326576123218383836129f3565b6123ea565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123dd576123d8838383612bb1565b6123e9565b6123e88383836129f3565b5b5b5b5b505050565b6000838311158290612439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430919061397e565b60405180910390fd5b5082840390509392505050565b6000806000612453612e99565b9150915061246a818361247190919063ffffffff16565b9250505090565b6000818361247f9190613be8565b905092915050565b600081836124959190613c19565b905092915050565b60008060006124c960036124bb60648761247190919063ffffffff16565b61248790919063ffffffff16565b905060006124e08286611de390919063ffffffff16565b90508082935093505050915091565b600080600080612508858861248790919063ffffffff16565b9050600061251f868861248790919063ffffffff16565b905060006125368284611de390919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061255e86611d8b565b945094509450945094506125ba86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061264f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126e484600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061273183826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161278e9190613b40565b60405180910390a35050505050505050565b60008060008060006127b186611d8b565b9450945094509450945061280d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128a282600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061293784600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298483826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e19190613b40565b60405180910390a35050505050505050565b6000806000806000612a0486611d8b565b94509450945094509450612a6085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af584600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b4283826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b9f9190613b40565b60405180910390a35050505050505050565b6000806000806000612bc286611d8b565b94509450945094509450612c1e86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cb385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4882600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ddd84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2a83826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e879190613b40565b60405180910390a35050505050505050565b60008060006006549050600064e8d4a51000905060005b6005805490508110156131ad57826001600060058481548110612efc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130105750816002600060058481548110612fa8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561302a5760065464e8d4a51000945094505050506131ec565b6130e0600160006005848154811061306b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611de390919063ffffffff16565b92506131986002600060058481548110613123577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611de390919063ffffffff16565b915080806131a590613d73565b915050612eb0565b506131c864e8d4a5100060065461247190919063ffffffff16565b8210156131e35760065464e8d4a510009350935050506131ec565b81819350935050505b9091565b61320582600654611de390919063ffffffff16565b60068190555061322081600754611df990919063ffffffff16565b6007819055505050565b60008135905061323981613e5a565b92915050565b60008135905061324e81613e71565b92915050565b60008135905061326381613e88565b92915050565b60008135905061327881613e9f565b92915050565b60008151905061328d81613e9f565b92915050565b6000602082840312156132a557600080fd5b60006132b38482850161322a565b91505092915050565b600080604083850312156132cf57600080fd5b60006132dd8582860161322a565b92505060206132ee8582860161322a565b9150509250929050565b60008060006060848603121561330d57600080fd5b600061331b8682870161322a565b935050602061332c8682870161322a565b925050604061333d86828701613269565b9150509250925092565b6000806040838503121561335a57600080fd5b60006133688582860161322a565b925050602061337985828601613269565b9150509250929050565b60006020828403121561339557600080fd5b60006133a384828501613254565b91505092915050565b6000602082840312156133be57600080fd5b60006133cc84828501613269565b91505092915050565b6000602082840312156133e757600080fd5b60006133f58482850161327e565b91505092915050565b6000806040838503121561341157600080fd5b600061341f85828601613269565b92505060206134308582860161323f565b9150509250929050565b61344381613ca7565b82525050565b61345281613cb9565b82525050565b600061346382613b76565b61346d8185613b81565b935061347d818560208601613d0e565b61348681613e49565b840191505092915050565b600061349e602383613b81565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613504602a83613b81565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b600061356a602683613b81565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135d0602283613b81565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613636601b83613b81565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000613676601f83613b81565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006136b6600e83613b81565b91507f4e6f74206120677561726469616e0000000000000000000000000000000000006000830152602082019050919050565b60006136f6600d83613b81565b91507f4e6f742061206d616e61676572000000000000000000000000000000000000006000830152602082019050919050565b6000613736602083613b81565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613776602983613b81565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137dc602583613b81565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613842602483613b81565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a8602c83613b81565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61390a81613cf7565b82525050565b61391981613d01565b82525050565b6000602082019050613934600083018461343a565b92915050565b600060408201905061394f600083018561343a565b61395c6020830184613901565b9392505050565b60006020820190506139786000830184613449565b92915050565b600060208201905081810360008301526139988184613458565b905092915050565b600060208201905081810360008301526139b981613491565b9050919050565b600060208201905081810360008301526139d9816134f7565b9050919050565b600060208201905081810360008301526139f98161355d565b9050919050565b60006020820190508181036000830152613a19816135c3565b9050919050565b60006020820190508181036000830152613a3981613629565b9050919050565b60006020820190508181036000830152613a5981613669565b9050919050565b60006020820190508181036000830152613a79816136a9565b9050919050565b60006020820190508181036000830152613a99816136e9565b9050919050565b60006020820190508181036000830152613ab981613729565b9050919050565b60006020820190508181036000830152613ad981613769565b9050919050565b60006020820190508181036000830152613af9816137cf565b9050919050565b60006020820190508181036000830152613b1981613835565b9050919050565b60006020820190508181036000830152613b398161389b565b9050919050565b6000602082019050613b556000830184613901565b92915050565b6000602082019050613b706000830184613910565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613b9d82613cf7565b9150613ba883613cf7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bdd57613bdc613dbc565b5b828201905092915050565b6000613bf382613cf7565b9150613bfe83613cf7565b925082613c0e57613c0d613deb565b5b828204905092915050565b6000613c2482613cf7565b9150613c2f83613cf7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6857613c67613dbc565b5b828202905092915050565b6000613c7e82613cf7565b9150613c8983613cf7565b925082821015613c9c57613c9b613dbc565b5b828203905092915050565b6000613cb282613cd7565b9050919050565b60008115159050919050565b6000613cd082613ca7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613d2c578082015181840152602081019050613d11565b83811115613d3b576000848401525b50505050565b60006002820490506001821680613d5957607f821691505b60208210811415613d6d57613d6c613e1a565b5b50919050565b6000613d7e82613cf7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613db157613db0613dbc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613e6381613ca7565b8114613e6e57600080fd5b50565b613e7a81613cb9565b8114613e8557600080fd5b50565b613e9181613cc5565b8114613e9c57600080fd5b50565b613ea881613cf7565b8114613eb357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c6c7d8d1020961b76bc43b7e78b7afceecb8763b269281316994d30790eb3be64736f6c63430008000033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063af14052c11610097578063f2cc0c1811610071578063f2cc0c181461051b578063f2fde38b14610537578063f84354f114610553578063fbb8f6931461056f576101c4565b8063af14052c146104b1578063cba0e996146104bb578063dd62ed3e146104eb576101c4565b80639ee933b5116100d35780639ee933b514610419578063a457c2d714610435578063a9059cbb14610465578063ac18de4314610495576101c4565b8063715018a6146103d35780638da5cb5b146103dd57806395d89b41146103fb576101c4565b80632d06177a11610166578063395093511161014057806339509351146103255780634549b03914610355578063608127b11461038557806370a08231146103a3576101c4565b80632d06177a146102bb5780632d838119146102d7578063313ce56714610307576101c4565b806310e71a02116101a257806310e71a021461023357806313114a9d1461024f57806318160ddd1461026d57806323b872dd1461028b576101c4565b8063053ab182146101c957806306fdde03146101e5578063095ea7b314610203575b600080fd5b6101e360048036038101906101de91906133ac565b61058d565b005b6101ed610707565b6040516101fa919061397e565b60405180910390f35b61021d60048036038101906102189190613347565b610799565b60405161022a9190613963565b60405180910390f35b61024d60048036038101906102489190613383565b6107b7565b005b610257610877565b6040516102649190613b40565b60405180910390f35b610275610881565b6040516102829190613b40565b60405180910390f35b6102a560048036038101906102a091906132f8565b61088e565b6040516102b29190613963565b60405180910390f35b6102d560048036038101906102d09190613293565b610967565b005b6102f160048036038101906102ec91906133ac565b610a3e565b6040516102fe9190613b40565b60405180910390f35b61030f610aac565b60405161031c9190613b5b565b60405180910390f35b61033f600480360381019061033a9190613347565b610ac3565b60405161034c9190613963565b60405180910390f35b61036f600480360381019061036a91906133fe565b610b76565b60405161037c9190613b40565b60405180910390f35b61038d610bfb565b60405161039a9190613b40565b60405180910390f35b6103bd60048036038101906103b89190613293565b610c01565b6040516103ca9190613b40565b60405180910390f35b6103db610d3e565b005b6103e5610e78565b6040516103f2919061391f565b60405180910390f35b610403610ea1565b604051610410919061397e565b60405180910390f35b610433600480360381019061042e9190613293565b610f33565b005b61044f600480360381019061044a9190613347565b610ff3565b60405161045c9190613963565b60405180910390f35b61047f600480360381019061047a9190613347565b6110c0565b60405161048c9190613963565b60405180910390f35b6104af60048036038101906104aa9190613293565b6110de565b005b6104b96111b5565b005b6104d560048036038101906104d09190613293565b61146e565b6040516104e29190613963565b60405180910390f35b610505600480360381019061050091906132bc565b6114c4565b6040516105129190613b40565b60405180910390f35b61053560048036038101906105309190613293565b61154b565b005b610551600480360381019061054c9190613293565b6117f6565b005b61056d60048036038101906105689190613293565b61199f565b005b610577611d7d565b6040516105849190613b40565b60405180910390f35b6000610597611d83565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061d90613b20565b60405180910390fd5b600061063183611d8b565b50505050905061068981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506106e181600654611de390919063ffffffff16565b6006819055506106fc83600754611df990919063ffffffff16565b600781905550505050565b60606008805461071690613d41565b80601f016020809104026020016040519081016040528092919081815260200182805461074290613d41565b801561078f5780601f106107645761010080835404028352916020019161078f565b820191906000526020600020905b81548152906001019060200180831161077257829003601f168201915b5050505050905090565b60006107ad6107a6611d83565b8484611e0f565b6001905092915050565b6107bf611d83565b73ffffffffffffffffffffffffffffffffffffffff166107dd610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082a90613aa0565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600754905090565b600064e8d4a51000905090565b600061089b848484611fda565b61095c846108a7611d83565b61095785604051806060016040528060288152602001613eb760289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090d611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123f19092919063ffffffff16565b611e0f565b600190509392505050565b61096f611d83565b73ffffffffffffffffffffffffffffffffffffffff1661098d610e78565b73ffffffffffffffffffffffffffffffffffffffff16146109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90613aa0565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654821115610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c906139c0565b60405180910390fd5b6000610a8f612446565b9050610aa4818461247190919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b6000610b6c610ad0611d83565b84610b678560036000610ae1611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b611e0f565b6001905092915050565b600064e8d4a51000831115610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613a40565b60405180910390fd5b81610bdf576000610bd084611d8b565b50505050905080915050610bf5565b6000610bea84611d8b565b505050915050809150505b92915050565b60115481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610cc557610cbe620f4240610cb0600b54600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248790919063ffffffff16565b61247190919063ffffffff16565b9050610d39565b610d36620f4240610d28600b54610d1a600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3e565b61248790919063ffffffff16565b61247190919063ffffffff16565b90505b919050565b610d46611d83565b73ffffffffffffffffffffffffffffffffffffffff16610d64610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613aa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610eb090613d41565b80601f0160208091040260200160405190810160405280929190818152602001828054610edc90613d41565b8015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b5050505050905090565b610f3b611d83565b73ffffffffffffffffffffffffffffffffffffffff16610f59610e78565b73ffffffffffffffffffffffffffffffffffffffff1614610faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa690613aa0565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006110b6611000611d83565b846110b185604051806060016040528060258152602001613edf602591396003600061102a611d83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123f19092919063ffffffff16565b611e0f565b6001905092915050565b60006110d46110cd611d83565b8484611fda565b6001905092915050565b6110e6611d83565b73ffffffffffffffffffffffffffffffffffffffff16611104610e78565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613aa0565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e336011546040518363ffffffff1660e01b815260040161121592919061393a565b60206040518083038186803b15801561122d57600080fd5b505afa158015611241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126591906133d5565b116112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90613a60565b60405180910390fd5b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611324919061391f565b60206040518083038186803b15801561133c57600080fd5b505afa158015611350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137491906133d5565b905060006113a3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c01565b905080821115611409576113fe826113f0836113e2620f42406113d4620f9060600b5461248790919063ffffffff16565b61247190919063ffffffff16565b61248790919063ffffffff16565b61247190919063ffffffff16565b600b8190555061146a565b80821015611469576114628261145483611446620f4240611438620ef420600b5461248790919063ffffffff16565b61247190919063ffffffff16565b61248790919063ffffffff16565b61247190919063ffffffff16565b600b819055505b5b5050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90613a80565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90613a20565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611738576116f4600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3e565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117fe611d83565b73ffffffffffffffffffffffffffffffffffffffff1661181c610e78565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613aa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d9906139e0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290613a80565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae90613a20565b60405180910390fd5b60005b600580549050811015611d79578173ffffffffffffffffffffffffffffffffffffffff1660058281548110611b18577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d665760056001600580549050611b739190613c73565b81548110611baa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611d2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611d79565b8080611d7190613d73565b915050611aba565b5050565b60105481565b600033905090565b6000806000806000806000611d9f8861249d565b915091506000611dad612446565b90506000806000611dbf8c86866124ef565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60008183611df19190613c73565b905092915050565b60008183611e079190613b92565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7690613b00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee690613a00565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fcd9190613b40565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204190613ae0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b1906139a0565b60405180910390fd5b600081116120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490613ac0565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121a05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156121b5576121b083838361254d565b6123ec565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122585750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561226d576122688383836127a0565b6123eb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123115750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612326576123218383836129f3565b6123ea565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123c85750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123dd576123d8838383612bb1565b6123e9565b6123e88383836129f3565b5b5b5b5b505050565b6000838311158290612439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430919061397e565b60405180910390fd5b5082840390509392505050565b6000806000612453612e99565b9150915061246a818361247190919063ffffffff16565b9250505090565b6000818361247f9190613be8565b905092915050565b600081836124959190613c19565b905092915050565b60008060006124c960036124bb60648761247190919063ffffffff16565b61248790919063ffffffff16565b905060006124e08286611de390919063ffffffff16565b90508082935093505050915091565b600080600080612508858861248790919063ffffffff16565b9050600061251f868861248790919063ffffffff16565b905060006125368284611de390919063ffffffff16565b905082818395509550955050505093509350939050565b600080600080600061255e86611d8b565b945094509450945094506125ba86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061264f85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126e484600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061273183826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161278e9190613b40565b60405180910390a35050505050505050565b60008060008060006127b186611d8b565b9450945094509450945061280d85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506128a282600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061293784600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061298483826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129e19190613b40565b60405180910390a35050505050505050565b6000806000806000612a0486611d8b565b94509450945094509450612a6085600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612af584600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b4283826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b9f9190613b40565b60405180910390a35050505050505050565b6000806000806000612bc286611d8b565b94509450945094509450612c1e86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cb385600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d4882600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ddd84600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611df990919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2a83826131f0565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e879190613b40565b60405180910390a35050505050505050565b60008060006006549050600064e8d4a51000905060005b6005805490508110156131ad57826001600060058481548110612efc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130105750816002600060058481548110612fa8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561302a5760065464e8d4a51000945094505050506131ec565b6130e0600160006005848154811061306b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484611de390919063ffffffff16565b92506131986002600060058481548110613123577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483611de390919063ffffffff16565b915080806131a590613d73565b915050612eb0565b506131c864e8d4a5100060065461247190919063ffffffff16565b8210156131e35760065464e8d4a510009350935050506131ec565b81819350935050505b9091565b61320582600654611de390919063ffffffff16565b60068190555061322081600754611df990919063ffffffff16565b6007819055505050565b60008135905061323981613e5a565b92915050565b60008135905061324e81613e71565b92915050565b60008135905061326381613e88565b92915050565b60008135905061327881613e9f565b92915050565b60008151905061328d81613e9f565b92915050565b6000602082840312156132a557600080fd5b60006132b38482850161322a565b91505092915050565b600080604083850312156132cf57600080fd5b60006132dd8582860161322a565b92505060206132ee8582860161322a565b9150509250929050565b60008060006060848603121561330d57600080fd5b600061331b8682870161322a565b935050602061332c8682870161322a565b925050604061333d86828701613269565b9150509250925092565b6000806040838503121561335a57600080fd5b60006133688582860161322a565b925050602061337985828601613269565b9150509250929050565b60006020828403121561339557600080fd5b60006133a384828501613254565b91505092915050565b6000602082840312156133be57600080fd5b60006133cc84828501613269565b91505092915050565b6000602082840312156133e757600080fd5b60006133f58482850161327e565b91505092915050565b6000806040838503121561341157600080fd5b600061341f85828601613269565b92505060206134308582860161323f565b9150509250929050565b61344381613ca7565b82525050565b61345281613cb9565b82525050565b600061346382613b76565b61346d8185613b81565b935061347d818560208601613d0e565b61348681613e49565b840191505092915050565b600061349e602383613b81565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613504602a83613b81565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b600061356a602683613b81565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135d0602283613b81565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613636601b83613b81565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000613676601f83613b81565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006136b6600e83613b81565b91507f4e6f74206120677561726469616e0000000000000000000000000000000000006000830152602082019050919050565b60006136f6600d83613b81565b91507f4e6f742061206d616e61676572000000000000000000000000000000000000006000830152602082019050919050565b6000613736602083613b81565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613776602983613b81565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137dc602583613b81565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613842602483613b81565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138a8602c83613b81565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b61390a81613cf7565b82525050565b61391981613d01565b82525050565b6000602082019050613934600083018461343a565b92915050565b600060408201905061394f600083018561343a565b61395c6020830184613901565b9392505050565b60006020820190506139786000830184613449565b92915050565b600060208201905081810360008301526139988184613458565b905092915050565b600060208201905081810360008301526139b981613491565b9050919050565b600060208201905081810360008301526139d9816134f7565b9050919050565b600060208201905081810360008301526139f98161355d565b9050919050565b60006020820190508181036000830152613a19816135c3565b9050919050565b60006020820190508181036000830152613a3981613629565b9050919050565b60006020820190508181036000830152613a5981613669565b9050919050565b60006020820190508181036000830152613a79816136a9565b9050919050565b60006020820190508181036000830152613a99816136e9565b9050919050565b60006020820190508181036000830152613ab981613729565b9050919050565b60006020820190508181036000830152613ad981613769565b9050919050565b60006020820190508181036000830152613af9816137cf565b9050919050565b60006020820190508181036000830152613b1981613835565b9050919050565b60006020820190508181036000830152613b398161389b565b9050919050565b6000602082019050613b556000830184613901565b92915050565b6000602082019050613b706000830184613910565b92915050565b600081519050919050565b600082825260208201905092915050565b6000613b9d82613cf7565b9150613ba883613cf7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bdd57613bdc613dbc565b5b828201905092915050565b6000613bf382613cf7565b9150613bfe83613cf7565b925082613c0e57613c0d613deb565b5b828204905092915050565b6000613c2482613cf7565b9150613c2f83613cf7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c6857613c67613dbc565b5b828202905092915050565b6000613c7e82613cf7565b9150613c8983613cf7565b925082821015613c9c57613c9b613dbc565b5b828203905092915050565b6000613cb282613cd7565b9050919050565b60008115159050919050565b6000613cd082613ca7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015613d2c578082015181840152602081019050613d11565b83811115613d3b576000848401525b50505050565b60006002820490506001821680613d5957607f821691505b60208210811415613d6d57613d6c613e1a565b5b50919050565b6000613d7e82613cf7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613db157613db0613dbc565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b613e6381613ca7565b8114613e6e57600080fd5b50565b613e7a81613cb9565b8114613e8557600080fd5b50565b613e9181613cc5565b8114613e9c57600080fd5b50565b613ea881613cf7565b8114613eb357600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c6c7d8d1020961b76bc43b7e78b7afceecb8763b269281316994d30790eb3be64736f6c63430008000033

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

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

-----Decoded View---------------
Arg [0] : _usdcAddr (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

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


Deployed Bytecode Sourcemap

89744:13288:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94033:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;91382:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92449:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91278:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;93938:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91659:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92650:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96098:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;94941:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91568:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;93104:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94458:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;90638:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91762:280;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20751:148;;;:::i;:::-;;20100:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91473;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91179:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;93412:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92050:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96207:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;102399:630;;;:::i;:::-;;93820:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;92257:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95271:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21054:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;95612:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;90602:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;94033:417;94085:14;94102:12;:10;:12::i;:::-;94085:29;;94148:11;:19;94160:6;94148:19;;;;;;;;;;;;;;;;;;;;;;;;;94147:20;94125:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;94251:15;94278:19;94289:7;94278:10;:19::i;:::-;94250:47;;;;;;94326:28;94346:7;94326;:15;94334:6;94326:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;94308:7;:15;94316:6;94308:15;;;;;;;;;;;;;;;:46;;;;94375:20;94387:7;94375;;:11;;:20;;;;:::i;:::-;94365:7;:30;;;;94419:23;94434:7;94419:10;;:14;;:23;;;;:::i;:::-;94406:10;:36;;;;94033:417;;;:::o;91382:83::-;91419:13;91452:5;91445:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;91382:83;:::o;92449:193::-;92551:4;92573:39;92582:12;:10;:12::i;:::-;92596:7;92605:6;92573:8;:39::i;:::-;92630:4;92623:11;;92449:193;;;;:::o;91278:96::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;91358:8:::1;91346:9;;:20;;;;;;;;;;;;;;;;;;91278:96:::0;:::o;93938:87::-;93980:7;94007:10;;94000:17;;93938:87;:::o;91659:95::-;91712:7;90207:19;91732:14;;91659:95;:::o;92650:446::-;92782:4;92799:36;92809:6;92817:9;92828:6;92799:9;:36::i;:::-;92846:220;92869:6;92890:12;:10;:12::i;:::-;92917:138;92973:6;92917:138;;;;;;;;;;;;;;;;;:11;:19;92929:6;92917:19;;;;;;;;;;;;;;;:33;92937:12;:10;:12::i;:::-;92917:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;92846:8;:220::i;:::-;93084:4;93077:11;;92650:446;;;;;:::o;96098:101::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;96187:4:::1;96165:10;:19;96176:7;96165:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;96098:101:::0;:::o;94941:322::-;95035:7;95093;;95082;:18;;95060:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;95181:19;95203:10;:8;:10::i;:::-;95181:32;;95231:24;95243:11;95231:7;:11;;:24;;;;:::i;:::-;95224:31;;;94941:322;;;:::o;91568:83::-;91609:5;91634:9;;;;;;;;;;;91627:16;;91568:83;:::o;93104:300::-;93219:4;93241:133;93264:12;:10;:12::i;:::-;93291:7;93313:50;93352:10;93313:11;:25;93325:12;:10;:12::i;:::-;93313:25;;;;;;;;;;;;;;;:34;93339:7;93313:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;93241:8;:133::i;:::-;93392:4;93385:11;;93104:300;;;;:::o;94458:475::-;94576:7;90207:19;94609:7;:18;;94601:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;94679:17;94674:252;;94714:15;94741:19;94752:7;94741:10;:19::i;:::-;94713:47;;;;;;94782:7;94775:14;;;;;94674:252;94825:23;94858:19;94869:7;94858:10;:19::i;:::-;94822:55;;;;;;94899:15;94892:22;;;94458:475;;;;;:::o;90638:31::-;;;;:::o;91762:280::-;91828:7;91852:11;:20;91864:7;91852:20;;;;;;;;;;;;;;;;;;;;;;;;;91848:90;;;91894:44;91932:5;91894:33;91915:11;;91894:7;:16;91902:7;91894:16;;;;;;;;;;;;;;;;:20;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;91887:51;;;;91848:90;91969:65;92028:5;91969:54;92011:11;;91969:37;91989:7;:16;91997:7;91989:16;;;;;;;;;;;;;;;;91969:19;:37::i;:::-;:41;;:54;;;;:::i;:::-;:58;;:65;;;;:::i;:::-;91949:85;;91762:280;;;;:::o;20751:148::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20858:1:::1;20821:40;;20842:6;::::0;::::1;;;;;;;;20821:40;;;;;;;;;;;;20889:1;20872:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20751:148::o:0;20100:87::-;20146:7;20173:6;;;;;;;;;;;20166:13;;20100:87;:::o;91473:::-;91512:13;91545:7;91538:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;91473:87;:::o;91179:91::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;91255:7:::1;91244:8;;:18;;;;;;;;;;;;;;;;;;91179:91:::0;:::o;93412:400::-;93532:4;93554:228;93577:12;:10;:12::i;:::-;93604:7;93626:145;93683:15;93626:145;;;;;;;;;;;;;;;;;:11;:25;93638:12;:10;:12::i;:::-;93626:25;;;;;;;;;;;;;;;:34;93652:7;93626:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;93554:8;:228::i;:::-;93800:4;93793:11;;93412:400;;;;:::o;92050:199::-;92155:4;92177:42;92187:12;:10;:12::i;:::-;92201:9;92212:6;92177:9;:42::i;:::-;92237:4;92230:11;;92050:199;;;;:::o;96207:107::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;96301:5:::1;96279:10;:19;96290:7;96279:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;96207:107:::0;:::o;102399:630::-;91108:1;91060:9;;;;;;;;;;;:19;;;91080:10;91092:12;;91060:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;91038:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;102448:19:::1;102470:10;;;;;;;;;;;:20;;;102491:8;;;;;;;;;;;102470:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;102448:52;;102511:20;102534:19;102544:8;;;;;;;;;;;102534:9;:19::i;:::-;102511:42;;102584:12;102570:11;:26;102566:456;;;102627:152;102767:11;102627:117;102731:12;102627:81;102702:5;102627:52;102661:17;102627:11;;:33;;:52;;;;:::i;:::-;:74;;:81;;;;:::i;:::-;:103;;:117;;;;:::i;:::-;:139;;:152;;;;:::i;:::-;102613:11;:166;;;;102566:456;;;102815:12;102801:11;:26;102797:225;;;102858:152;102998:11;102858:117;102962:12;102858:81;102933:5;102858:52;102892:17;102858:11;;:33;;:52;;;;:::i;:::-;:74;;:81;;;;:::i;:::-;:103;;:117;;;;:::i;:::-;:139;;:152;;;;:::i;:::-;102844:11;:166;;;;102797:225;102566:456;91162:1;;102399:630::o:0;93820:110::-;93878:4;93902:11;:20;93914:7;93902:20;;;;;;;;;;;;;;;;;;;;;;;;;93895:27;;93820:110;;;:::o;92257:184::-;92374:7;92406:11;:18;92418:5;92406:18;;;;;;;;;;;;;;;:27;92425:7;92406:27;;;;;;;;;;;;;;;;92399:34;;92257:184;;;;:::o;95271:333::-;90935:10;:22;90946:10;90935:22;;;;;;;;;;;;;;;;;;;;;;;;;90927:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;95353:11:::1;:20;95365:7;95353:20;;;;;;;;;;;;;;;;;;;;;;;;;95352:21;95344:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;95439:1;95420:7;:16;95428:7;95420:16;;;;;;;;;;;;;;;;:20;95416:109;;;95476:37;95496:7;:16;95504:7;95496:16;;;;;;;;;;;;;;;;95476:19;:37::i;:::-;95457:7;:16;95465:7;95457:16;;;;;;;;;;;;;;;:56;;;;95416:109;95558:4;95535:11;:20;95547:7;95535:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;95573:9;95588:7;95573:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95271:333:::0;:::o;21054:244::-;20331:12;:10;:12::i;:::-;20320:23;;:7;:5;:7::i;:::-;:23;;;20312:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21163:1:::1;21143:22;;:8;:22;;;;21135:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21253:8;21224:38;;21245:6;::::0;::::1;;;;;;;;21224:38;;;;;;;;;;;;21282:8;21273:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;21054:244:::0;:::o;95612:478::-;90935:10;:22;90946:10;90935:22;;;;;;;;;;;;;;;;;;;;;;;;;90927:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;95693:11:::1;:20;95705:7;95693:20;;;;;;;;;;;;;;;;;;;;;;;;;95685:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;95761:9;95756:327;95780:9;:16;;;;95776:1;:20;95756:327;;;95838:7;95822:23;;:9;95832:1;95822:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;95818:254;;;95881:9;95910:1;95891:9;:16;;;;:20;;;;:::i;:::-;95881:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;95866:9;95876:1;95866:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;95950:1;95931:7;:16;95939:7;95931:16;;;;;;;;;;;;;;;:20;;;;95993:5;95970:11;:20;95982:7;95970:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;96017:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;96051:5;;95818:254;95798:3;;;;;:::i;:::-;;;;95756:327;;;;95612:478:::0;:::o;90602:29::-;;;;:::o;18654:98::-;18707:7;18734:10;18727:17;;18654:98;:::o;100347:531::-;100447:7;100469;100491;100513;100535;100571:23;100596:12;100612:20;100624:7;100612:11;:20::i;:::-;100570:62;;;;100643:19;100665:10;:8;:10::i;:::-;100643:32;;100687:15;100704:23;100729:12;100758:39;100770:7;100779:4;100785:11;100758;:39::i;:::-;100686:111;;;;;;100816:7;100825:15;100842:4;100848:15;100865:4;100808:62;;;;;;;;;;;;;;;;100347:531;;;;;;;:::o;6088:98::-;6146:7;6177:1;6173;:5;;;;:::i;:::-;6166:12;;6088:98;;;;:::o;5707:::-;5765:7;5796:1;5792;:5;;;;:::i;:::-;5785:12;;5707:98;;;;:::o;96322:371::-;96466:1;96449:19;;:5;:19;;;;96441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;96547:1;96528:21;;:7;:21;;;;96520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;96631:6;96601:11;:18;96613:5;96601:18;;;;;;;;;;;;;;;:27;96620:7;96601:27;;;;;;;;;;;;;;;:36;;;;96669:7;96653:32;;96662:5;96653:32;;;96678:6;96653:32;;;;;;:::i;:::-;;;;;;;;96322:371;;;:::o;96701:965::-;96850:1;96832:20;;:6;:20;;;;96824:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;96934:1;96913:23;;:9;:23;;;;96905:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;97004:1;96995:6;:10;96987:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;97066:11;:19;97078:6;97066:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;97090:11;:22;97102:9;97090:22;;;;;;;;;;;;;;;;;;;;;;;;;97089:23;97066:46;97062:597;;;97129:48;97151:6;97159:9;97170:6;97129:21;:48::i;:::-;97062:597;;;97200:11;:19;97212:6;97200:19;;;;;;;;;;;;;;;;;;;;;;;;;97199:20;:46;;;;;97223:11;:22;97235:9;97223:22;;;;;;;;;;;;;;;;;;;;;;;;;97199:46;97195:464;;;97262:46;97282:6;97290:9;97301:6;97262:19;:46::i;:::-;97195:464;;;97331:11;:19;97343:6;97331:19;;;;;;;;;;;;;;;;;;;;;;;;;97330:20;:47;;;;;97355:11;:22;97367:9;97355:22;;;;;;;;;;;;;;;;;;;;;;;;;97354:23;97330:47;97326:333;;;97394:44;97412:6;97420:9;97431:6;97394:17;:44::i;:::-;97326:333;;;97460:11;:19;97472:6;97460:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;97483:11;:22;97495:9;97483:22;;;;;;;;;;;;;;;;;;;;;;;;;97460:45;97456:203;;;97522:48;97544:6;97552:9;97563:6;97522:21;:48::i;:::-;97456:203;;;97603:44;97621:6;97629:9;97640:6;97603:17;:44::i;:::-;97456:203;97326:333;97195:464;97062:597;96701:965;;;:::o;7986:206::-;8072:7;8130:1;8125;:6;;8133:12;8117:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8172:1;8168;:5;8161:12;;7986:206;;;;;:::o;101614:164::-;101656:7;101677:15;101694;101713:19;:17;:19::i;:::-;101676:56;;;;101750:20;101762:7;101750;:11;;:20;;;;:::i;:::-;101743:27;;;;101614:164;:::o;6844:98::-;6902:7;6933:1;6929;:5;;;;:::i;:::-;6922:12;;6844:98;;;;:::o;6445:::-;6503:7;6534:1;6530;:5;;;;:::i;:::-;6523:12;;6445:98;;;;:::o;100886:262::-;100973:7;100982;101007:12;101022:23;101043:1;101022:16;101034:3;101022:7;:11;;:16;;;;:::i;:::-;:20;;:23;;;;:::i;:::-;101007:38;;101056:23;101082:17;101094:4;101082:7;:11;;:17;;;;:::i;:::-;101056:43;;101118:15;101135:4;101110:30;;;;;;100886:262;;;:::o;101156:450::-;101326:7;101348;101370;101405:15;101423:24;101435:11;101423:7;:11;;:24;;;;:::i;:::-;101405:42;;101458:12;101473:21;101482:11;101473:4;:8;;:21;;;;:::i;:::-;101458:36;;101505:23;101531:17;101543:4;101531:7;:11;;:17;;;;:::i;:::-;101505:43;;101567:7;101576:15;101593:4;101559:39;;;;;;;;;101156:450;;;;;;;:::o;98873:616::-;99024:15;99054:23;99092:12;99119:23;99157:12;99183:19;99194:7;99183:10;:19::i;:::-;99009:193;;;;;;;;;;99231:28;99251:7;99231;:15;99239:6;99231:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;99213:7;:15;99221:6;99213:15;;;;;;;;;;;;;;;:46;;;;99288:28;99308:7;99288;:15;99296:6;99288:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;99270:7;:15;99278:6;99270:15;;;;;;;;;;;;;;;:46;;;;99348:39;99371:15;99348:7;:18;99356:9;99348:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;99327:7;:18;99335:9;99327:18;;;;;;;;;;;;;;;:60;;;;99398:23;99410:4;99416;99398:11;:23::i;:::-;99454:9;99437:44;;99446:6;99437:44;;;99465:15;99437:44;;;;;;:::i;:::-;;;;;;;;98873:616;;;;;;;;:::o;98237:628::-;98386:15;98416:23;98454:12;98481:23;98519:12;98545:19;98556:7;98545:10;:19::i;:::-;98371:193;;;;;;;;;;98593:28;98613:7;98593;:15;98601:6;98593:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;98575:7;:15;98583:6;98575:15;;;;;;;;;;;;;;;:46;;;;98653:39;98676:15;98653:7;:18;98661:9;98653:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;98632:7;:18;98640:9;98632:18;;;;;;;;;;;;;;;:60;;;;98724:39;98747:15;98724:7;:18;98732:9;98724:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;98703:7;:18;98711:9;98703:18;;;;;;;;;;;;;;;:60;;;;98774:23;98786:4;98792;98774:11;:23::i;:::-;98830:9;98813:44;;98822:6;98813:44;;;98841:15;98813:44;;;;;;:::i;:::-;;;;;;;;98237:628;;;;;;;;:::o;97674:555::-;97821:15;97851:23;97889:12;97916:23;97954:12;97980:19;97991:7;97980:10;:19::i;:::-;97806:193;;;;;;;;;;98028:28;98048:7;98028;:15;98036:6;98028:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;98010:7;:15;98018:6;98010:15;;;;;;;;;;;;;;;:46;;;;98088:39;98111:15;98088:7;:18;98096:9;98088:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;98067:7;:18;98075:9;98067:18;;;;;;;;;;;;;;;:60;;;;98138:23;98150:4;98156;98138:11;:23::i;:::-;98194:9;98177:44;;98186:6;98177:44;;;98205:15;98177:44;;;;;;:::i;:::-;;;;;;;;97674:555;;;;;;;;:::o;99497:687::-;99648:15;99678:23;99716:12;99743:23;99781:12;99807:19;99818:7;99807:10;:19::i;:::-;99633:193;;;;;;;;;;99855:28;99875:7;99855;:15;99863:6;99855:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;99837:7;:15;99845:6;99837:15;;;;;;;;;;;;;;;:46;;;;99912:28;99932:7;99912;:15;99920:6;99912:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;99894:7;:15;99902:6;99894:15;;;;;;;;;;;;;;;:46;;;;99972:39;99995:15;99972:7;:18;99980:9;99972:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;99951:7;:18;99959:9;99951:18;;;;;;;;;;;;;;;:60;;;;100043:39;100066:15;100043:7;:18;100051:9;100043:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;100022:7;:18;100030:9;100022:18;;;;;;;;;;;;;;;:60;;;;100093:23;100105:4;100111;100093:11;:23::i;:::-;100149:9;100132:44;;100141:6;100132:44;;;100160:15;100132:44;;;;;;:::i;:::-;;;;;;;;99497:687;;;;;;;;:::o;101786:605::-;101837:7;101846;101866:15;101884:7;;101866:25;;101902:15;90207:19;101902:25;;101943:9;101938:338;101962:9;:16;;;;101958:1;:20;101938:338;;;102046:7;102022;:21;102030:9;102040:1;102030:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102022:21;;;;;;;;;;;;;;;;:31;:83;;;;102098:7;102074;:21;102082:9;102092:1;102082:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102074:21;;;;;;;;;;;;;;;;:31;102022:83;102000:146;;;102129:7;;90207:19;102121:25;;;;;;;;;102000:146;102171:34;102183:7;:21;102191:9;102201:1;102191:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102183:21;;;;;;;;;;;;;;;;102171:7;:11;;:34;;;;:::i;:::-;102161:44;;102230:34;102242:7;:21;102250:9;102260:1;102250:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;102242:21;;;;;;;;;;;;;;;;102230:7;:11;;:34;;;;:::i;:::-;102220:44;;101980:3;;;;;:::i;:::-;;;;101938:338;;;;102300:20;90207:19;102300:7;;:11;;:20;;;;:::i;:::-;102290:7;:30;102286:61;;;102330:7;;90207:19;102322:25;;;;;;;;102286:61;102366:7;102375;102358:25;;;;;;101786:605;;;:::o;100192:147::-;100270:17;100282:4;100270:7;;:11;;:17;;;;:::i;:::-;100260:7;:27;;;;100311:20;100326:4;100311:10;;:14;;:20;;;;:::i;:::-;100298:10;:33;;;;100192:147;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:171::-;;391:6;378:20;369:29;;407:49;450:5;407:49;:::i;:::-;359:103;;;;:::o;468:139::-;;552:6;539:20;530:29;;568:33;595:5;568:33;:::i;:::-;520:87;;;;:::o;613:143::-;;701:6;695:13;686:22;;717:33;744:5;717:33;:::i;:::-;676:80;;;;:::o;762:262::-;;870:2;858:9;849:7;845:23;841:32;838:2;;;886:1;883;876:12;838:2;929:1;954:53;999:7;990:6;979:9;975:22;954:53;:::i;:::-;944:63;;900:117;828:196;;;;:::o;1030:407::-;;;1155:2;1143:9;1134:7;1130:23;1126:32;1123:2;;;1171:1;1168;1161:12;1123:2;1214:1;1239:53;1284:7;1275:6;1264:9;1260:22;1239:53;:::i;:::-;1229:63;;1185:117;1341:2;1367:53;1412:7;1403:6;1392:9;1388:22;1367:53;:::i;:::-;1357:63;;1312:118;1113:324;;;;;:::o;1443:552::-;;;;1585:2;1573:9;1564:7;1560:23;1556:32;1553:2;;;1601:1;1598;1591:12;1553:2;1644:1;1669:53;1714:7;1705:6;1694:9;1690:22;1669:53;:::i;:::-;1659:63;;1615:117;1771:2;1797:53;1842:7;1833:6;1822:9;1818:22;1797:53;:::i;:::-;1787:63;;1742:118;1899:2;1925:53;1970:7;1961:6;1950:9;1946:22;1925:53;:::i;:::-;1915:63;;1870:118;1543:452;;;;;:::o;2001:407::-;;;2126:2;2114:9;2105:7;2101:23;2097:32;2094:2;;;2142:1;2139;2132:12;2094:2;2185:1;2210:53;2255:7;2246:6;2235:9;2231:22;2210:53;:::i;:::-;2200:63;;2156:117;2312:2;2338:53;2383:7;2374:6;2363:9;2359:22;2338:53;:::i;:::-;2328:63;;2283:118;2084:324;;;;;:::o;2414:294::-;;2538:2;2526:9;2517:7;2513:23;2509:32;2506:2;;;2554:1;2551;2544:12;2506:2;2597:1;2622:69;2683:7;2674:6;2663:9;2659:22;2622:69;:::i;:::-;2612:79;;2568:133;2496:212;;;;:::o;2714:262::-;;2822:2;2810:9;2801:7;2797:23;2793:32;2790:2;;;2838:1;2835;2828:12;2790:2;2881:1;2906:53;2951:7;2942:6;2931:9;2927:22;2906:53;:::i;:::-;2896:63;;2852:117;2780:196;;;;:::o;2982:284::-;;3101:2;3089:9;3080:7;3076:23;3072:32;3069:2;;;3117:1;3114;3107:12;3069:2;3160:1;3185:64;3241:7;3232:6;3221:9;3217:22;3185:64;:::i;:::-;3175:74;;3131:128;3059:207;;;;:::o;3272:401::-;;;3394:2;3382:9;3373:7;3369:23;3365:32;3362:2;;;3410:1;3407;3400:12;3362:2;3453:1;3478:53;3523:7;3514:6;3503:9;3499:22;3478:53;:::i;:::-;3468:63;;3424:117;3580:2;3606:50;3648:7;3639:6;3628:9;3624:22;3606:50;:::i;:::-;3596:60;;3551:115;3352:321;;;;;:::o;3679:118::-;3766:24;3784:5;3766:24;:::i;:::-;3761:3;3754:37;3744:53;;:::o;3803:109::-;3884:21;3899:5;3884:21;:::i;:::-;3879:3;3872:34;3862:50;;:::o;3918:364::-;;4034:39;4067:5;4034:39;:::i;:::-;4089:71;4153:6;4148:3;4089:71;:::i;:::-;4082:78;;4169:52;4214:6;4209:3;4202:4;4195:5;4191:16;4169:52;:::i;:::-;4246:29;4268:6;4246:29;:::i;:::-;4241:3;4237:39;4230:46;;4010:272;;;;;:::o;4288:367::-;;4451:67;4515:2;4510:3;4451:67;:::i;:::-;4444:74;;4548:34;4544:1;4539:3;4535:11;4528:55;4614:5;4609:2;4604:3;4600:12;4593:27;4646:2;4641:3;4637:12;4630:19;;4434:221;;;:::o;4661:374::-;;4824:67;4888:2;4883:3;4824:67;:::i;:::-;4817:74;;4921:34;4917:1;4912:3;4908:11;4901:55;4987:12;4982:2;4977:3;4973:12;4966:34;5026:2;5021:3;5017:12;5010:19;;4807:228;;;:::o;5041:370::-;;5204:67;5268:2;5263:3;5204:67;:::i;:::-;5197:74;;5301:34;5297:1;5292:3;5288:11;5281:55;5367:8;5362:2;5357:3;5353:12;5346:30;5402:2;5397:3;5393:12;5386:19;;5187:224;;;:::o;5417:366::-;;5580:67;5644:2;5639:3;5580:67;:::i;:::-;5573:74;;5677:34;5673:1;5668:3;5664:11;5657:55;5743:4;5738:2;5733:3;5729:12;5722:26;5774:2;5769:3;5765:12;5758:19;;5563:220;;;:::o;5789:325::-;;5952:67;6016:2;6011:3;5952:67;:::i;:::-;5945:74;;6049:29;6045:1;6040:3;6036:11;6029:50;6105:2;6100:3;6096:12;6089:19;;5935:179;;;:::o;6120:329::-;;6283:67;6347:2;6342:3;6283:67;:::i;:::-;6276:74;;6380:33;6376:1;6371:3;6367:11;6360:54;6440:2;6435:3;6431:12;6424:19;;6266:183;;;:::o;6455:312::-;;6618:67;6682:2;6677:3;6618:67;:::i;:::-;6611:74;;6715:16;6711:1;6706:3;6702:11;6695:37;6758:2;6753:3;6749:12;6742:19;;6601:166;;;:::o;6773:311::-;;6936:67;7000:2;6995:3;6936:67;:::i;:::-;6929:74;;7033:15;7029:1;7024:3;7020:11;7013:36;7075:2;7070:3;7066:12;7059:19;;6919:165;;;:::o;7090:330::-;;7253:67;7317:2;7312:3;7253:67;:::i;:::-;7246:74;;7350:34;7346:1;7341:3;7337:11;7330:55;7411:2;7406:3;7402:12;7395:19;;7236:184;;;:::o;7426:373::-;;7589:67;7653:2;7648:3;7589:67;:::i;:::-;7582:74;;7686:34;7682:1;7677:3;7673:11;7666:55;7752:11;7747:2;7742:3;7738:12;7731:33;7790:2;7785:3;7781:12;7774:19;;7572:227;;;:::o;7805:369::-;;7968:67;8032:2;8027:3;7968:67;:::i;:::-;7961:74;;8065:34;8061:1;8056:3;8052:11;8045:55;8131:7;8126:2;8121:3;8117:12;8110:29;8165:2;8160:3;8156:12;8149:19;;7951:223;;;:::o;8180:368::-;;8343:67;8407:2;8402:3;8343:67;:::i;:::-;8336:74;;8440:34;8436:1;8431:3;8427:11;8420:55;8506:6;8501:2;8496:3;8492:12;8485:28;8539:2;8534:3;8530:12;8523:19;;8326:222;;;:::o;8554:376::-;;8717:67;8781:2;8776:3;8717:67;:::i;:::-;8710:74;;8814:34;8810:1;8805:3;8801:11;8794:55;8880:14;8875:2;8870:3;8866:12;8859:36;8921:2;8916:3;8912:12;8905:19;;8700:230;;;:::o;8936:118::-;9023:24;9041:5;9023:24;:::i;:::-;9018:3;9011:37;9001:53;;:::o;9060:112::-;9143:22;9159:5;9143:22;:::i;:::-;9138:3;9131:35;9121:51;;:::o;9178:222::-;;9309:2;9298:9;9294:18;9286:26;;9322:71;9390:1;9379:9;9375:17;9366:6;9322:71;:::i;:::-;9276:124;;;;:::o;9406:332::-;;9565:2;9554:9;9550:18;9542:26;;9578:71;9646:1;9635:9;9631:17;9622:6;9578:71;:::i;:::-;9659:72;9727:2;9716:9;9712:18;9703:6;9659:72;:::i;:::-;9532:206;;;;;:::o;9744:210::-;;9869:2;9858:9;9854:18;9846:26;;9882:65;9944:1;9933:9;9929:17;9920:6;9882:65;:::i;:::-;9836:118;;;;:::o;9960:313::-;;10111:2;10100:9;10096:18;10088:26;;10160:9;10154:4;10150:20;10146:1;10135:9;10131:17;10124:47;10188:78;10261:4;10252:6;10188:78;:::i;:::-;10180:86;;10078:195;;;;:::o;10279:419::-;;10483:2;10472:9;10468:18;10460:26;;10532:9;10526:4;10522:20;10518:1;10507:9;10503:17;10496:47;10560:131;10686:4;10560:131;:::i;:::-;10552:139;;10450:248;;;:::o;10704:419::-;;10908:2;10897:9;10893:18;10885:26;;10957:9;10951:4;10947:20;10943:1;10932:9;10928:17;10921:47;10985:131;11111:4;10985:131;:::i;:::-;10977:139;;10875:248;;;:::o;11129:419::-;;11333:2;11322:9;11318:18;11310:26;;11382:9;11376:4;11372:20;11368:1;11357:9;11353:17;11346:47;11410:131;11536:4;11410:131;:::i;:::-;11402:139;;11300:248;;;:::o;11554:419::-;;11758:2;11747:9;11743:18;11735:26;;11807:9;11801:4;11797:20;11793:1;11782:9;11778:17;11771:47;11835:131;11961:4;11835:131;:::i;:::-;11827:139;;11725:248;;;:::o;11979:419::-;;12183:2;12172:9;12168:18;12160:26;;12232:9;12226:4;12222:20;12218:1;12207:9;12203:17;12196:47;12260:131;12386:4;12260:131;:::i;:::-;12252:139;;12150:248;;;:::o;12404:419::-;;12608:2;12597:9;12593:18;12585:26;;12657:9;12651:4;12647:20;12643:1;12632:9;12628:17;12621:47;12685:131;12811:4;12685:131;:::i;:::-;12677:139;;12575:248;;;:::o;12829:419::-;;13033:2;13022:9;13018:18;13010:26;;13082:9;13076:4;13072:20;13068:1;13057:9;13053:17;13046:47;13110:131;13236:4;13110:131;:::i;:::-;13102:139;;13000:248;;;:::o;13254:419::-;;13458:2;13447:9;13443:18;13435:26;;13507:9;13501:4;13497:20;13493:1;13482:9;13478:17;13471:47;13535:131;13661:4;13535:131;:::i;:::-;13527:139;;13425:248;;;:::o;13679:419::-;;13883:2;13872:9;13868:18;13860:26;;13932:9;13926:4;13922:20;13918:1;13907:9;13903:17;13896:47;13960:131;14086:4;13960:131;:::i;:::-;13952:139;;13850:248;;;:::o;14104:419::-;;14308:2;14297:9;14293:18;14285:26;;14357:9;14351:4;14347:20;14343:1;14332:9;14328:17;14321:47;14385:131;14511:4;14385:131;:::i;:::-;14377:139;;14275:248;;;:::o;14529:419::-;;14733:2;14722:9;14718:18;14710:26;;14782:9;14776:4;14772:20;14768:1;14757:9;14753:17;14746:47;14810:131;14936:4;14810:131;:::i;:::-;14802:139;;14700:248;;;:::o;14954:419::-;;15158:2;15147:9;15143:18;15135:26;;15207:9;15201:4;15197:20;15193:1;15182:9;15178:17;15171:47;15235:131;15361:4;15235:131;:::i;:::-;15227:139;;15125:248;;;:::o;15379:419::-;;15583:2;15572:9;15568:18;15560:26;;15632:9;15626:4;15622:20;15618:1;15607:9;15603:17;15596:47;15660:131;15786:4;15660:131;:::i;:::-;15652:139;;15550:248;;;:::o;15804:222::-;;15935:2;15924:9;15920:18;15912:26;;15948:71;16016:1;16005:9;16001:17;15992:6;15948:71;:::i;:::-;15902:124;;;;:::o;16032:214::-;;16159:2;16148:9;16144:18;16136:26;;16172:67;16236:1;16225:9;16221:17;16212:6;16172:67;:::i;:::-;16126:120;;;;:::o;16252:99::-;;16338:5;16332:12;16322:22;;16311:40;;;:::o;16357:169::-;;16475:6;16470:3;16463:19;16515:4;16510:3;16506:14;16491:29;;16453:73;;;;:::o;16532:305::-;;16591:20;16609:1;16591:20;:::i;:::-;16586:25;;16625:20;16643:1;16625:20;:::i;:::-;16620:25;;16779:1;16711:66;16707:74;16704:1;16701:81;16698:2;;;16785:18;;:::i;:::-;16698:2;16829:1;16826;16822:9;16815:16;;16576:261;;;;:::o;16843:185::-;;16900:20;16918:1;16900:20;:::i;:::-;16895:25;;16934:20;16952:1;16934:20;:::i;:::-;16929:25;;16973:1;16963:2;;16978:18;;:::i;:::-;16963:2;17020:1;17017;17013:9;17008:14;;16885:143;;;;:::o;17034:348::-;;17097:20;17115:1;17097:20;:::i;:::-;17092:25;;17131:20;17149:1;17131:20;:::i;:::-;17126:25;;17319:1;17251:66;17247:74;17244:1;17241:81;17236:1;17229:9;17222:17;17218:105;17215:2;;;17326:18;;:::i;:::-;17215:2;17374:1;17371;17367:9;17356:20;;17082:300;;;;:::o;17388:191::-;;17448:20;17466:1;17448:20;:::i;:::-;17443:25;;17482:20;17500:1;17482:20;:::i;:::-;17477:25;;17521:1;17518;17515:8;17512:2;;;17526:18;;:::i;:::-;17512:2;17571:1;17568;17564:9;17556:17;;17433:146;;;;:::o;17585:96::-;;17651:24;17669:5;17651:24;:::i;:::-;17640:35;;17630:51;;;:::o;17687:90::-;;17764:5;17757:13;17750:21;17739:32;;17729:48;;;:::o;17783:112::-;;17865:24;17883:5;17865:24;:::i;:::-;17854:35;;17844:51;;;:::o;17901:126::-;;17978:42;17971:5;17967:54;17956:65;;17946:81;;;:::o;18033:77::-;;18099:5;18088:16;;18078:32;;;:::o;18116:86::-;;18191:4;18184:5;18180:16;18169:27;;18159:43;;;:::o;18208:307::-;18276:1;18286:113;18300:6;18297:1;18294:13;18286:113;;;18385:1;18380:3;18376:11;18370:18;18366:1;18361:3;18357:11;18350:39;18322:2;18319:1;18315:10;18310:15;;18286:113;;;18417:6;18414:1;18411:13;18408:2;;;18497:1;18488:6;18483:3;18479:16;18472:27;18408:2;18257:258;;;;:::o;18521:320::-;;18602:1;18596:4;18592:12;18582:22;;18649:1;18643:4;18639:12;18670:18;18660:2;;18726:4;18718:6;18714:17;18704:27;;18660:2;18788;18780:6;18777:14;18757:18;18754:38;18751:2;;;18807:18;;:::i;:::-;18751:2;18572:269;;;;:::o;18847:233::-;;18909:24;18927:5;18909:24;:::i;:::-;18900:33;;18955:66;18948:5;18945:77;18942:2;;;19025:18;;:::i;:::-;18942:2;19072:1;19065:5;19061:13;19054:20;;18890:190;;;:::o;19086:180::-;19134:77;19131:1;19124:88;19231:4;19228:1;19221:15;19255:4;19252:1;19245:15;19272:180;19320:77;19317:1;19310:88;19417:4;19414:1;19407:15;19441:4;19438:1;19431:15;19458:180;19506:77;19503:1;19496:88;19603:4;19600:1;19593:15;19627:4;19624:1;19617:15;19644:102;;19736:2;19732:7;19727:2;19720:5;19716:14;19712:28;19702:38;;19692:54;;;:::o;19752:122::-;19825:24;19843:5;19825:24;:::i;:::-;19818:5;19815:35;19805:2;;19864:1;19861;19854:12;19805:2;19795:79;:::o;19880:116::-;19950:21;19965:5;19950:21;:::i;:::-;19943:5;19940:32;19930:2;;19986:1;19983;19976:12;19930:2;19920:76;:::o;20002:154::-;20091:40;20125:5;20091:40;:::i;:::-;20084:5;20081:51;20071:2;;20146:1;20143;20136:12;20071:2;20061:95;:::o;20162:122::-;20235:24;20253:5;20235:24;:::i;:::-;20228:5;20225:35;20215:2;;20274:1;20271;20264:12;20215:2;20205:79;:::o

Swarm Source

ipfs://3c6c7d8d1020961b76bc43b7e78b7afceecb8763b269281316994d30790eb3be
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.