Contract Overview
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xd3aa0498a60c0fb3ac92bfc3982c235982e5137c792efa918da5b0a4a1ce3d2a | 0x60c06040 | 5364195 | 97 days 10 hrs ago | 0x71ebb2e24a2a77e48951eda2f8d453874b52c70a | IN | Create: NFCMasterChef_Type3 | 0 CRO | 10.948837655561 |
[ Download CSV Export ]
Contract Name:
NFCMasterChef_Type3
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-11-01 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) 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/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: NFCMasterChef/NFCMasterChef_type_3_tiers.sol pragma solidity ^0.8.1; interface IMasterchef { function getUserAmount(uint256 _pid, address _account) external view returns (uint256); function getPoolStakedToken(uint256 _pid) external view returns (address); function getInfoRequiredAmount() external view returns (uint256[6] memory); function getInfoSBT() external view returns (address[6] memory); } interface ISBT { function safeMint(address _to) external; function safeBurn(uint256 tokenId) external; function setBaseURI(string memory _newBaseURI) external; } interface IType4SBTStaking { function getArrayTokenIDs(uint256 _pid, address _user) external view returns (uint256[] memory); } contract NFCMasterChef_Type3 is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; IMasterchef public immutable masterchef; IType4SBTStaking public immutable sbtStakingContract; uint256 public constant lockedPeriod = 180 days; mapping(address => uint256) public unlockDate; constructor( address _masterchef, address _sbtStakingContract ){ masterchef = IMasterchef(_masterchef); sbtStakingContract = IType4SBTStaking(_sbtStakingContract); transferOwnership(_masterchef); } // Deposit NFC Token for 6 months to MasterChef for NFC allocation and possibily grant tier. function deposit(uint256 _pid, uint256 _amount, uint256[] memory _tokenIds, address _account) external onlyOwner nonReentrant { require(_tokenIds.length == 0, "Why do you call with tokenIds ?"); unlockDate[_account] = block.timestamp + lockedPeriod; address nfcToken = masterchef.getPoolStakedToken(_pid); IERC20(nfcToken).safeTransferFrom(_account, address(this), _amount); uint256[6] memory requiredAmounts = masterchef.getInfoRequiredAmount(); address[6] memory sbt = masterchef.getInfoSBT(); for (uint256 i = 1; i < requiredAmounts.length; i++) { if(masterchef.getUserAmount(_pid, _account) + _amount >= requiredAmounts[i] && sbtStakingContract.getArrayTokenIDs(i, _account).length == 0 && IERC721(sbt[i]).balanceOf(_account) == 0) { ISBT(sbt[i]).safeMint(_account); } } } // Withdraw NFC Token from MasterChef. function withdraw(uint256 _pid, uint256 _amount, uint256[] memory _tokenIds, address _account) external onlyOwner nonReentrant { require(_tokenIds.length == 0, "Why do you call with tokenIds ?"); require(block.timestamp > unlockDate[_account], "locked by timer"); uint256 userAmount = masterchef.getUserAmount(_pid, _account); require(userAmount >= _amount, "withdraw: not good"); address nfcToken = masterchef.getPoolStakedToken(_pid); uint256[6] memory requiredAmounts = masterchef.getInfoRequiredAmount(); address[6] memory sbt = masterchef.getInfoSBT(); for (uint256 i = 1; i < requiredAmounts.length; i++) { if(userAmount - _amount < requiredAmounts[i]){ uint256[] memory arrayTokenIds = sbtStakingContract.getArrayTokenIDs(i, _account); require(arrayTokenIds.length == 0, "Please unstake your SBT before withdraw"); if(IERC721(sbt[i]).balanceOf(_account) > 0){ uint256 tokenId = IERC721Enumerable(sbt[i]).tokenOfOwnerByIndex(_account, 0); require(IERC721(sbt[i]).isApprovedForAll(_account, address(this)), "Need approval for all"); ISBT(sbt[i]).safeBurn(tokenId); } } } IERC20(nfcToken).safeTransfer(_account, _amount); } // Set SBT Base URI. function setBaseURI(address _sbtContract, string memory _newBaseURI) external onlyOwner { ISBT(_sbtContract).setBaseURI(_newBaseURI); } }
[{"inputs":[{"internalType":"address","name":"_masterchef","type":"address"},{"internalType":"address","name":"_sbtStakingContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address","name":"_account","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockedPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterchef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sbtStakingContract","outputs":[{"internalType":"contract IType4SBTStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sbtContract","type":"address"},{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unlockDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address","name":"_account","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162002bb138038062002bb1833981810160405281019062000037919062000365565b620000576200004b620000df60201b60201c565b620000e760201b60201c565b600180819055508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620000d782620001ab60201b60201c565b5050620004c7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001bb6200024160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200022d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002249062000433565b60405180910390fd5b6200023e81620000e760201b60201c565b50565b62000251620000df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000277620002d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c790620004a5565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200032d8262000300565b9050919050565b6200033f8162000320565b81146200034b57600080fd5b50565b6000815190506200035f8162000334565b92915050565b600080604083850312156200037f576200037e620002fb565b5b60006200038f858286016200034e565b9250506020620003a2858286016200034e565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200041b602683620003ac565b91506200042882620003bd565b604082019050919050565b600060208201905081810360008301526200044e816200040c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200048d602083620003ac565b91506200049a8262000455565b602082019050919050565b60006020820190508181036000830152620004c0816200047e565b9050919050565b60805160a05161267e62000533600039600081816105c401528181610e0d0152610ff90152600081816102e3015281816103c601528181610464015281816104f701528181610b4401528181610c0f01528181610ca201528181610d5c01526110a0015261267e6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063b3d6e11911610066578063b3d6e11914610133578063e177884f14610151578063e7eb8dc91461016d578063f2fde38b1461018b578063fb1db278146101a75761009e565b8063472fcc3c146100a357806349ccd69e146100bf578063715018a6146100ef57806388433651146100f95780638da5cb5b14610115575b600080fd5b6100bd60048036038101906100b89190611799565b6101c5565b005b6100d960048036038101906100d4919061181c565b610982565b6040516100e69190611858565b60405180910390f35b6100f761099a565b005b610113600480360381019061010e9190611928565b6109ae565b005b61011d610a25565b60405161012a9190611993565b60405180910390f35b61013b610a4e565b6040516101489190611858565b60405180910390f35b61016b60048036038101906101669190611799565b610a55565b005b610175610ff7565b6040516101829190611a0d565b60405180910390f35b6101a560048036038101906101a0919061181c565b61101b565b005b6101af61109e565b6040516101bc9190611a49565b60405180910390f35b6101cd6110c2565b600260015403610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020990611ac1565b60405180910390fd5b6002600181905550600082511461025e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025590611b2d565b60405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442116102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d690611b99565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633437586b86846040518363ffffffff1660e01b815260040161033c929190611bb9565b602060405180830381865afa158015610359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037d9190611bf7565b9050838110156103c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b990611c70565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166352551992876040518263ffffffff1660e01b815260040161041d9190611858565b602060405180830381865afa15801561043a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045e9190611ca5565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330bcf63c6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156104cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f19190611d83565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632edff8966040518163ffffffff1660e01b815260040160c060405180830381865afa158015610560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105849190611e61565b90506000600190505b6006811015610945578281600681106105a9576105a8611e8e565b5b602002015188866105ba9190611eec565b10156109325760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a71896dc83896040518363ffffffff1660e01b815260040161061d929190611bb9565b600060405180830381865afa15801561063a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906106639190611fb7565b905060008151146106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a090612072565b60405180910390fd5b60008383600681106106be576106bd611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b81526004016106fb9190611993565b602060405180830381865afa158015610718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073c9190611bf7565b111561093057600083836006811061075757610756611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff16632f745c598960006040518363ffffffff1660e01b81526004016107979291906120cd565b602060405180830381865afa1580156107b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d89190611bf7565b90508383600681106107ed576107ec611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1663e985e9c589306040518363ffffffff1660e01b815260040161082c9291906120f6565b602060405180830381865afa158015610849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086d9190612157565b6108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a3906121d0565b60405180910390fd5b8383600681106108bf576108be611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff1663dbf51325826040518263ffffffff1660e01b81526004016108fc9190611858565b600060405180830381600087803b15801561091657600080fd5b505af115801561092a573d6000803e3d6000fd5b50505050505b505b808061093d906121f0565b91505061058d565b5061097185888573ffffffffffffffffffffffffffffffffffffffff166111409092919063ffffffff16565b505050506001808190555050505050565b60026020528060005260406000206000915090505481565b6109a26110c2565b6109ac60006111c6565b565b6109b66110c2565b8173ffffffffffffffffffffffffffffffffffffffff166355f804b3826040518263ffffffff1660e01b81526004016109ef91906122a6565b600060405180830381600087803b158015610a0957600080fd5b505af1158015610a1d573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62ed4e0081565b610a5d6110c2565b600260015403610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9990611ac1565b60405180910390fd5b60026001819055506000825114610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590611b2d565b60405180910390fd5b62ed4e0042610afd91906122c8565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166352551992866040518263ffffffff1660e01b8152600401610b9b9190611858565b602060405180830381865afa158015610bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611ca5565b9050610c0b8230868473ffffffffffffffffffffffffffffffffffffffff1661128a909392919063ffffffff16565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330bcf63c6040518163ffffffff1660e01b815260040160c060405180830381865afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c9190611d83565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632edff8966040518163ffffffff1660e01b815260040160c060405180830381865afa158015610d0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2f9190611e61565b90506000600190505b6006811015610fe657828160068110610d5457610d53611e8e565b5b6020020151877f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633437586b8b896040518363ffffffff1660e01b8152600401610db5929190611bb9565b602060405180830381865afa158015610dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df69190611bf7565b610e0091906122c8565b10158015610eaf575060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a71896dc83886040518363ffffffff1660e01b8152600401610e66929190611bb9565b600060405180830381865afa158015610e83573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610eac9190611fb7565b51145b8015610f4b57506000828260068110610ecb57610eca611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401610f089190611993565b602060405180830381865afa158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f499190611bf7565b145b15610fd357818160068110610f6357610f62611e8e565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166340d097c3866040518263ffffffff1660e01b8152600401610fa09190611993565b600060405180830381600087803b158015610fba57600080fd5b505af1158015610fce573d6000803e3d6000fd5b505050505b8080610fde906121f0565b915050610d38565b505050506001808190555050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110236110c2565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110899061236e565b60405180910390fd5b61109b816111c6565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6110ca611313565b73ffffffffffffffffffffffffffffffffffffffff166110e8610a25565b73ffffffffffffffffffffffffffffffffffffffff161461113e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611135906123da565b60405180910390fd5b565b6111c18363a9059cbb60e01b848460405160240161115f9291906123fa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061131b565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61130d846323b872dd60e01b8585856040516024016112ab93929190612423565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061131b565b50505050565b600033905090565b600061137d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113e29092919063ffffffff16565b90506000815111156113dd578080602001905181019061139d9190612157565b6113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d3906124cc565b60405180910390fd5b5b505050565b60606113f184846000856113fa565b90509392505050565b60608247101561143f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114369061255e565b60405180910390fd5b6114488561150e565b611487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147e906125ca565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114b09190612631565b60006040518083038185875af1925050503d80600081146114ed576040519150601f19603f3d011682016040523d82523d6000602084013e6114f2565b606091505b5091509150611502828286611531565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6060831561154157829050611591565b6000835111156115545782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158891906122a6565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6115bf816115ac565b81146115ca57600080fd5b50565b6000813590506115dc816115b6565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611630826115e7565b810181811067ffffffffffffffff8211171561164f5761164e6115f8565b5b80604052505050565b6000611662611598565b905061166e8282611627565b919050565b600067ffffffffffffffff82111561168e5761168d6115f8565b5b602082029050602081019050919050565b600080fd5b60006116b76116b284611673565b611658565b905080838252602082019050602084028301858111156116da576116d961169f565b5b835b8181101561170357806116ef88826115cd565b8452602084019350506020810190506116dc565b5050509392505050565b600082601f830112611722576117216115e2565b5b81356117328482602086016116a4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117668261173b565b9050919050565b6117768161175b565b811461178157600080fd5b50565b6000813590506117938161176d565b92915050565b600080600080608085870312156117b3576117b26115a2565b5b60006117c1878288016115cd565b94505060206117d2878288016115cd565b935050604085013567ffffffffffffffff8111156117f3576117f26115a7565b5b6117ff8782880161170d565b925050606061181087828801611784565b91505092959194509250565b600060208284031215611832576118316115a2565b5b600061184084828501611784565b91505092915050565b611852816115ac565b82525050565b600060208201905061186d6000830184611849565b92915050565b600080fd5b600067ffffffffffffffff821115611893576118926115f8565b5b61189c826115e7565b9050602081019050919050565b82818337600083830152505050565b60006118cb6118c684611878565b611658565b9050828152602081018484840111156118e7576118e6611873565b5b6118f28482856118a9565b509392505050565b600082601f83011261190f5761190e6115e2565b5b813561191f8482602086016118b8565b91505092915050565b6000806040838503121561193f5761193e6115a2565b5b600061194d85828601611784565b925050602083013567ffffffffffffffff81111561196e5761196d6115a7565b5b61197a858286016118fa565b9150509250929050565b61198d8161175b565b82525050565b60006020820190506119a86000830184611984565b92915050565b6000819050919050565b60006119d36119ce6119c98461173b565b6119ae565b61173b565b9050919050565b60006119e5826119b8565b9050919050565b60006119f7826119da565b9050919050565b611a07816119ec565b82525050565b6000602082019050611a2260008301846119fe565b92915050565b6000611a33826119da565b9050919050565b611a4381611a28565b82525050565b6000602082019050611a5e6000830184611a3a565b92915050565b600082825260208201905092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611aab601f83611a64565b9150611ab682611a75565b602082019050919050565b60006020820190508181036000830152611ada81611a9e565b9050919050565b7f57687920646f20796f752063616c6c207769746820746f6b656e496473203f00600082015250565b6000611b17601f83611a64565b9150611b2282611ae1565b602082019050919050565b60006020820190508181036000830152611b4681611b0a565b9050919050565b7f6c6f636b65642062792074696d65720000000000000000000000000000000000600082015250565b6000611b83600f83611a64565b9150611b8e82611b4d565b602082019050919050565b60006020820190508181036000830152611bb281611b76565b9050919050565b6000604082019050611bce6000830185611849565b611bdb6020830184611984565b9392505050565b600081519050611bf1816115b6565b92915050565b600060208284031215611c0d57611c0c6115a2565b5b6000611c1b84828501611be2565b91505092915050565b7f77697468647261773a206e6f7420676f6f640000000000000000000000000000600082015250565b6000611c5a601283611a64565b9150611c6582611c24565b602082019050919050565b60006020820190508181036000830152611c8981611c4d565b9050919050565b600081519050611c9f8161176d565b92915050565b600060208284031215611cbb57611cba6115a2565b5b6000611cc984828501611c90565b91505092915050565b600067ffffffffffffffff821115611ced57611cec6115f8565b5b602082029050919050565b6000611d0b611d0684611cd2565b611658565b90508060208402830185811115611d2557611d2461169f565b5b835b81811015611d4e5780611d3a8882611be2565b845260208401935050602081019050611d27565b5050509392505050565b600082601f830112611d6d57611d6c6115e2565b5b6006611d7a848285611cf8565b91505092915050565b600060c08284031215611d9957611d986115a2565b5b6000611da784828501611d58565b91505092915050565b600067ffffffffffffffff821115611dcb57611dca6115f8565b5b602082029050919050565b6000611de9611de484611db0565b611658565b90508060208402830185811115611e0357611e0261169f565b5b835b81811015611e2c5780611e188882611c90565b845260208401935050602081019050611e05565b5050509392505050565b600082601f830112611e4b57611e4a6115e2565b5b6006611e58848285611dd6565b91505092915050565b600060c08284031215611e7757611e766115a2565b5b6000611e8584828501611e36565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ef7826115ac565b9150611f02836115ac565b9250828203905081811115611f1a57611f19611ebd565b5b92915050565b6000611f33611f2e84611673565b611658565b90508083825260208201905060208402830185811115611f5657611f5561169f565b5b835b81811015611f7f5780611f6b8882611be2565b845260208401935050602081019050611f58565b5050509392505050565b600082601f830112611f9e57611f9d6115e2565b5b8151611fae848260208601611f20565b91505092915050565b600060208284031215611fcd57611fcc6115a2565b5b600082015167ffffffffffffffff811115611feb57611fea6115a7565b5b611ff784828501611f89565b91505092915050565b7f506c6561736520756e7374616b6520796f757220534254206265666f7265207760008201527f6974686472617700000000000000000000000000000000000000000000000000602082015250565b600061205c602783611a64565b915061206782612000565b604082019050919050565b6000602082019050818103600083015261208b8161204f565b9050919050565b6000819050919050565b60006120b76120b26120ad84612092565b6119ae565b6115ac565b9050919050565b6120c78161209c565b82525050565b60006040820190506120e26000830185611984565b6120ef60208301846120be565b9392505050565b600060408201905061210b6000830185611984565b6121186020830184611984565b9392505050565b60008115159050919050565b6121348161211f565b811461213f57600080fd5b50565b6000815190506121518161212b565b92915050565b60006020828403121561216d5761216c6115a2565b5b600061217b84828501612142565b91505092915050565b7f4e65656420617070726f76616c20666f7220616c6c0000000000000000000000600082015250565b60006121ba601583611a64565b91506121c582612184565b602082019050919050565b600060208201905081810360008301526121e9816121ad565b9050919050565b60006121fb826115ac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361222d5761222c611ebd565b5b600182019050919050565b600081519050919050565b60005b83811015612261578082015181840152602081019050612246565b60008484015250505050565b600061227882612238565b6122828185611a64565b9350612292818560208601612243565b61229b816115e7565b840191505092915050565b600060208201905081810360008301526122c0818461226d565b905092915050565b60006122d3826115ac565b91506122de836115ac565b92508282019050808211156122f6576122f5611ebd565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612358602683611a64565b9150612363826122fc565b604082019050919050565b600060208201905081810360008301526123878161234b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123c4602083611a64565b91506123cf8261238e565b602082019050919050565b600060208201905081810360008301526123f3816123b7565b9050919050565b600060408201905061240f6000830185611984565b61241c6020830184611849565b9392505050565b60006060820190506124386000830186611984565b6124456020830185611984565b6124526040830184611849565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006124b6602a83611a64565b91506124c18261245a565b604082019050919050565b600060208201905081810360008301526124e5816124a9565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612548602683611a64565b9150612553826124ec565b604082019050919050565b600060208201905081810360008301526125778161253b565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006125b4601d83611a64565b91506125bf8261257e565b602082019050919050565b600060208201905081810360008301526125e3816125a7565b9050919050565b600081519050919050565b600081905092915050565b600061260b826125ea565b61261581856125f5565b9350612625818560208601612243565b80840191505092915050565b600061263d8284612600565b91508190509291505056fea2646970667358221220394eb58b784b327d0c40ac2d522e526be3662ba7c96bebe7eeb8abccc248d67164736f6c634300081000330000000000000000000000009ef76c1d7fcaa712596b782d767ed4531af3f57f000000000000000000000000e8a2efd488504407d504ea03629e88d38f7866b3
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009ef76c1d7fcaa712596b782d767ed4531af3f57f000000000000000000000000e8a2efd488504407d504ea03629e88d38f7866b3
-----Decoded View---------------
Arg [0] : _masterchef (address): 0x9ef76c1d7fcaa712596b782d767ed4531af3f57f
Arg [1] : _sbtStakingContract (address): 0xe8a2efd488504407d504ea03629e88d38f7866b3
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ef76c1d7fcaa712596b782d767ed4531af3f57f
Arg [1] : 000000000000000000000000e8a2efd488504407d504ea03629e88d38f7866b3
Deployed ByteCode Sourcemap
39339:3230:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41004:1379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39642:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12406:103;;;:::i;:::-;;42417:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11758:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39582:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40056:896;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39517:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12664:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39471:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41004:1379;11644:13;:11;:13::i;:::-;8683:1:::1;9281:7;;:19:::0;9273:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8683:1;9414:7;:18;;;;41170:1:::2;41150:9;:16;:21;41142:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41244:10;:20;41255:8;41244:20;;;;;;;;;;;;;;;;41226:15;:38;41218:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41295:18;41316:10;:24;;;41341:4;41347:8;41316:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41295:61;;41389:7;41375:10;:21;;41367:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;41430:16;41449:10;:29;;;41479:4;41449:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41430:54;;41495:33;41531:10;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41495:70;;41576:21;41600:10;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41576:47;;41639:9;41651:1;41639:13;;41634:683;41658:22;41654:1;:26;41634:683;;;41728:15;41744:1;41728:18;;;;;;;:::i;:::-;;;;;;41718:7;41705:10;:20;;;;:::i;:::-;:41;41702:604;;;41766:30;41799:18;:35;;;41835:1;41838:8;41799:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41766:81;;41898:1;41874:13;:20;:25;41866:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42003:1;41973:3;41977:1;41973:6;;;;;;;:::i;:::-;;;;;;41965:25;;;41991:8;41965:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;41962:329;;;42028:15;42064:3;42068:1;42064:6;;;;;;;:::i;:::-;;;;;;42046:45;;;42092:8;42102:1;42046:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42028:76;;42143:3;42147:1;42143:6;;;;;;;:::i;:::-;;;;;;42135:32;;;42168:8;42186:4;42135:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42127:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;42246:3;42250:1;42246:6;;;;;;;:::i;:::-;;;;;;42241:21;;;42263:7;42241:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;42005:286;41962:329;41747:559;41702:604;41682:3;;;;;:::i;:::-;;;;41634:683;;;;42327:48;42357:8;42367:7;42334:8;42327:29;;;;:48;;;;;:::i;:::-;41131:1252;;;;8639:1:::1;9593:7:::0;:22:::1;;;;41004:1379:::0;;;;:::o;39642:45::-;;;;;;;;;;;;;;;;;:::o;12406:103::-;11644:13;:11;:13::i;:::-;12471:30:::1;12498:1;12471:18;:30::i;:::-;12406:103::o:0;42417:149::-;11644:13;:11;:13::i;:::-;42521:12:::1;42516:29;;;42546:11;42516:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42417:149:::0;;:::o;11758:87::-;11804:7;11831:6;;;;;;;;;;;11824:13;;11758:87;:::o;39582:47::-;39621:8;39582:47;:::o;40056:896::-;11644:13;:11;:13::i;:::-;8683:1:::1;9281:7;;:19:::0;9273:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8683:1;9414:7;:18;;;;40221:1:::2;40201:9;:16;:21;40193:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39621:8;40292:15;:30;;;;:::i;:::-;40269:10;:20;40280:8;40269:20;;;;;;;;;;;;;;;:53;;;;40333:16;40352:10;:29;;;40382:4;40352:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40333:54;;40398:67;40432:8;40450:4;40457:7;40405:8;40398:33;;;;:67;;;;;;:::i;:::-;40476:33;40512:10;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40476:70;;40557:21;40581:10;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40557:47;;40620:9;40632:1;40620:13;;40615:330;40639:22;40635:1;:26;40615:330;;;40740:15;40756:1;40740:18;;;;;;;:::i;:::-;;;;;;40729:7;40686:10;:24;;;40711:4;40717:8;40686:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;:72;;:136;;;;;40821:1;40762:18;:35;;;40798:1;40801:8;40762:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;:60;40686:136;:180;;;;;40865:1;40834:3;40838:1;40834:6;;;;;;;:::i;:::-;;;;;;40826:25;;;40852:8;40826:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;40686:180;40683:251;;;40892:3;40896:1;40892:6;;;;;;;:::i;:::-;;;;;;40887:21;;;40909:8;40887:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;40683:251;40663:3;;;;;:::i;:::-;;;;40615:330;;;;40182:770;;;8639:1:::1;9593:7:::0;:22:::1;;;;40056:896:::0;;;;:::o;39517:52::-;;;:::o;12664:201::-;11644:13;:11;:13::i;:::-;12773:1:::1;12753:22;;:8;:22;;::::0;12745:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:28;12848:8;12829:18;:28::i;:::-;12664:201:::0;:::o;39471:39::-;;;:::o;11923:132::-;11998:12;:10;:12::i;:::-;11987:23;;:7;:5;:7::i;:::-;:23;;;11979:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11923:132::o;27734:211::-;27851:86;27871:5;27901:23;;;27926:2;27930:5;27878:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27851:19;:86::i;:::-;27734:211;;;:::o;13025:191::-;13099:16;13118:6;;;;;;;;;;;13099:25;;13144:8;13135:6;;:17;;;;;;;;;;;;;;;;;;13199:8;13168:40;;13189:8;13168:40;;;;;;;;;;;;13088:128;13025:191;:::o;27953:248::-;28097:96;28117:5;28147:27;;;28176:4;28182:2;28186:5;28124:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28097:19;:96::i;:::-;27953:248;;;;:::o;10309:98::-;10362:7;10389:10;10382:17;;10309:98;:::o;30801:716::-;31225:23;31251:69;31279:4;31251:69;;;;;;;;;;;;;;;;;31259:5;31251:27;;;;:69;;;;;:::i;:::-;31225:95;;31355:1;31335:10;:17;:21;31331:179;;;31432:10;31421:30;;;;;;;;;;;;:::i;:::-;31413:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31331:179;30871:646;30801:716;;:::o;17201:229::-;17338:12;17370:52;17392:6;17400:4;17406:1;17409:12;17370:21;:52::i;:::-;17363:59;;17201:229;;;;;:::o;18321:510::-;18491:12;18549:5;18524:21;:30;;18516:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;18616:18;18627:6;18616:10;:18::i;:::-;18608:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18682:12;18696:23;18723:6;:11;;18742:5;18749:4;18723:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18681:73;;;;18772:51;18789:7;18798:10;18810:12;18772:16;:51::i;:::-;18765:58;;;;18321:510;;;;;;:::o;14456:326::-;14516:4;14773:1;14751:7;:19;;;:23;14744:30;;14456:326;;;:::o;21007:762::-;21157:12;21186:7;21182:580;;;21217:10;21210:17;;;;21182:580;21351:1;21331:10;:17;:21;21327:424;;;21579:10;21573:17;21640:15;21627:10;21623:2;21619:19;21612:44;21327:424;21722:12;21715:20;;;;;;;;;;;:::i;:::-;;;;;;;;21007:762;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:117::-;799:1;796;789:12;813:102;854:6;905:2;901:7;896:2;889:5;885:14;881:28;871:38;;813:102;;;:::o;921:180::-;969:77;966:1;959:88;1066:4;1063:1;1056:15;1090:4;1087:1;1080:15;1107:281;1190:27;1212:4;1190:27;:::i;:::-;1182:6;1178:40;1320:6;1308:10;1305:22;1284:18;1272:10;1269:34;1266:62;1263:88;;;1331:18;;:::i;:::-;1263:88;1371:10;1367:2;1360:22;1150:238;1107:281;;:::o;1394:129::-;1428:6;1455:20;;:::i;:::-;1445:30;;1484:33;1512:4;1504:6;1484:33;:::i;:::-;1394:129;;;:::o;1529:311::-;1606:4;1696:18;1688:6;1685:30;1682:56;;;1718:18;;:::i;:::-;1682:56;1768:4;1760:6;1756:17;1748:25;;1828:4;1822;1818:15;1810:23;;1529:311;;;:::o;1846:117::-;1955:1;1952;1945:12;1986:710;2082:5;2107:81;2123:64;2180:6;2123:64;:::i;:::-;2107:81;:::i;:::-;2098:90;;2208:5;2237:6;2230:5;2223:21;2271:4;2264:5;2260:16;2253:23;;2324:4;2316:6;2312:17;2304:6;2300:30;2353:3;2345:6;2342:15;2339:122;;;2372:79;;:::i;:::-;2339:122;2487:6;2470:220;2504:6;2499:3;2496:15;2470:220;;;2579:3;2608:37;2641:3;2629:10;2608:37;:::i;:::-;2603:3;2596:50;2675:4;2670:3;2666:14;2659:21;;2546:144;2530:4;2525:3;2521:14;2514:21;;2470:220;;;2474:21;2088:608;;1986:710;;;;;:::o;2719:370::-;2790:5;2839:3;2832:4;2824:6;2820:17;2816:27;2806:122;;2847:79;;:::i;:::-;2806:122;2964:6;2951:20;2989:94;3079:3;3071:6;3064:4;3056:6;3052:17;2989:94;:::i;:::-;2980:103;;2796:293;2719:370;;;;:::o;3095:126::-;3132:7;3172:42;3165:5;3161:54;3150:65;;3095:126;;;:::o;3227:96::-;3264:7;3293:24;3311:5;3293:24;:::i;:::-;3282:35;;3227:96;;;:::o;3329:122::-;3402:24;3420:5;3402:24;:::i;:::-;3395:5;3392:35;3382:63;;3441:1;3438;3431:12;3382:63;3329:122;:::o;3457:139::-;3503:5;3541:6;3528:20;3519:29;;3557:33;3584:5;3557:33;:::i;:::-;3457:139;;;;:::o;3602:975::-;3713:6;3721;3729;3737;3786:3;3774:9;3765:7;3761:23;3757:33;3754:120;;;3793:79;;:::i;:::-;3754:120;3913:1;3938:53;3983:7;3974:6;3963:9;3959:22;3938:53;:::i;:::-;3928:63;;3884:117;4040:2;4066:53;4111:7;4102:6;4091:9;4087:22;4066:53;:::i;:::-;4056:63;;4011:118;4196:2;4185:9;4181:18;4168:32;4227:18;4219:6;4216:30;4213:117;;;4249:79;;:::i;:::-;4213:117;4354:78;4424:7;4415:6;4404:9;4400:22;4354:78;:::i;:::-;4344:88;;4139:303;4481:2;4507:53;4552:7;4543:6;4532:9;4528:22;4507:53;:::i;:::-;4497:63;;4452:118;3602:975;;;;;;;:::o;4583:329::-;4642:6;4691:2;4679:9;4670:7;4666:23;4662:32;4659:119;;;4697:79;;:::i;:::-;4659:119;4817:1;4842:53;4887:7;4878:6;4867:9;4863:22;4842:53;:::i;:::-;4832:63;;4788:117;4583:329;;;;:::o;4918:118::-;5005:24;5023:5;5005:24;:::i;:::-;5000:3;4993:37;4918:118;;:::o;5042:222::-;5135:4;5173:2;5162:9;5158:18;5150:26;;5186:71;5254:1;5243:9;5239:17;5230:6;5186:71;:::i;:::-;5042:222;;;;:::o;5270:117::-;5379:1;5376;5369:12;5393:308;5455:4;5545:18;5537:6;5534:30;5531:56;;;5567:18;;:::i;:::-;5531:56;5605:29;5627:6;5605:29;:::i;:::-;5597:37;;5689:4;5683;5679:15;5671:23;;5393:308;;;:::o;5707:146::-;5804:6;5799:3;5794;5781:30;5845:1;5836:6;5831:3;5827:16;5820:27;5707:146;;;:::o;5859:425::-;5937:5;5962:66;5978:49;6020:6;5978:49;:::i;:::-;5962:66;:::i;:::-;5953:75;;6051:6;6044:5;6037:21;6089:4;6082:5;6078:16;6127:3;6118:6;6113:3;6109:16;6106:25;6103:112;;;6134:79;;:::i;:::-;6103:112;6224:54;6271:6;6266:3;6261;6224:54;:::i;:::-;5943:341;5859:425;;;;;:::o;6304:340::-;6360:5;6409:3;6402:4;6394:6;6390:17;6386:27;6376:122;;6417:79;;:::i;:::-;6376:122;6534:6;6521:20;6559:79;6634:3;6626:6;6619:4;6611:6;6607:17;6559:79;:::i;:::-;6550:88;;6366:278;6304:340;;;;:::o;6650:654::-;6728:6;6736;6785:2;6773:9;6764:7;6760:23;6756:32;6753:119;;;6791:79;;:::i;:::-;6753:119;6911:1;6936:53;6981:7;6972:6;6961:9;6957:22;6936:53;:::i;:::-;6926:63;;6882:117;7066:2;7055:9;7051:18;7038:32;7097:18;7089:6;7086:30;7083:117;;;7119:79;;:::i;:::-;7083:117;7224:63;7279:7;7270:6;7259:9;7255:22;7224:63;:::i;:::-;7214:73;;7009:288;6650:654;;;;;:::o;7310:118::-;7397:24;7415:5;7397:24;:::i;:::-;7392:3;7385:37;7310:118;;:::o;7434:222::-;7527:4;7565:2;7554:9;7550:18;7542:26;;7578:71;7646:1;7635:9;7631:17;7622:6;7578:71;:::i;:::-;7434:222;;;;:::o;7662:60::-;7690:3;7711:5;7704:12;;7662:60;;;:::o;7728:142::-;7778:9;7811:53;7829:34;7838:24;7856:5;7838:24;:::i;:::-;7829:34;:::i;:::-;7811:53;:::i;:::-;7798:66;;7728:142;;;:::o;7876:126::-;7926:9;7959:37;7990:5;7959:37;:::i;:::-;7946:50;;7876:126;;;:::o;8008:151::-;8083:9;8116:37;8147:5;8116:37;:::i;:::-;8103:50;;8008:151;;;:::o;8165:181::-;8277:62;8333:5;8277:62;:::i;:::-;8272:3;8265:75;8165:181;;:::o;8352:272::-;8470:4;8508:2;8497:9;8493:18;8485:26;;8521:96;8614:1;8603:9;8599:17;8590:6;8521:96;:::i;:::-;8352:272;;;;:::o;8630:146::-;8700:9;8733:37;8764:5;8733:37;:::i;:::-;8720:50;;8630:146;;;:::o;8782:171::-;8889:57;8940:5;8889:57;:::i;:::-;8884:3;8877:70;8782:171;;:::o;8959:262::-;9072:4;9110:2;9099:9;9095:18;9087:26;;9123:91;9211:1;9200:9;9196:17;9187:6;9123:91;:::i;:::-;8959:262;;;;:::o;9227:169::-;9311:11;9345:6;9340:3;9333:19;9385:4;9380:3;9376:14;9361:29;;9227:169;;;;:::o;9402:181::-;9542:33;9538:1;9530:6;9526:14;9519:57;9402:181;:::o;9589:366::-;9731:3;9752:67;9816:2;9811:3;9752:67;:::i;:::-;9745:74;;9828:93;9917:3;9828:93;:::i;:::-;9946:2;9941:3;9937:12;9930:19;;9589:366;;;:::o;9961:419::-;10127:4;10165:2;10154:9;10150:18;10142:26;;10214:9;10208:4;10204:20;10200:1;10189:9;10185:17;10178:47;10242:131;10368:4;10242:131;:::i;:::-;10234:139;;9961:419;;;:::o;10386:181::-;10526:33;10522:1;10514:6;10510:14;10503:57;10386:181;:::o;10573:366::-;10715:3;10736:67;10800:2;10795:3;10736:67;:::i;:::-;10729:74;;10812:93;10901:3;10812:93;:::i;:::-;10930:2;10925:3;10921:12;10914:19;;10573:366;;;:::o;10945:419::-;11111:4;11149:2;11138:9;11134:18;11126:26;;11198:9;11192:4;11188:20;11184:1;11173:9;11169:17;11162:47;11226:131;11352:4;11226:131;:::i;:::-;11218:139;;10945:419;;;:::o;11370:165::-;11510:17;11506:1;11498:6;11494:14;11487:41;11370:165;:::o;11541:366::-;11683:3;11704:67;11768:2;11763:3;11704:67;:::i;:::-;11697:74;;11780:93;11869:3;11780:93;:::i;:::-;11898:2;11893:3;11889:12;11882:19;;11541:366;;;:::o;11913:419::-;12079:4;12117:2;12106:9;12102:18;12094:26;;12166:9;12160:4;12156:20;12152:1;12141:9;12137:17;12130:47;12194:131;12320:4;12194:131;:::i;:::-;12186:139;;11913:419;;;:::o;12338:332::-;12459:4;12497:2;12486:9;12482:18;12474:26;;12510:71;12578:1;12567:9;12563:17;12554:6;12510:71;:::i;:::-;12591:72;12659:2;12648:9;12644:18;12635:6;12591:72;:::i;:::-;12338:332;;;;;:::o;12676:143::-;12733:5;12764:6;12758:13;12749:22;;12780:33;12807:5;12780:33;:::i;:::-;12676:143;;;;:::o;12825:351::-;12895:6;12944:2;12932:9;12923:7;12919:23;12915:32;12912:119;;;12950:79;;:::i;:::-;12912:119;13070:1;13095:64;13151:7;13142:6;13131:9;13127:22;13095:64;:::i;:::-;13085:74;;13041:128;12825:351;;;;:::o;13182:168::-;13322:20;13318:1;13310:6;13306:14;13299:44;13182:168;:::o;13356:366::-;13498:3;13519:67;13583:2;13578:3;13519:67;:::i;:::-;13512:74;;13595:93;13684:3;13595:93;:::i;:::-;13713:2;13708:3;13704:12;13697:19;;13356:366;;;:::o;13728:419::-;13894:4;13932:2;13921:9;13917:18;13909:26;;13981:9;13975:4;13971:20;13967:1;13956:9;13952:17;13945:47;14009:131;14135:4;14009:131;:::i;:::-;14001:139;;13728:419;;;:::o;14153:143::-;14210:5;14241:6;14235:13;14226:22;;14257:33;14284:5;14257:33;:::i;:::-;14153:143;;;;:::o;14302:351::-;14372:6;14421:2;14409:9;14400:7;14396:23;14392:32;14389:119;;;14427:79;;:::i;:::-;14389:119;14547:1;14572:64;14628:7;14619:6;14608:9;14604:22;14572:64;:::i;:::-;14562:74;;14518:128;14302:351;;;;:::o;14659:249::-;14734:4;14824:18;14816:6;14813:30;14810:56;;;14846:18;;:::i;:::-;14810:56;14896:4;14888:6;14884:17;14876:25;;14659:249;;;:::o;14932:665::-;15037:5;15062:79;15078:62;15133:6;15078:62;:::i;:::-;15062:79;:::i;:::-;15053:88;;15161:5;15214:4;15206:6;15202:17;15194:6;15190:30;15243:3;15235:6;15232:15;15229:122;;;15262:79;;:::i;:::-;15229:122;15377:6;15360:231;15394:6;15389:3;15386:15;15360:231;;;15469:3;15498:48;15542:3;15530:10;15498:48;:::i;:::-;15493:3;15486:61;15576:4;15571:3;15567:14;15560:21;;15436:155;15420:4;15415:3;15411:14;15404:21;;15360:231;;;15364:21;15043:554;;14932:665;;;;;:::o;15621:361::-;15701:5;15750:3;15743:4;15735:6;15731:17;15727:27;15717:122;;15758:79;;:::i;:::-;15717:122;15862:4;15884:92;15972:3;15964:6;15956;15884:92;:::i;:::-;15875:101;;15707:275;15621:361;;;;:::o;15988:398::-;16081:6;16130:3;16118:9;16109:7;16105:23;16101:33;16098:120;;;16137:79;;:::i;:::-;16098:120;16257:1;16282:87;16361:7;16352:6;16341:9;16337:22;16282:87;:::i;:::-;16272:97;;16228:151;15988:398;;;;:::o;16392:249::-;16467:4;16557:18;16549:6;16546:30;16543:56;;;16579:18;;:::i;:::-;16543:56;16629:4;16621:6;16617:17;16609:25;;16392:249;;;:::o;16665:665::-;16770:5;16795:79;16811:62;16866:6;16811:62;:::i;:::-;16795:79;:::i;:::-;16786:88;;16894:5;16947:4;16939:6;16935:17;16927:6;16923:30;16976:3;16968:6;16965:15;16962:122;;;16995:79;;:::i;:::-;16962:122;17110:6;17093:231;17127:6;17122:3;17119:15;17093:231;;;17202:3;17231:48;17275:3;17263:10;17231:48;:::i;:::-;17226:3;17219:61;17309:4;17304:3;17300:14;17293:21;;17169:155;17153:4;17148:3;17144:14;17137:21;;17093:231;;;17097:21;16776:554;;16665:665;;;;;:::o;17354:361::-;17434:5;17483:3;17476:4;17468:6;17464:17;17460:27;17450:122;;17491:79;;:::i;:::-;17450:122;17595:4;17617:92;17705:3;17697:6;17689;17617:92;:::i;:::-;17608:101;;17440:275;17354:361;;;;:::o;17721:398::-;17814:6;17863:3;17851:9;17842:7;17838:23;17834:33;17831:120;;;17870:79;;:::i;:::-;17831:120;17990:1;18015:87;18094:7;18085:6;18074:9;18070:22;18015:87;:::i;:::-;18005:97;;17961:151;17721:398;;;;:::o;18125:180::-;18173:77;18170:1;18163:88;18270:4;18267:1;18260:15;18294:4;18291:1;18284:15;18311:180;18359:77;18356:1;18349:88;18456:4;18453:1;18446:15;18480:4;18477:1;18470:15;18497:194;18537:4;18557:20;18575:1;18557:20;:::i;:::-;18552:25;;18591:20;18609:1;18591:20;:::i;:::-;18586:25;;18635:1;18632;18628:9;18620:17;;18659:1;18653:4;18650:11;18647:37;;;18664:18;;:::i;:::-;18647:37;18497:194;;;;:::o;18714:732::-;18821:5;18846:81;18862:64;18919:6;18862:64;:::i;:::-;18846:81;:::i;:::-;18837:90;;18947:5;18976:6;18969:5;18962:21;19010:4;19003:5;18999:16;18992:23;;19063:4;19055:6;19051:17;19043:6;19039:30;19092:3;19084:6;19081:15;19078:122;;;19111:79;;:::i;:::-;19078:122;19226:6;19209:231;19243:6;19238:3;19235:15;19209:231;;;19318:3;19347:48;19391:3;19379:10;19347:48;:::i;:::-;19342:3;19335:61;19425:4;19420:3;19416:14;19409:21;;19285:155;19269:4;19264:3;19260:14;19253:21;;19209:231;;;19213:21;18827:619;;18714:732;;;;;:::o;19469:385::-;19551:5;19600:3;19593:4;19585:6;19581:17;19577:27;19567:122;;19608:79;;:::i;:::-;19567:122;19718:6;19712:13;19743:105;19844:3;19836:6;19829:4;19821:6;19817:17;19743:105;:::i;:::-;19734:114;;19557:297;19469:385;;;;:::o;19860:554::-;19955:6;20004:2;19992:9;19983:7;19979:23;19975:32;19972:119;;;20010:79;;:::i;:::-;19972:119;20151:1;20140:9;20136:17;20130:24;20181:18;20173:6;20170:30;20167:117;;;20203:79;;:::i;:::-;20167:117;20308:89;20389:7;20380:6;20369:9;20365:22;20308:89;:::i;:::-;20298:99;;20101:306;19860:554;;;;:::o;20420:226::-;20560:34;20556:1;20548:6;20544:14;20537:58;20629:9;20624:2;20616:6;20612:15;20605:34;20420:226;:::o;20652:366::-;20794:3;20815:67;20879:2;20874:3;20815:67;:::i;:::-;20808:74;;20891:93;20980:3;20891:93;:::i;:::-;21009:2;21004:3;21000:12;20993:19;;20652:366;;;:::o;21024:419::-;21190:4;21228:2;21217:9;21213:18;21205:26;;21277:9;21271:4;21267:20;21263:1;21252:9;21248:17;21241:47;21305:131;21431:4;21305:131;:::i;:::-;21297:139;;21024:419;;;:::o;21449:85::-;21494:7;21523:5;21512:16;;21449:85;;;:::o;21540:158::-;21598:9;21631:61;21649:42;21658:32;21684:5;21658:32;:::i;:::-;21649:42;:::i;:::-;21631:61;:::i;:::-;21618:74;;21540:158;;;:::o;21704:147::-;21799:45;21838:5;21799:45;:::i;:::-;21794:3;21787:58;21704:147;;:::o;21857:348::-;21986:4;22024:2;22013:9;22009:18;22001:26;;22037:71;22105:1;22094:9;22090:17;22081:6;22037:71;:::i;:::-;22118:80;22194:2;22183:9;22179:18;22170:6;22118:80;:::i;:::-;21857:348;;;;;:::o;22211:332::-;22332:4;22370:2;22359:9;22355:18;22347:26;;22383:71;22451:1;22440:9;22436:17;22427:6;22383:71;:::i;:::-;22464:72;22532:2;22521:9;22517:18;22508:6;22464:72;:::i;:::-;22211:332;;;;;:::o;22549:90::-;22583:7;22626:5;22619:13;22612:21;22601:32;;22549:90;;;:::o;22645:116::-;22715:21;22730:5;22715:21;:::i;:::-;22708:5;22705:32;22695:60;;22751:1;22748;22741:12;22695:60;22645:116;:::o;22767:137::-;22821:5;22852:6;22846:13;22837:22;;22868:30;22892:5;22868:30;:::i;:::-;22767:137;;;;:::o;22910:345::-;22977:6;23026:2;23014:9;23005:7;23001:23;22997:32;22994:119;;;23032:79;;:::i;:::-;22994:119;23152:1;23177:61;23230:7;23221:6;23210:9;23206:22;23177:61;:::i;:::-;23167:71;;23123:125;22910:345;;;;:::o;23261:171::-;23401:23;23397:1;23389:6;23385:14;23378:47;23261:171;:::o;23438:366::-;23580:3;23601:67;23665:2;23660:3;23601:67;:::i;:::-;23594:74;;23677:93;23766:3;23677:93;:::i;:::-;23795:2;23790:3;23786:12;23779:19;;23438:366;;;:::o;23810:419::-;23976:4;24014:2;24003:9;23999:18;23991:26;;24063:9;24057:4;24053:20;24049:1;24038:9;24034:17;24027:47;24091:131;24217:4;24091:131;:::i;:::-;24083:139;;23810:419;;;:::o;24235:233::-;24274:3;24297:24;24315:5;24297:24;:::i;:::-;24288:33;;24343:66;24336:5;24333:77;24330:103;;24413:18;;:::i;:::-;24330:103;24460:1;24453:5;24449:13;24442:20;;24235:233;;;:::o;24474:99::-;24526:6;24560:5;24554:12;24544:22;;24474:99;;;:::o;24579:246::-;24660:1;24670:113;24684:6;24681:1;24678:13;24670:113;;;24769:1;24764:3;24760:11;24754:18;24750:1;24745:3;24741:11;24734:39;24706:2;24703:1;24699:10;24694:15;;24670:113;;;24817:1;24808:6;24803:3;24799:16;24792:27;24641:184;24579:246;;;:::o;24831:377::-;24919:3;24947:39;24980:5;24947:39;:::i;:::-;25002:71;25066:6;25061:3;25002:71;:::i;:::-;24995:78;;25082:65;25140:6;25135:3;25128:4;25121:5;25117:16;25082:65;:::i;:::-;25172:29;25194:6;25172:29;:::i;:::-;25167:3;25163:39;25156:46;;24923:285;24831:377;;;;:::o;25214:313::-;25327:4;25365:2;25354:9;25350:18;25342:26;;25414:9;25408:4;25404:20;25400:1;25389:9;25385:17;25378:47;25442:78;25515:4;25506:6;25442:78;:::i;:::-;25434:86;;25214:313;;;;:::o;25533:191::-;25573:3;25592:20;25610:1;25592:20;:::i;:::-;25587:25;;25626:20;25644:1;25626:20;:::i;:::-;25621:25;;25669:1;25666;25662:9;25655:16;;25690:3;25687:1;25684:10;25681:36;;;25697:18;;:::i;:::-;25681:36;25533:191;;;;:::o;25730:225::-;25870:34;25866:1;25858:6;25854:14;25847:58;25939:8;25934:2;25926:6;25922:15;25915:33;25730:225;:::o;25961:366::-;26103:3;26124:67;26188:2;26183:3;26124:67;:::i;:::-;26117:74;;26200:93;26289:3;26200:93;:::i;:::-;26318:2;26313:3;26309:12;26302:19;;25961:366;;;:::o;26333:419::-;26499:4;26537:2;26526:9;26522:18;26514:26;;26586:9;26580:4;26576:20;26572:1;26561:9;26557:17;26550:47;26614:131;26740:4;26614:131;:::i;:::-;26606:139;;26333:419;;;:::o;26758:182::-;26898:34;26894:1;26886:6;26882:14;26875:58;26758:182;:::o;26946:366::-;27088:3;27109:67;27173:2;27168:3;27109:67;:::i;:::-;27102:74;;27185:93;27274:3;27185:93;:::i;:::-;27303:2;27298:3;27294:12;27287:19;;26946:366;;;:::o;27318:419::-;27484:4;27522:2;27511:9;27507:18;27499:26;;27571:9;27565:4;27561:20;27557:1;27546:9;27542:17;27535:47;27599:131;27725:4;27599:131;:::i;:::-;27591:139;;27318:419;;;:::o;27743:332::-;27864:4;27902:2;27891:9;27887:18;27879:26;;27915:71;27983:1;27972:9;27968:17;27959:6;27915:71;:::i;:::-;27996:72;28064:2;28053:9;28049:18;28040:6;27996:72;:::i;:::-;27743:332;;;;;:::o;28081:442::-;28230:4;28268:2;28257:9;28253:18;28245:26;;28281:71;28349:1;28338:9;28334:17;28325:6;28281:71;:::i;:::-;28362:72;28430:2;28419:9;28415:18;28406:6;28362:72;:::i;:::-;28444;28512:2;28501:9;28497:18;28488:6;28444:72;:::i;:::-;28081:442;;;;;;:::o;28529:229::-;28669:34;28665:1;28657:6;28653:14;28646:58;28738:12;28733:2;28725:6;28721:15;28714:37;28529:229;:::o;28764:366::-;28906:3;28927:67;28991:2;28986:3;28927:67;:::i;:::-;28920:74;;29003:93;29092:3;29003:93;:::i;:::-;29121:2;29116:3;29112:12;29105:19;;28764:366;;;:::o;29136:419::-;29302:4;29340:2;29329:9;29325:18;29317:26;;29389:9;29383:4;29379:20;29375:1;29364:9;29360:17;29353:47;29417:131;29543:4;29417:131;:::i;:::-;29409:139;;29136:419;;;:::o;29561:225::-;29701:34;29697:1;29689:6;29685:14;29678:58;29770:8;29765:2;29757:6;29753:15;29746:33;29561:225;:::o;29792:366::-;29934:3;29955:67;30019:2;30014:3;29955:67;:::i;:::-;29948:74;;30031:93;30120:3;30031:93;:::i;:::-;30149:2;30144:3;30140:12;30133:19;;29792:366;;;:::o;30164:419::-;30330:4;30368:2;30357:9;30353:18;30345:26;;30417:9;30411:4;30407:20;30403:1;30392:9;30388:17;30381:47;30445:131;30571:4;30445:131;:::i;:::-;30437:139;;30164:419;;;:::o;30589:179::-;30729:31;30725:1;30717:6;30713:14;30706:55;30589:179;:::o;30774:366::-;30916:3;30937:67;31001:2;30996:3;30937:67;:::i;:::-;30930:74;;31013:93;31102:3;31013:93;:::i;:::-;31131:2;31126:3;31122:12;31115:19;;30774:366;;;:::o;31146:419::-;31312:4;31350:2;31339:9;31335:18;31327:26;;31399:9;31393:4;31389:20;31385:1;31374:9;31370:17;31363:47;31427:131;31553:4;31427:131;:::i;:::-;31419:139;;31146:419;;;:::o;31571:98::-;31622:6;31656:5;31650:12;31640:22;;31571:98;;;:::o;31675:147::-;31776:11;31813:3;31798:18;;31675:147;;;;:::o;31828:386::-;31932:3;31960:38;31992:5;31960:38;:::i;:::-;32014:88;32095:6;32090:3;32014:88;:::i;:::-;32007:95;;32111:65;32169:6;32164:3;32157:4;32150:5;32146:16;32111:65;:::i;:::-;32201:6;32196:3;32192:16;32185:23;;31936:278;31828:386;;;;:::o;32220:271::-;32350:3;32372:93;32461:3;32452:6;32372:93;:::i;:::-;32365:100;;32482:3;32475:10;;32220:271;;;;:::o
Swarm Source
ipfs://394eb58b784b327d0c40ac2d522e526be3662ba7c96bebe7eeb8abccc248d671
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.