ETH Price: $2,990.26 (+4.50%)
Gas: 2 Gwei

Contract

0xab71C468213ae6044c10577664933873960E176c
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Unstake Nfts201376442024-06-21 4:15:3515 days ago1718943335IN
0xab71C468...3960E176c
0 ETH0.00047333.09914063
Claim Token195577932024-04-01 1:41:3596 days ago1711935695IN
0xab71C468...3960E176c
0 ETH0.0010423717.87580036
Unstake Nfts191321572024-02-01 7:39:59155 days ago1706773199IN
0xab71C468...3960E176c
0 ETH0.0020573315.90516478
Unstake Nfts191184842024-01-30 9:39:23157 days ago1706607563IN
0xab71C468...3960E176c
0 ETH0.0021638524.59679718
Claim Token191184432024-01-30 9:30:59157 days ago1706607059IN
0xab71C468...3960E176c
0 ETH0.0015548120.61764931
Stake Nfts189766372024-01-10 12:45:47177 days ago1704890747IN
0xab71C468...3960E176c
0 ETH0.0032153423.60300354
Unstake Nfts189112532024-01-01 7:57:47186 days ago1704095867IN
0xab71C468...3960E176c
0 ETH0.002043148.88896898
Unstake Nfts186191832023-11-21 9:15:59227 days ago1700558159IN
0xab71C468...3960E176c
0 ETH0.0032344122.50985723
Stake Nfts179180082023-08-15 4:58:11326 days ago1692075491IN
0xab71C468...3960E176c
0 ETH0.0060335811.81964285
Claim Token178234332023-08-01 23:27:35339 days ago1690932455IN
0xab71C468...3960E176c
0 ETH0.0016841122.33220345
Unstake Nfts174638952023-06-12 12:11:23389 days ago1686571883IN
0xab71C468...3960E176c
0 ETH0.0021842415
Unstake Nfts173460612023-05-26 21:53:11406 days ago1685137991IN
0xab71C468...3960E176c
0 ETH0.003346131.84554582
Claim Token173460542023-05-26 21:51:47406 days ago1685137907IN
0xab71C468...3960E176c
0 ETH0.0016886928.95973332
Unstake Nfts172979462023-05-20 3:24:35413 days ago1684553075IN
0xab71C468...3960E176c
0 ETH0.0069333831.83636088
Claim Token172979432023-05-20 3:23:59413 days ago1684553039IN
0xab71C468...3960E176c
0 ETH0.0033931433.5267816
Unstake Nfts172615562023-05-15 0:10:35418 days ago1684109435IN
0xab71C468...3960E176c
0 ETH0.008049234.77834445
Claim Token172615552023-05-15 0:10:23418 days ago1684109423IN
0xab71C468...3960E176c
0 ETH0.004262136.02582191
Unstake Nfts170096422023-04-09 8:43:35453 days ago1681029815IN
0xab71C468...3960E176c
0 ETH0.0023198422.08093178
Claim Token170096382023-04-09 8:42:47453 days ago1681029767IN
0xab71C468...3960E176c
0 ETH0.00145719.32065532
Claim Token168116202023-03-12 11:22:35481 days ago1678620155IN
0xab71C468...3960E176c
0 ETH0.0016763718.09789589
Unstake Nfts167314432023-03-01 4:38:11493 days ago1677645491IN
0xab71C468...3960E176c
0 ETH0.0021329517.4584928
Unstake Nfts167124762023-02-26 12:41:59495 days ago1677415319IN
0xab71C468...3960E176c
0 ETH0.0042826818.45346986
Unstake Nfts167105292023-02-26 6:08:47496 days ago1677391727IN
0xab71C468...3960E176c
0 ETH0.0019133418.55474336
Unstake Nfts167094252023-02-26 2:24:47496 days ago1677378287IN
0xab71C468...3960E176c
0 ETH0.0017957317.09234292
Claim Token167094232023-02-26 2:24:23496 days ago1677378263IN
0xab71C468...3960E176c
0 ETH0.0013574118
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TsubasaStaking

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 5 : TsubasaStaking.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";

contract TsubasaStaking is IERC721Receiver {
    /**
     * admin address
     */
    address public admin;
    /**
     * how many tokens can be rewarded per second per NFT
     */
    uint256 public rewardRate;
    /**
     * can user stake NFTs
     */
    bool public stakeEnabled;
    /**
     * when does the reward start
     */
    uint256 public rewardStartTimestamp;
    /**
     * nft address
     */
    address public nftAddress;
    /**
     * ERC20 token address
     */
    address public tokenAddress;
    /**
     * nft id => owner
     */
    mapping(uint256 => address) public nftOwners;
    /**
     * nft id => reward start time
     */
    mapping(uint256 => uint256) public nftTimestamp;
    /**
     * address => staked nft ids
     */
    mapping(address => uint256[]) public userNftIds;

    modifier onlyAdmin() {
        require(msg.sender == admin, "Caller is NOT admin");
        _;
    }

    constructor(
        uint256 rewardRate_,
        address nftAddress_,
        address tokenAddress_
    ) {
        admin = msg.sender;
        stakeEnabled = false;
        rewardRate = rewardRate_;
        rewardStartTimestamp = block.timestamp;
        nftAddress = nftAddress_;
        tokenAddress = tokenAddress_;
    }

    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address, /* operator */
        address from,
        uint256 tokenId,
        bytes calldata /* data */
    ) external override returns (bytes4) {
        require(stakeEnabled, "Stake disabled");
        // only specified nft contract can call this api
        require(msg.sender == nftAddress, "Wrong NFT");
        // mint to this contract directly is not allowed
        require(from != address(0), "Wrong sender address");
        // confirm nft received
        require(
            IERC721(nftAddress).ownerOf(tokenId) == address(this),
            "NFT NOT received"
        );
        // check nft stake information is empty
        require(nftOwners[tokenId] == address(0), "NFT already staked");
        _stakeNft(tokenId, from);
        return IERC721Receiver.onERC721Received.selector;
    }

    function _stakeNft(uint256 nftId, address owner) private {
        nftOwners[nftId] = owner;
        nftTimestamp[nftId] = block.timestamp;
        userNftIds[owner].push(nftId);
    }

    function stakeApproved() public view returns (bool) {
        return IERC721(nftAddress).isApprovedForAll(msg.sender, address(this));
    }

    function stakeNfts(uint256[] calldata nftIds) public {
        require(stakeApproved(), "Operation unapproved");
        _checkNftOwners(nftIds, msg.sender);
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            IERC721(nftAddress).safeTransferFrom(
                msg.sender,
                address(this),
                nftId
            );
        }
    }

    function getStakedNftIds(address owner)
        public
        view
        returns (uint256[] memory)
    {
        return userNftIds[owner];
    }

    function unstakeNfts(uint256[] calldata nftIds) public {
        _checkNftOriginalOwners(nftIds, msg.sender);
        uint256 token = _calculateRewards(nftIds);
        _transferToken(msg.sender, token);
        _returnNfts(nftIds, msg.sender);
    }

    function claimableToken() public view returns (uint256) {
        uint256[] memory nftIds = userNftIds[msg.sender];
        return _calculateRewards(nftIds);
    }

    function claimToken() public {
        uint256[] memory nftIds = userNftIds[msg.sender];
        uint256 token = _calculateRewards(nftIds);
        _resetRewardStartTime(nftIds);
        _transferToken(msg.sender, token);
    }

    function setAdmin(address admin_) public onlyAdmin {
        admin = admin_;
    }

    function setNftAddress(address nftAddress_) public onlyAdmin {
        nftAddress = nftAddress_;
    }

    function setTokenAddress(address tokenAddress_) public onlyAdmin {
        tokenAddress = tokenAddress_;
    }

    function setStakeEnabled(bool stakeEnabled_) public onlyAdmin {
        stakeEnabled = stakeEnabled_;
    }

    function setRewardRate(uint256 rewardRate_) public onlyAdmin {
        rewardRate = rewardRate_;
    }

    function setRewardStartTimestamp(uint256 rewardStartTimestamp_)
        public
        onlyAdmin
    {
        rewardStartTimestamp = rewardStartTimestamp_;
    }

    function returnNfts(uint256[] calldata nftIds) public onlyAdmin {
        for (uint256 i = 0; i < nftIds.length; i++) {
            returnNft(nftIds[i]);
        }
    }

    function returnNft(uint256 nftId) public onlyAdmin {
        _returnNft(nftId, nftOwners[nftId]);
    }

    function returnNftToAddress(uint256 nftId, address owner) public onlyAdmin {
        _returnNft(nftId, owner);
    }

    function returnSpecifiedNftToAddress(
        address nftContract,
        uint256 nftId,
        address owner
    ) public onlyAdmin {
        _transferNft(nftContract, nftId, owner);
    }

    function withdrawEther() public onlyAdmin {
        uint256 balance = address(this).balance;
        require(balance > 0, "Balance is 0");
        payable(msg.sender).transfer(balance);
    }

    function withdrawToken(uint256 amount) public onlyAdmin {
        _transferToken(msg.sender, amount);
    }

    function withdrawAllToken() public onlyAdmin {
        withdrawToken(tokenBalance());
    }

    function tokenBalance() public view returns (uint256) {
        return IERC20(tokenAddress).balanceOf(address(this));
    }

    function _checkNftOwners(uint256[] memory nftIds, address owner)
        private
        view
    {
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            require(
                IERC721(nftAddress).ownerOf(nftId) == owner,
                "Wrong NFT owner"
            );
        }
    }

    function _checkNftOriginalOwners(uint256[] memory nftIds, address owner)
        private
        view
    {
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            require(nftOwners[nftId] == owner, "Wrong NFT owner");
        }
    }

    function _calculateRewards(uint256[] memory nftIds)
        private
        view
        returns (uint256)
    {
        uint256 currentTime = block.timestamp;
        if (currentTime <= rewardStartTimestamp) {
            return 0;
        }
        uint256 rewardTime = 0;
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            uint256 startTime = nftTimestamp[nftId];
            if (startTime < rewardStartTimestamp) {
                startTime = rewardStartTimestamp;
            }
            if (startTime >= currentTime) continue;
            rewardTime = rewardTime + (currentTime - startTime);
        }
        return rewardTime * rewardRate;
    }

    function _resetRewardStartTime(uint256[] memory nftIds) private {
        uint256 currentTime = block.timestamp;
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            uint256 time = nftTimestamp[nftId];
            if (time >= currentTime) continue;
            nftTimestamp[nftId] = currentTime;
        }
    }

    function _transferToken(address to, uint256 amount) private {
        require(
            amount <= tokenBalance(),
            "Insufficient token in the pool, contact admin"
        );
        if (amount > 0) {
            IERC20(tokenAddress).transfer(to, amount);
        }
    }

    function _returnNfts(uint256[] memory nftIds, address owner) private {
        for (uint256 i = 0; i < nftIds.length; i++) {
            uint256 nftId = nftIds[i];
            _returnNft(nftId, owner);
        }
    }

    function _returnNft(uint256 nftId, address to) private {
        _removeNftIdOfUser(to, nftId);
        delete nftOwners[nftId];
        _transferNft(nftAddress, nftId, to);
    }

    function _transferNft(
        address nftContract,
        uint256 nftId,
        address to
    ) private {
        IERC721(nftContract).safeTransferFrom(address(this), to, nftId);
    }

    function _removeNftIdOfUser(address owner, uint256 nftId) private {
        for (uint256 i = 0; i < userNftIds[owner].length; i++) {
            if (userNftIds[owner][i] == nftId) {
                userNftIds[owner][i] = userNftIds[owner][
                    userNftIds[owner].length - 1
                ];
                userNftIds[owner].pop();
                return;
            }
        }
    }
}

File 2 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

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

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

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

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

    /**
     * @dev 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 3 of 5 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @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`, 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 be 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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

File 4 of 5 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

File 5 of 5 : IERC165.sol
// SPDX-License-Identifier: MIT
// 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);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"rewardRate_","type":"uint256"},{"internalType":"address","name":"nftAddress_","type":"address"},{"internalType":"address","name":"tokenAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimableToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getStakedNftIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"returnNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"returnNftToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"returnNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"returnSpecifiedNftToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin_","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftAddress_","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardRate_","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardStartTimestamp_","type":"uint256"}],"name":"setRewardStartTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"stakeEnabled_","type":"bool"}],"name":"setStakeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress_","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userNftIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAllToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620031de380380620031de833981810160405281019062000037919062000159565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548160ff021916908315150217905550826001819055504260038190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000221565b6000815190506200013c81620001ed565b92915050565b600081519050620001538162000207565b92915050565b6000806000606084860312156200016f57600080fd5b60006200017f8682870162000142565b935050602062000192868287016200012b565b9250506040620001a5868287016200012b565b9150509250925092565b6000620001bc82620001c3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620001f881620001af565b81146200020457600080fd5b50565b6200021281620001e3565b81146200021e57600080fd5b50565b612fad80620002316000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806374d5b050116101045780639e1a4d19116100a2578063f6d6d5aa11610071578063f6d6d5aa146104dd578063f851a440146104fb578063fcb685bc14610519578063fed0138a14610537576101da565b80639e1a4d19146104575780639e447fc614610475578063b33922ea14610491578063bbd94c2f146104ad576101da565b8063823c27ff116100de578063823c27ff146103e557806382461948146104015780639a36485c1461041d5780639d76ea5814610439576101da565b806374d5b0501461038d5780637b0a47ee146103ab578063822c0eab146103c9576101da565b80633a5451581161017c578063559b12fe1161014b578063559b12fe146103195780635bf8633a14610349578063704b6c02146103675780637362377b14610383576101da565b80633a545158146102b95780633b17c736146102d55780634451d89f146102f357806350baa622146102fd576101da565b806314870d2c116101b857806314870d2c14610247578063150b7a02146102515780631e5384ab1461028157806326a4e8d21461029d576101da565b806309d77f0e146101df5780630ac6fbd8146101fb5780630b102d1a1461022b575b600080fd5b6101f960048036038101906101f49190612654565b610567565b005b61021560048036038101906102109190612532565b610635565b6040516102229190612b3d565b60405180910390f35b61024560048036038101906102409190612460565b610666565b005b61024f610738565b005b61026b600480360381019061026691906124b2565b6107d8565b60405161027891906129e2565b60405180910390f35b61029b6004803603810190610296919061256e565b610b00565b005b6102b760048036038101906102b29190612460565b610b9e565b005b6102d360048036038101906102ce91906126a6565b610c70565b005b6102dd610d0c565b6040516102ea91906129c7565b60405180910390f35b6102fb610d1f565b005b61031760048036038101906103129190612654565b610dd5565b005b610333600480360381019061032e9190612460565b610e70565b60405161034091906129a5565b60405180910390f35b610351610f07565b60405161035e9190612901565b60405180910390f35b610381600480360381019061037c9190612460565b610f2d565b005b61038b610ffe565b005b61039561111e565b6040516103a291906129c7565b60405180910390f35b6103b36111d2565b6040516103c09190612b3d565b60405180910390f35b6103e360048036038101906103de91906125bd565b6111d8565b005b6103ff60048036038101906103fa9190612654565b6112cb565b005b61041b60048036038101906104169190612602565b611363565b005b610437600480360381019061043291906125bd565b61140e565b005b61044161159c565b60405161044e9190612901565b60405180910390f35b61045f6115c2565b60405161046c9190612b3d565b60405180910390f35b61048f600480360381019061048a9190612654565b611674565b005b6104ab60048036038101906104a691906125bd565b61170c565b005b6104c760048036038101906104c29190612654565b611808565b6040516104d49190612901565b60405180910390f35b6104e561183b565b6040516104f29190612b3d565b60405180910390f35b6105036118dd565b6040516105109190612901565b60405180910390f35b610521611901565b60405161052e9190612b3d565b60405180910390f35b610551600480360381019061054c9190612654565b611907565b60405161055e9190612b3d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec90612add565b60405180910390fd5b610632816006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661191f565b50565b6008602052816000526040600020818154811061065157600080fd5b90600052602060002001600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612add565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90612add565b60405180910390fd5b6107d66107d16115c2565b610dd5565b565b6000600260009054906101000a900460ff16610829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610820906129fd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612a5d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b815260040161099b9190612b3d565b60206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90612a1d565b60405180910390fd5b610aed8486611990565b63150b7a0260e01b905095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612add565b60405180910390fd5b610b99838383611a64565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612add565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612add565b60405180910390fd5b610d08828261191f565b5050565b600260009054906101000a900460ff1681565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610daa57602002820191906000526020600020905b815481526020019060010190808311610d96575b505050505090506000610dbc82611ad8565b9050610dc782611bc1565b610dd13382611c70565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90612add565b60405180910390fd5b610e6d3382611c70565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610efb57602002820191906000526020600020905b815481526020019060010190808311610ee7575b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290612add565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390612add565b60405180910390fd5b6000479050600081116110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a9d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561111a573d6000803e3d6000fd5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b815260040161117d92919061291c565b60206040518083038186803b15801561119557600080fd5b505afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd919061262b565b905090565b60015481565b611223828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611d78565b600061126f838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611ad8565b905061127b3382611c70565b6112c6838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611e83565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612add565b60405180910390fd5b8060038190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612add565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b61141661111e565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a3d565b60405180910390fd5b6114a0828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611ef7565b60005b828290508110156115975760008383838181106114e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161155193929190612945565b600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505050808061158f90612cfa565b9150506114a3565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161161f9190612901565b60206040518083038186803b15801561163757600080fd5b505afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f919061267d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612add565b60405180910390fd5b8060018190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612add565b60405180910390fd5b60005b82829050811015611803576117f08383838181106117e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610567565b80806117fb90612cfa565b91505061179d565b505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156118c757602002820191906000526020600020905b8154815260200190600101908083116118b3575b505050505090506118d781611ad8565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60076020528060005260406000206000915090505481565b6119298183612079565b6006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561198c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383611a64565b5050565b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600084815260200190815260200160002081905550600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150555050565b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611aa193929190612945565b600060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b50505050505050565b6000804290506003548111611af1576000915050611bbc565b6000805b8451811015611ba8576000858281518110611b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050600354811015611b6b5760035490505b848110611b79575050611b95565b8085611b859190612c52565b84611b909190612ba2565b935050505b8080611ba090612cfa565b915050611af5565b5060015481611bb79190612bf8565b925050505b919050565b600042905060005b8251811015611c6b576000838281518110611c0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050838110611c3d575050611c58565b83600760008481526020019081526020016000208190555050505b8080611c6390612cfa565b915050611bc9565b505050565b611c786115c2565b811115611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190612a7d565b60405180910390fd5b6000811115611d7457600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2092919061297c565b602060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d72919061262b565b505b5050565b60005b8251811015611e7e576000838281518110611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612abd565b60405180910390fd5b508080611e7690612cfa565b915050611d7b565b505050565b60005b8251811015611ef2576000838281518110611eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611ede818461191f565b508080611eea90612cfa565b915050611e86565b505050565b60005b8251811015612074576000838281518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fba9190612b3d565b60206040518083038186803b158015611fd257600080fd5b505afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612abd565b60405180910390fd5b50808061206c90612cfa565b915050611efa565b505050565b60005b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123485781600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061213e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154141561233557600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506121dd9190612c52565b81548110612214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612296577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612319577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590555061234a565b808061234090612cfa565b91505061207c565b505b5050565b60008135905061235d81612f32565b92915050565b60008151905061237281612f32565b92915050565b60008083601f84011261238a57600080fd5b8235905067ffffffffffffffff8111156123a357600080fd5b6020830191508360208202830111156123bb57600080fd5b9250929050565b6000813590506123d181612f49565b92915050565b6000815190506123e681612f49565b92915050565b60008083601f8401126123fe57600080fd5b8235905067ffffffffffffffff81111561241757600080fd5b60208301915083600182028301111561242f57600080fd5b9250929050565b60008135905061244581612f60565b92915050565b60008151905061245a81612f60565b92915050565b60006020828403121561247257600080fd5b60006124808482850161234e565b91505092915050565b60006020828403121561249b57600080fd5b60006124a984828501612363565b91505092915050565b6000806000806000608086880312156124ca57600080fd5b60006124d88882890161234e565b95505060206124e98882890161234e565b94505060406124fa88828901612436565b935050606086013567ffffffffffffffff81111561251757600080fd5b612523888289016123ec565b92509250509295509295909350565b6000806040838503121561254557600080fd5b60006125538582860161234e565b925050602061256485828601612436565b9150509250929050565b60008060006060848603121561258357600080fd5b60006125918682870161234e565b93505060206125a286828701612436565b92505060406125b38682870161234e565b9150509250925092565b600080602083850312156125d057600080fd5b600083013567ffffffffffffffff8111156125ea57600080fd5b6125f685828601612378565b92509250509250929050565b60006020828403121561261457600080fd5b6000612622848285016123c2565b91505092915050565b60006020828403121561263d57600080fd5b600061264b848285016123d7565b91505092915050565b60006020828403121561266657600080fd5b600061267484828501612436565b91505092915050565b60006020828403121561268f57600080fd5b600061269d8482850161244b565b91505092915050565b600080604083850312156126b957600080fd5b60006126c785828601612436565b92505060206126d88582860161234e565b9150509250929050565b60006126ee83836128e3565b60208301905092915050565b61270381612c86565b82525050565b600061271482612b68565b61271e8185612b80565b935061272983612b58565b8060005b8381101561275a57815161274188826126e2565b975061274c83612b73565b92505060018101905061272d565b5085935050505092915050565b61277081612c98565b82525050565b61277f81612ca4565b82525050565b6000612792600e83612b91565b915061279d82612d72565b602082019050919050565b60006127b5601283612b91565b91506127c082612d9b565b602082019050919050565b60006127d8601483612b91565b91506127e382612dc4565b602082019050919050565b60006127fb601483612b91565b915061280682612ded565b602082019050919050565b600061281e602d83612b91565b915061282982612e16565b604082019050919050565b6000612841600c83612b91565b915061284c82612e65565b602082019050919050565b6000612864600f83612b91565b915061286f82612e8e565b602082019050919050565b6000612887601383612b91565b915061289282612eb7565b602082019050919050565b60006128aa600983612b91565b91506128b582612ee0565b602082019050919050565b60006128cd601083612b91565b91506128d882612f09565b602082019050919050565b6128ec81612cf0565b82525050565b6128fb81612cf0565b82525050565b600060208201905061291660008301846126fa565b92915050565b600060408201905061293160008301856126fa565b61293e60208301846126fa565b9392505050565b600060608201905061295a60008301866126fa565b61296760208301856126fa565b61297460408301846128f2565b949350505050565b600060408201905061299160008301856126fa565b61299e60208301846128f2565b9392505050565b600060208201905081810360008301526129bf8184612709565b905092915050565b60006020820190506129dc6000830184612767565b92915050565b60006020820190506129f76000830184612776565b92915050565b60006020820190508181036000830152612a1681612785565b9050919050565b60006020820190508181036000830152612a36816127a8565b9050919050565b60006020820190508181036000830152612a56816127cb565b9050919050565b60006020820190508181036000830152612a76816127ee565b9050919050565b60006020820190508181036000830152612a9681612811565b9050919050565b60006020820190508181036000830152612ab681612834565b9050919050565b60006020820190508181036000830152612ad681612857565b9050919050565b60006020820190508181036000830152612af68161287a565b9050919050565b60006020820190508181036000830152612b168161289d565b9050919050565b60006020820190508181036000830152612b36816128c0565b9050919050565b6000602082019050612b5260008301846128f2565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612bad82612cf0565b9150612bb883612cf0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bed57612bec612d43565b5b828201905092915050565b6000612c0382612cf0565b9150612c0e83612cf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c4757612c46612d43565b5b828202905092915050565b6000612c5d82612cf0565b9150612c6883612cf0565b925082821015612c7b57612c7a612d43565b5b828203905092915050565b6000612c9182612cd0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d0582612cf0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3857612d37612d43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f5374616b652064697361626c6564000000000000000000000000000000000000600082015250565b7f4e465420616c7265616479207374616b65640000000000000000000000000000600082015250565b7f4f7065726174696f6e20756e617070726f766564000000000000000000000000600082015250565b7f57726f6e672073656e6465722061646472657373000000000000000000000000600082015250565b7f496e73756666696369656e7420746f6b656e20696e2074686520706f6f6c2c2060008201527f636f6e746163742061646d696e00000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f57726f6e67204e4654206f776e65720000000000000000000000000000000000600082015250565b7f43616c6c6572206973204e4f542061646d696e00000000000000000000000000600082015250565b7f57726f6e67204e46540000000000000000000000000000000000000000000000600082015250565b7f4e4654204e4f5420726563656976656400000000000000000000000000000000600082015250565b612f3b81612c86565b8114612f4657600080fd5b50565b612f5281612c98565b8114612f5d57600080fd5b50565b612f6981612cf0565b8114612f7457600080fd5b5056fea26469706673582212202751a77fcef2967782d4e2a8e29c80f1c4da90718987a6cfc64c28018c9bb6b864736f6c63430008040033000000000000000000000000000000000000000000000000003b363eba41aaab000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806374d5b050116101045780639e1a4d19116100a2578063f6d6d5aa11610071578063f6d6d5aa146104dd578063f851a440146104fb578063fcb685bc14610519578063fed0138a14610537576101da565b80639e1a4d19146104575780639e447fc614610475578063b33922ea14610491578063bbd94c2f146104ad576101da565b8063823c27ff116100de578063823c27ff146103e557806382461948146104015780639a36485c1461041d5780639d76ea5814610439576101da565b806374d5b0501461038d5780637b0a47ee146103ab578063822c0eab146103c9576101da565b80633a5451581161017c578063559b12fe1161014b578063559b12fe146103195780635bf8633a14610349578063704b6c02146103675780637362377b14610383576101da565b80633a545158146102b95780633b17c736146102d55780634451d89f146102f357806350baa622146102fd576101da565b806314870d2c116101b857806314870d2c14610247578063150b7a02146102515780631e5384ab1461028157806326a4e8d21461029d576101da565b806309d77f0e146101df5780630ac6fbd8146101fb5780630b102d1a1461022b575b600080fd5b6101f960048036038101906101f49190612654565b610567565b005b61021560048036038101906102109190612532565b610635565b6040516102229190612b3d565b60405180910390f35b61024560048036038101906102409190612460565b610666565b005b61024f610738565b005b61026b600480360381019061026691906124b2565b6107d8565b60405161027891906129e2565b60405180910390f35b61029b6004803603810190610296919061256e565b610b00565b005b6102b760048036038101906102b29190612460565b610b9e565b005b6102d360048036038101906102ce91906126a6565b610c70565b005b6102dd610d0c565b6040516102ea91906129c7565b60405180910390f35b6102fb610d1f565b005b61031760048036038101906103129190612654565b610dd5565b005b610333600480360381019061032e9190612460565b610e70565b60405161034091906129a5565b60405180910390f35b610351610f07565b60405161035e9190612901565b60405180910390f35b610381600480360381019061037c9190612460565b610f2d565b005b61038b610ffe565b005b61039561111e565b6040516103a291906129c7565b60405180910390f35b6103b36111d2565b6040516103c09190612b3d565b60405180910390f35b6103e360048036038101906103de91906125bd565b6111d8565b005b6103ff60048036038101906103fa9190612654565b6112cb565b005b61041b60048036038101906104169190612602565b611363565b005b610437600480360381019061043291906125bd565b61140e565b005b61044161159c565b60405161044e9190612901565b60405180910390f35b61045f6115c2565b60405161046c9190612b3d565b60405180910390f35b61048f600480360381019061048a9190612654565b611674565b005b6104ab60048036038101906104a691906125bd565b61170c565b005b6104c760048036038101906104c29190612654565b611808565b6040516104d49190612901565b60405180910390f35b6104e561183b565b6040516104f29190612b3d565b60405180910390f35b6105036118dd565b6040516105109190612901565b60405180910390f35b610521611901565b60405161052e9190612b3d565b60405180910390f35b610551600480360381019061054c9190612654565b611907565b60405161055e9190612b3d565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ec90612add565b60405180910390fd5b610632816006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661191f565b50565b6008602052816000526040600020818154811061065157600080fd5b90600052602060002001600091509150505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106eb90612add565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bd90612add565b60405180910390fd5b6107d66107d16115c2565b610dd5565b565b6000600260009054906101000a900460ff16610829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610820906129fd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090612afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092090612a5d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b815260040161099b9190612b3d565b60206040518083038186803b1580156109b357600080fd5b505afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890612b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ada90612a1d565b60405180910390fd5b610aed8486611990565b63150b7a0260e01b905095945050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612add565b60405180910390fd5b610b99838383611a64565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2390612add565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590612add565b60405180910390fd5b610d08828261191f565b5050565b600260009054906101000a900460ff1681565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610daa57602002820191906000526020600020905b815481526020019060010190808311610d96575b505050505090506000610dbc82611ad8565b9050610dc782611bc1565b610dd13382611c70565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a90612add565b60405180910390fd5b610e6d3382611c70565b50565b6060600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610efb57602002820191906000526020600020905b815481526020019060010190808311610ee7575b50505050509050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290612add565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108390612add565b60405180910390fd5b6000479050600081116110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a9d565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561111a573d6000803e3d6000fd5b5050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b815260040161117d92919061291c565b60206040518083038186803b15801561119557600080fd5b505afa1580156111a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cd919061262b565b905090565b60015481565b611223828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611d78565b600061126f838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611ad8565b905061127b3382611c70565b6112c6838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611e83565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612add565b60405180910390fd5b8060038190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e890612add565b60405180910390fd5b80600260006101000a81548160ff02191690831515021790555050565b61141661111e565b611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90612a3d565b60405180910390fd5b6114a0828280806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611ef7565b60005b828290508110156115975760008383838181106114e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201359050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330846040518463ffffffff1660e01b815260040161155193929190612945565b600060405180830381600087803b15801561156b57600080fd5b505af115801561157f573d6000803e3d6000fd5b5050505050808061158f90612cfa565b9150506114a3565b505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161161f9190612901565b60206040518083038186803b15801561163757600080fd5b505afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f919061267d565b905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990612add565b60405180910390fd5b8060018190555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190612add565b60405180910390fd5b60005b82829050811015611803576117f08383838181106117e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135610567565b80806117fb90612cfa565b91505061179d565b505050565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156118c757602002820191906000526020600020905b8154815260200190600101908083116118b3575b505050505090506118d781611ad8565b91505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60076020528060005260406000206000915090505481565b6119298183612079565b6006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561198c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168383611a64565b5050565b806006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600084815260200190815260200160002081905550600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150555050565b8273ffffffffffffffffffffffffffffffffffffffff166342842e0e3083856040518463ffffffff1660e01b8152600401611aa193929190612945565b600060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b50505050505050565b6000804290506003548111611af1576000915050611bbc565b6000805b8451811015611ba8576000858281518110611b39577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050600354811015611b6b5760035490505b848110611b79575050611b95565b8085611b859190612c52565b84611b909190612ba2565b935050505b8080611ba090612cfa565b915050611af5565b5060015481611bb79190612bf8565b925050505b919050565b600042905060005b8251811015611c6b576000838281518110611c0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600060076000838152602001908152602001600020549050838110611c3d575050611c58565b83600760008481526020019081526020016000208190555050505b8080611c6390612cfa565b915050611bc9565b505050565b611c786115c2565b811115611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb190612a7d565b60405180910390fd5b6000811115611d7457600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611d2092919061297c565b602060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d72919061262b565b505b5050565b60005b8251811015611e7e576000838281518110611dbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190612abd565b60405180910390fd5b508080611e7690612cfa565b915050611d7b565b505050565b60005b8251811015611ef2576000838281518110611eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611ede818461191f565b508080611eea90612cfa565b915050611e86565b505050565b60005b8251811015612074576000838281518110611f3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401611fba9190612b3d565b60206040518083038186803b158015611fd257600080fd5b505afa158015611fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200a9190612489565b73ffffffffffffffffffffffffffffffffffffffff1614612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790612abd565b60405180910390fd5b50808061206c90612cfa565b915050611efa565b505050565b60005b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156123485781600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061213e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154141561233557600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506121dd9190612c52565b81548110612214577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612296577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480612319577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590555061234a565b808061234090612cfa565b91505061207c565b505b5050565b60008135905061235d81612f32565b92915050565b60008151905061237281612f32565b92915050565b60008083601f84011261238a57600080fd5b8235905067ffffffffffffffff8111156123a357600080fd5b6020830191508360208202830111156123bb57600080fd5b9250929050565b6000813590506123d181612f49565b92915050565b6000815190506123e681612f49565b92915050565b60008083601f8401126123fe57600080fd5b8235905067ffffffffffffffff81111561241757600080fd5b60208301915083600182028301111561242f57600080fd5b9250929050565b60008135905061244581612f60565b92915050565b60008151905061245a81612f60565b92915050565b60006020828403121561247257600080fd5b60006124808482850161234e565b91505092915050565b60006020828403121561249b57600080fd5b60006124a984828501612363565b91505092915050565b6000806000806000608086880312156124ca57600080fd5b60006124d88882890161234e565b95505060206124e98882890161234e565b94505060406124fa88828901612436565b935050606086013567ffffffffffffffff81111561251757600080fd5b612523888289016123ec565b92509250509295509295909350565b6000806040838503121561254557600080fd5b60006125538582860161234e565b925050602061256485828601612436565b9150509250929050565b60008060006060848603121561258357600080fd5b60006125918682870161234e565b93505060206125a286828701612436565b92505060406125b38682870161234e565b9150509250925092565b600080602083850312156125d057600080fd5b600083013567ffffffffffffffff8111156125ea57600080fd5b6125f685828601612378565b92509250509250929050565b60006020828403121561261457600080fd5b6000612622848285016123c2565b91505092915050565b60006020828403121561263d57600080fd5b600061264b848285016123d7565b91505092915050565b60006020828403121561266657600080fd5b600061267484828501612436565b91505092915050565b60006020828403121561268f57600080fd5b600061269d8482850161244b565b91505092915050565b600080604083850312156126b957600080fd5b60006126c785828601612436565b92505060206126d88582860161234e565b9150509250929050565b60006126ee83836128e3565b60208301905092915050565b61270381612c86565b82525050565b600061271482612b68565b61271e8185612b80565b935061272983612b58565b8060005b8381101561275a57815161274188826126e2565b975061274c83612b73565b92505060018101905061272d565b5085935050505092915050565b61277081612c98565b82525050565b61277f81612ca4565b82525050565b6000612792600e83612b91565b915061279d82612d72565b602082019050919050565b60006127b5601283612b91565b91506127c082612d9b565b602082019050919050565b60006127d8601483612b91565b91506127e382612dc4565b602082019050919050565b60006127fb601483612b91565b915061280682612ded565b602082019050919050565b600061281e602d83612b91565b915061282982612e16565b604082019050919050565b6000612841600c83612b91565b915061284c82612e65565b602082019050919050565b6000612864600f83612b91565b915061286f82612e8e565b602082019050919050565b6000612887601383612b91565b915061289282612eb7565b602082019050919050565b60006128aa600983612b91565b91506128b582612ee0565b602082019050919050565b60006128cd601083612b91565b91506128d882612f09565b602082019050919050565b6128ec81612cf0565b82525050565b6128fb81612cf0565b82525050565b600060208201905061291660008301846126fa565b92915050565b600060408201905061293160008301856126fa565b61293e60208301846126fa565b9392505050565b600060608201905061295a60008301866126fa565b61296760208301856126fa565b61297460408301846128f2565b949350505050565b600060408201905061299160008301856126fa565b61299e60208301846128f2565b9392505050565b600060208201905081810360008301526129bf8184612709565b905092915050565b60006020820190506129dc6000830184612767565b92915050565b60006020820190506129f76000830184612776565b92915050565b60006020820190508181036000830152612a1681612785565b9050919050565b60006020820190508181036000830152612a36816127a8565b9050919050565b60006020820190508181036000830152612a56816127cb565b9050919050565b60006020820190508181036000830152612a76816127ee565b9050919050565b60006020820190508181036000830152612a9681612811565b9050919050565b60006020820190508181036000830152612ab681612834565b9050919050565b60006020820190508181036000830152612ad681612857565b9050919050565b60006020820190508181036000830152612af68161287a565b9050919050565b60006020820190508181036000830152612b168161289d565b9050919050565b60006020820190508181036000830152612b36816128c0565b9050919050565b6000602082019050612b5260008301846128f2565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612bad82612cf0565b9150612bb883612cf0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bed57612bec612d43565b5b828201905092915050565b6000612c0382612cf0565b9150612c0e83612cf0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c4757612c46612d43565b5b828202905092915050565b6000612c5d82612cf0565b9150612c6883612cf0565b925082821015612c7b57612c7a612d43565b5b828203905092915050565b6000612c9182612cd0565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d0582612cf0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612d3857612d37612d43565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f5374616b652064697361626c6564000000000000000000000000000000000000600082015250565b7f4e465420616c7265616479207374616b65640000000000000000000000000000600082015250565b7f4f7065726174696f6e20756e617070726f766564000000000000000000000000600082015250565b7f57726f6e672073656e6465722061646472657373000000000000000000000000600082015250565b7f496e73756666696369656e7420746f6b656e20696e2074686520706f6f6c2c2060008201527f636f6e746163742061646d696e00000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f57726f6e67204e4654206f776e65720000000000000000000000000000000000600082015250565b7f43616c6c6572206973204e4f542061646d696e00000000000000000000000000600082015250565b7f57726f6e67204e46540000000000000000000000000000000000000000000000600082015250565b7f4e4654204e4f5420726563656976656400000000000000000000000000000000600082015250565b612f3b81612c86565b8114612f4657600080fd5b50565b612f5281612c98565b8114612f5d57600080fd5b50565b612f6981612cf0565b8114612f7457600080fd5b5056fea26469706673582212202751a77fcef2967782d4e2a8e29c80f1c4da90718987a6cfc64c28018c9bb6b864736f6c63430008040033

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

000000000000000000000000000000000000000000000000003b363eba41aaab000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : rewardRate_ (uint256): 16666666666666667
Arg [1] : nftAddress_ (address): 0x503D73D0008B97aD1516845eF73265e77e6D498F
Arg [2] : tokenAddress_ (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000003b363eba41aaab
Arg [1] : 000000000000000000000000503d73d0008b97ad1516845ef73265e77e6d498f
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.