Contract 0x58b1422b21d58ae6073ba7b28fee62f704fc2539

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xbf852c8a14421ff5570e616be8e067bb0193c334e6d06bf0055d1e962f63a0e224849112021-10-24 2:12:5351 mins ago0x887b86b6b6957f7bbea88b8cefd392f39236a88c IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000518250453 ETH
0x2b4c9c8755301c687b02eea0a76a553d44bd184516ccb0cf4addca77b0abd26c24847442021-10-24 2:02:121 hr 1 min ago0x1ba8d2bbce4c2fd4885f032e298c80ab728504b7 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.00086988197 ETH
0xd5a3205434663154f8f36f1fc207148b18817e1080a46c5841bd945ee92ddde324846252021-10-24 1:51:041 hr 12 mins ago0xb1e302b3a3b0de2173c1a1c2de19d2868b7c446d IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000472181025 ETH
0x7fe589023cd450a2133e4b9c433f92b816c34ff5171e0959d0bd6541b5a49f8724846222021-10-24 1:50:121 hr 13 mins ago0xb1e302b3a3b0de2173c1a1c2de19d2868b7c446d IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000460211257 ETH
0x11ae3d23cb99d424af3bdf1ca9366d9717489b0d3a1d4018a20ac67432fc83a524846172021-10-24 1:50:121 hr 13 mins ago0xb1e302b3a3b0de2173c1a1c2de19d2868b7c446d IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000461167683 ETH
0x843345ef928c89d5c44890dee098d1b8757097c0c3d079be8067e6bf59dfff0324845182021-10-24 1:38:311 hr 25 mins ago0xb0704ba969a38d17b318ba00be16c80cc83ce976 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.001192995496 ETH
0xd8fa7baf214c1bc7930edaa6360138fc1f61394fe5bae088cf7c8c57df3880cb24844892021-10-24 1:35:451 hr 28 mins ago0x5bef17af024df37d6aede8e64a4bd1e7fa4bda8f IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000839045852 ETH
0xe088ff954d75ad16dc744c5eca6bc23b2f8c0339a45f7e1c5b6e0bdcc5addccf24843302021-10-24 1:18:421 hr 45 mins ago0xed38b1f7056637062460ad325116e9108d403480 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000514726274 ETH
0x46e47969ef1913acc71945670758a8c20b32604868dd329d2d5b931ffc43a0cb24843152021-10-24 1:18:031 hr 45 mins ago0x6ee77e931c6154e4752c5bf832ce51f7897f105a IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.002088423043 ETH
0xdba7a4a9558c5930e3c9946069079b136ccbc2bb68c8cf49a79dcc9b67160e5e24841752021-10-24 1:08:291 hr 55 mins ago0xc6d4a6cba7e14c36a43e6ff7d890706763ef0f90 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000637950664 ETH
0xb0839954444357278593b3e59888601354502781ffa01b6b1c4cb40f9ad742c824841642021-10-24 1:08:291 hr 55 mins ago0xc6d4a6cba7e14c36a43e6ff7d890706763ef0f90 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000553580351 ETH
0x552f2a6ca9f10af4a89dca58bdac726744a598d4ce25278cac57020914bd382924841582021-10-24 1:08:001 hr 56 mins ago0xc6d4a6cba7e14c36a43e6ff7d890706763ef0f90 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000489471228 ETH
0x1ca6349cc6794bc959218b7ce93d802ac76430dfae4943ade4b6be08e36c3b3f24837372021-10-24 0:35:012 hrs 28 mins ago0xdb54c320a0b1e994d2bf7dd2ec939f6c25918011 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000472712987 ETH
0x81e2afdbc240709dea3adbd69473bf06496f6d413553fc2b119677b405609e6f24837292021-10-24 0:35:012 hrs 28 mins ago0xdb54c320a0b1e994d2bf7dd2ec939f6c25918011 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000462629328 ETH
0x8f71c21e6198c3b852aa8b87bfc733a5bac7e0c3cd07bce73d80f9d31096ef3224837072021-10-24 0:34:012 hrs 29 mins ago0x89894d2f52d5df3886341c3e64de5433b4db2330 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000589126127 ETH
0x168c652678e2a9dc1393b92c56c4a3ac4b225de292374e7a9efb4811a4e199d824836962021-10-24 0:32:262 hrs 31 mins ago0x89894d2f52d5df3886341c3e64de5433b4db2330 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.00052673293 ETH
0x3207e6cc0820d1985392e16790cd6e9b1d8aa90a20ba306f1e4916de828f2ec824827292021-10-23 23:24:553 hrs 39 mins ago0xcc40926559e4572fdc9ff6df3e9ee0bee356d666 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000505236031 ETH
0xd463dfbbfbbb1672edf0812e017dbc3ca3239fd626b5c54bb695efec4273b73f24826482021-10-23 23:22:493 hrs 41 mins ago0xa0d9dacf387ff00ac622f5ce6ecd9e47e3f4437e IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000469445663 ETH
0xd7e3c7608e12e3dea37e5e4f3dd6e3f6ef9c2d9788feea53bd034266b90cb79024824382021-10-23 23:09:223 hrs 54 mins ago0xfbbe3bb7b863bd41a674cd0b7c9ccd2672ce2152 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.00061593293 ETH
0xd43b919fece76972b1ebb74eb53710aaf3a33b27554d1f304e5c64d92c05a78224816442021-10-23 22:17:514 hrs 46 mins ago0x17d4e25d083bcc954a4d1690902caf24d93e83f0 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000753318965 ETH
0x0c7c795532f24593fedda6b6f67b60df08afd1a404c6925961ad1854244ef47924816162021-10-23 22:15:244 hrs 48 mins ago0x17d4e25d083bcc954a4d1690902caf24d93e83f0 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000627351786 ETH
0xb653e2c5b6877b8a34d16777a99ac6b90b205f3b6c7a20385ba48496213e6f8924816032021-10-23 22:15:244 hrs 48 mins ago0x3a434e65ed0199e3a79863fd5017c3178aefce7d IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000468731707 ETH
0x6ee041fb7579f7aba46a212de60e1f26383689458563340d6900a15b2b525c5e24812772021-10-23 22:01:545 hrs 2 mins ago0xf0f225e01cf084d3c246ad595ab60d0d4f5b4c78 IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000565783342 ETH
0x2dca5d270e83022cf0edda2c32f7bf3099131dc9ccb1f59c7205b7c9509a67bf24811712021-10-23 21:55:565 hrs 8 mins ago0x8724d6ddb30826215f65796afaa78bf0894baedd IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000479929085 ETH
0xb0e1ca4a93304136c5d3262c53fb1394ddcad0e397b5bc310bdbfa67cd705b3824811582021-10-23 21:55:565 hrs 8 mins ago0x8724d6ddb30826215f65796afaa78bf0894baedd IN  0x58b1422b21d58ae6073ba7b28fee62f704fc25390 ETH0.000468736602 ETH
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArbiCudl

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 8 : ArbiCudl.sol
//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";

// Interface for our erc20 token
interface IToken {
    function totalSupply() external view returns (uint256);

    function balanceOf(address tokenOwner)
        external
        view
        returns (uint256 balance);

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

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

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

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

    function mint(address to, uint256 amount) external;

    function burn(uint256 amount) external;

    function burnFrom(address account, uint256 amount) external;
}

interface iCUDLPets {
    function burn(uint256 token) external;
}

contract ArbiCudl is ERC721Holder, Ownable {
    address public MUSE_DAO;
    address public MUSE_DEVS;

    IToken public token;
    iCUDLPets public cudlPets;

    struct Pet {
        address nft;
        uint256 id;
    }

    mapping(address => bool) public supportedNfts;
    mapping(uint256 => Pet) public petDetails;

    // mining tokens
    mapping(uint256 => uint256) public lastTimeMined;

    // Pet properties
    mapping(uint256 => uint256) public timeUntilStarving;
    mapping(uint256 => uint256) public petScore;
    mapping(uint256 => bool) public petDead;
    mapping(uint256 => uint256) public timePetBorn;

    // items/benefits for the PET could be anything in the future.
    mapping(uint256 => uint256) public itemPrice;
    mapping(uint256 => uint256) public itemPoints;
    mapping(uint256 => string) public itemName;
    mapping(uint256 => uint256) public itemTimeExtension;

    mapping(uint256 => mapping(address => address)) public careTaker;

    mapping(address => mapping(uint256 => bool)) public isNftInTheGame; //keeps track if nft already played
    mapping(address => mapping(uint256 => uint256)) public nftToId; //keeps track if nft already played

    // whitelist contracts as operator

    mapping(address => bool) public isOperator;

    uint256 public giveLifePrice = 0;
    uint256 public feesEarned;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    Counters.Counter private _itemIds;

    event Mined(uint256 nftId, uint256 reward, address recipient);
    event BuyAccessory(
        uint256 nftId,
        uint256 itemId,
        uint256 amount,
        uint256 itemTimeExtension,
        address buyer
    );
    event Fatalize(uint256 opponentId, uint256 nftId, address killer);
    event NewPlayer(
        address nftAddress,
        uint256 nftId,
        uint256 playerId,
        address owner
    );
    event Bonk(
        uint256 attacker,
        uint256 victim,
        uint256 winner,
        uint256 reward
    );

    // Rewards algorithm

    uint256 public la;
    uint256 public lb;
    uint256 public ra;
    uint256 public rb;

    address public lastBonker;

    bytes32 public OPERATOR_ROLE;

    constructor(address _token) {
        token = IToken(_token);

        la = 2;
        lb = 2;
        ra = 6;
        rb = 7;

        MUSE_DAO = 0x4B5922ABf25858d012d12bb1184e5d3d0B6D6BE4; //0x6fBa46974b2b1bEfefA034e236A32e1f10C5A148;
        MUSE_DEVS = 0x4B5922ABf25858d012d12bb1184e5d3d0B6D6BE4;

        // Add 6 accessories
        _itemIds.increment();
        uint256 newItemId = _itemIds.current();
        itemName[newItemId] = "bananuman";
        itemPrice[newItemId] = 0.5 ether;
        itemPoints[newItemId] = 100;
        itemTimeExtension[newItemId] = 2 days;

        _itemIds.increment();
        newItemId = _itemIds.current();
        itemName[newItemId] = "catnip";
        itemPrice[newItemId] = 0.6 ether;
        itemPoints[newItemId] = 190;
        itemTimeExtension[newItemId] = 1.5 days;

        _itemIds.increment();
        newItemId = _itemIds.current();
        itemName[newItemId] = "cucombre";
        itemPrice[newItemId] = 2 ether;
        itemPoints[newItemId] = 1;
        itemTimeExtension[newItemId] = 4 days;

        _itemIds.increment();
        newItemId = _itemIds.current();
        itemName[newItemId] = "moon milk";
        itemPrice[newItemId] = 5 ether;
        itemPoints[newItemId] = 1300;
        itemTimeExtension[newItemId] = 2 days;

        _itemIds.increment();
        newItemId = _itemIds.current();
        itemName[newItemId] = "thic duck";
        itemPrice[newItemId] = 0.8 ether;
        itemPoints[newItemId] = 50;
        itemTimeExtension[newItemId] = 3 days;

        _itemIds.increment();
        newItemId = _itemIds.current();
        itemName[newItemId] = "tuna";
        itemPrice[newItemId] = 10 ether;
        itemPoints[newItemId] = 2700;
        itemTimeExtension[newItemId] = 5 days;
    }

    modifier isAllowed(uint256 _id) {
        Pet memory _pet = petDetails[_id];
        address ownerOf = IERC721(_pet.nft).ownerOf(_pet.id);
        require(
            ownerOf == msg.sender || careTaker[_id][ownerOf] == msg.sender,
            "!owner"
        );
        _;
    }

    modifier onlyOperator() {
        require(
            isOperator[msg.sender],
            "Roles: caller does not have the OPERATOR role"
        );
        _;
    }

    // GAME ACTIONS

    //can mine once every 24 hours per token.
    function claimMiningRewards(uint256 nftId) public isAllowed(nftId) {
        require(isPetSafe(nftId), "Your pet is starving, you can't mine");
        require(
            block.timestamp >= lastTimeMined[nftId] + 1 days ||
                lastTimeMined[nftId] == 0,
            "Current timestamp is over the limit to claim the tokens"
        );

        //This is the case where the pet was hibernating so we put back his TOD to 1 day
        if (timeUntilStarving[nftId] > block.timestamp + 5 days) {
            timeUntilStarving[nftId] = block.timestamp + 1 days;
        }

        //reset last start mined so can't remine and cheat
        lastTimeMined[nftId] = block.timestamp;

        uint256 _reward = getRewards(nftId);

        // 10% fees are for dev/dao/projects
        token.mint(msg.sender, _reward);

        emit Mined(nftId, _reward, msg.sender);
    }

    // Buy accesory to the VNFT
    function buyAccesory(uint256 nftId, uint256 itemId) public {
        require(!petDead[nftId], "ded pet");

        uint256 amount = itemPrice[itemId];
        require(amount > 0, "item does not exist");

        // recalculate time until starving
        timeUntilStarving[nftId] = block.timestamp + itemTimeExtension[itemId];
        petScore[nftId] += itemPoints[itemId];

        token.burnFrom(msg.sender, amount);

        feesEarned += amount / 10;

        emit BuyAccessory(
            nftId,
            itemId,
            amount,
            itemTimeExtension[itemId],
            msg.sender
        );
    }

    function feedMultiple(uint256[] calldata ids, uint256[] calldata itemIds)
        external
    {
        for (uint256 i = 0; i < ids.length; i++) {
            buyAccesory(ids[i], itemIds[i]);
        }
    }

    function claimMultiple(uint256[] calldata ids) external {
        for (uint256 i = 0; i < ids.length; i++) {
            claimMiningRewards(ids[i]);
        }
    }

    //TOOD DECIDE FATALITY
    function fatality(uint256 _deadId, uint256 _tokenId) external {
        require(
            !isPetSafe(_deadId) && petDead[_deadId] == false,
            "The PET has to be starved to claim his points"
        );

        petScore[_tokenId] =
            petScore[_tokenId] +
            (((petScore[_deadId] * (20)) / (100)));

        petScore[_deadId] = 0;

        petDead[_deadId] = true;

        // If the pet is the native pets then burn them.
        address nft;
        uint256 nftId;
        (, , , , , , , , , nft, nftId, ) = getPetInfo(_deadId);
        if (nft == address(cudlPets)) {
            cudlPets.burn(nftId);
        }
        emit Fatalize(_deadId, _tokenId, msg.sender);
    }

    function getCareTaker(uint256 _tokenId, address _owner)
        public
        view
        returns (address)
    {
        return (careTaker[_tokenId][_owner]);
    }

    function setCareTaker(
        uint256 _tokenId,
        address _careTaker,
        bool clearCareTaker
    ) external isAllowed(_tokenId) {
        if (clearCareTaker) {
            delete careTaker[_tokenId][msg.sender];
        } else {
            careTaker[_tokenId][msg.sender] = _careTaker;
        }
    }

    // requires approval
    function giveLife(address nft, uint256 _id) external {
        require(IERC721(nft).ownerOf(_id) == msg.sender, "!OWNER");
        require(
            !isNftInTheGame[nft][_id],
            "this nft was already registered can't again"
        );
        require(supportedNfts[nft], "!forbidden");

        // burn 6 cudl to join
        if (nft != address(cudlPets)) {
            token.burnFrom(msg.sender, giveLifePrice);
        }

        uint256 newId = _tokenIds.current();
        // set the pet struct
        petDetails[newId] = Pet(nft, _id);

        nftToId[nft][_id] = newId;

        isNftInTheGame[nft][_id] = true;

        timeUntilStarving[newId] = block.timestamp + 3 days; //start with 3 days of life.
        timePetBorn[newId] = block.timestamp;

        emit NewPlayer(nft, _id, newId, msg.sender);

        _tokenIds.increment();
    }

    // GETTERS
    // check that pet didn't starve
    function isPetSafe(uint256 _nftId) public view returns (bool) {
        uint256 _timeUntilStarving = timeUntilStarving[_nftId];
        if (
            (_timeUntilStarving != 0 && _timeUntilStarving >= block.timestamp)
        ) {
            return true;
        } else {
            return false;
        }
    }

    // Allowed contracts

    function burnScore(uint256 petId, uint256 amount) external onlyOperator {
        require(!petDead[petId]);

        petScore[petId] -= amount;
    }

    function addScore(uint256 petId, uint256 amount) external onlyOperator {
        require(!petDead[petId]);
        petScore[petId] += amount;
    }

    function addTOD(uint256 petId, uint256 duration) external onlyOperator {
        require(!petDead[petId]);
        timeUntilStarving[petId] += duration;
    }

    function burnTod(uint256 petId, uint256 duration) external onlyOperator {
        require(!petDead[petId]);
        timeUntilStarving[petId] -= duration;
    }

    // GETTERS

    function getPetInfo(uint256 _nftId)
        public
        view
        returns (
            uint256 _pet,
            bool _isStarving,
            uint256 _score,
            uint256 _level,
            uint256 _expectedReward,
            uint256 _timeUntilStarving,
            uint256 _lastTimeMined,
            uint256 _timepetBorn,
            address _owner,
            address _token,
            uint256 _tokenId,
            bool _isAlive
        )
    {
        Pet memory thisPet = petDetails[_nftId];

        _pet = _nftId;
        _isStarving = !this.isPetSafe(_nftId);
        _score = petScore[_nftId];
        _level = level(_nftId);
        _expectedReward = getRewards(_nftId);
        _timeUntilStarving = timeUntilStarving[_nftId];
        _lastTimeMined = lastTimeMined[_nftId];
        _timepetBorn = timePetBorn[_nftId];
        _owner = IERC721(thisPet.nft).ownerOf(thisPet.id);
        _token = petDetails[_nftId].nft;
        _tokenId = petDetails[_nftId].id;
        _isAlive = !petDead[_nftId];
    }

    // get the level the pet is on to calculate the token reward
    function getRewards(uint256 tokenId) public view returns (uint256) {
        // This is the formula to get token rewards R(level)=(level)*6/7+6
        uint256 _level = level(tokenId);
        if (_level == 1) {
            return 600000000000000000;
        }
        _level = (_level * 100000000000000000 * ra) / rb;
        return (_level + 500000000000000000);
    }

    // get the level the pet is on to calculate points
    function level(uint256 tokenId) public view returns (uint256) {
        // This is the formula L(x) = 2 * sqrt(x * 2)
        uint256 _score = petScore[tokenId] / 100;
        if (_score == 0) {
            return 1;
        }
        uint256 _level = sqrtu(_score * la);
        return (_level * lb);
    }

    // ADMIN

    function editCurves(
        uint256 _la,
        uint256 _lb,
        uint256 _ra,
        uint256 _rb
    ) external onlyOperator {
        la = _la;
        lb = _lb;
        ra = _ra;
        rb = _rb;
    }

    function changeToken(address newToken) external onlyOperator {
        token = IToken(newToken);
    }

    function setGiveLifePrice(uint256 _price) external onlyOperator {
        giveLifePrice = _price;
    }

    function setPets(address _pets) external onlyOperator {
        cudlPets = iCUDLPets(_pets);
    }

    // edit specific item in case token goes up in value and the price for items gets to expensive for normal users.
    function editItem(
        uint256 _id,
        uint256 _price,
        uint256 _points,
        string calldata _name,
        uint256 _timeExtension
    ) external onlyOperator {
        itemPrice[_id] = _price;
        itemPoints[_id] = _points;
        itemName[_id] = _name;
        itemTimeExtension[_id] = _timeExtension;
    }

    // to support more projects
    function setSupported(address _nft, bool isSupported) public onlyOperator {
        supportedNfts[_nft] = isSupported;
    }

    function addOperator(address _address, bool _isAllowed) public onlyOwner {
        isOperator[_address] = _isAllowed;
    }

    // add items/accessories
    function createItem(
        string calldata name,
        uint256 price,
        uint256 points,
        uint256 timeExtension
    ) external onlyOperator {
        _itemIds.increment();
        uint256 newItemId = _itemIds.current();
        itemName[newItemId] = name;
        itemPrice[newItemId] = price;
        itemPoints[newItemId] = points;
        itemTimeExtension[newItemId] = timeExtension;
    }

    function changeEarners(address _newAddress, address _dao) public onlyOwner {
        MUSE_DEVS = _newAddress;
        MUSE_DAO = _dao;
    }

    // anyone can call this
    function claimEarnings() public {
        token.mint(address(this), feesEarned);
        feesEarned = 0;

        uint256 balance = token.balanceOf(address(this));
        token.transfer(MUSE_DAO, (balance * 70) / 100);
        token.transfer(MUSE_DEVS, (balance * 30) / 100);
    }

    function sqrtu(uint256 x) private pure returns (uint128) {
        if (x == 0) return 0;
        else {
            uint256 xx = x;
            uint256 r = 1;
            if (xx >= 0x100000000000000000000000000000000) {
                xx >>= 128;
                r <<= 64;
            }
            if (xx >= 0x10000000000000000) {
                xx >>= 64;
                r <<= 32;
            }
            if (xx >= 0x100000000) {
                xx >>= 32;
                r <<= 16;
            }
            if (xx >= 0x10000) {
                xx >>= 16;
                r <<= 8;
            }
            if (xx >= 0x100) {
                xx >>= 8;
                r <<= 4;
            }
            if (xx >= 0x10) {
                xx >>= 4;
                r <<= 2;
            }
            if (xx >= 0x8) {
                r <<= 1;
            }
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1;
            r = (r + x / r) >> 1; // Seven iterations should be enough
            uint256 r1 = x / r;
            return uint128(r < r1 ? r : r1);
        }
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 8 : Counters.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

File 4 of 8 : IERC721.sol
// SPDX-License-Identifier: MIT

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 5 of 8 : ERC721Holder.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../IERC721Receiver.sol";

/**
 * @dev Implementation of the {IERC721Receiver} interface.
 *
 * Accepts all token transfers.
 * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.
 */
contract ERC721Holder is IERC721Receiver {
    /**
     * @dev See {IERC721Receiver-onERC721Received}.
     *
     * Always returns `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

File 6 of 8 : Context.sol
// SPDX-License-Identifier: MIT

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 7 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT

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 8 of 8 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT

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);
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"attacker","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"victim","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winner","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Bonk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"itemId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"itemTimeExtension","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"}],"name":"BuyAccessory","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opponentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"address","name":"killer","type":"address"}],"name":"Fatalize","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"Mined","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"nftAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"playerId","type":"uint256"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"NewPlayer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"MUSE_DAO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MUSE_DEVS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isAllowed","type":"bool"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"petId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"petId","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addTOD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"petId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"petId","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"burnTod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"itemId","type":"uint256"}],"name":"buyAccesory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"careTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"},{"internalType":"address","name":"_dao","type":"address"}],"name":"changeEarners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"claimMiningRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"claimMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"timeExtension","type":"uint256"}],"name":"createItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cudlPets","outputs":[{"internalType":"contract iCUDLPets","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_la","type":"uint256"},{"internalType":"uint256","name":"_lb","type":"uint256"},{"internalType":"uint256","name":"_ra","type":"uint256"},{"internalType":"uint256","name":"_rb","type":"uint256"}],"name":"editCurves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_points","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"uint256","name":"_timeExtension","type":"uint256"}],"name":"editItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadId","type":"uint256"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"fatality","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"itemIds","type":"uint256[]"}],"name":"feedMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"}],"name":"getCareTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"getPetInfo","outputs":[{"internalType":"uint256","name":"_pet","type":"uint256"},{"internalType":"bool","name":"_isStarving","type":"bool"},{"internalType":"uint256","name":"_score","type":"uint256"},{"internalType":"uint256","name":"_level","type":"uint256"},{"internalType":"uint256","name":"_expectedReward","type":"uint256"},{"internalType":"uint256","name":"_timeUntilStarving","type":"uint256"},{"internalType":"uint256","name":"_lastTimeMined","type":"uint256"},{"internalType":"uint256","name":"_timepetBorn","type":"uint256"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_isAlive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"giveLife","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giveLifePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isNftInTheGame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nftId","type":"uint256"}],"name":"isPetSafe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"itemTimeExtension","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"la","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBonker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastTimeMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"level","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftToId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"petDead","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"petDetails","outputs":[{"internalType":"address","name":"nft","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"petScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_careTaker","type":"address"},{"internalType":"bool","name":"clearCareTaker","type":"bool"}],"name":"setCareTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setGiveLifePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pets","type":"address"}],"name":"setPets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"},{"internalType":"bool","name":"isSupported","type":"bool"}],"name":"setSupported","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"supportedNfts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timePetBorn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timeUntilStarving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006014553480156200001657600080fd5b50604051620030a3380380620030a383398101604081905262000039916200058d565b62000044336200048a565b600380546001600160a01b03199081166001600160a01b038416179091556002601881905560198190556006601a556007601b5560018054734b5922abf25858d012d12bb1184e5d3d0b6d6be4908416811790915581549092169091179055620000bb6017620004da602090811b6200217717901c565b6000620000d46017620004e360201b620021801760201c565b60408051808201825260098152683130b730b73ab6b0b760b91b60208083019182526000858152600e9091529290922090519293506200011792909190620004e7565b506000818152600c602090815260408083206706f05b59d3b200009055600d825280832060649055600f82529091206202a3009055620001639060179062002177620004da821b17901c565b6200017a6017620004e360201b620021801760201c565b604080518082018252600681526506361746e69760d41b60208083019182526000858152600e909152929092209051929350620001ba92909190620004e7565b506000818152600c60209081526040808320670853a0d2313c00009055600d825280832060be9055600f82529091206201fa409055620002069060179062002177620004da821b17901c565b6200021d6017620004e360201b620021801760201c565b60408051808201825260088152676375636f6d62726560c01b60208083019182526000858152600e9091529290922090519293506200025f92909190620004e7565b506000818152600c60209081526040808320671bc16d674ec800009055600d825280832060019055600f8252909120620546009055620002ab9060179062002177620004da821b17901c565b620002c26017620004e360201b620021801760201c565b60408051808201825260098152686d6f6f6e206d696c6b60b81b60208083019182526000858152600e9091529290922090519293506200030592909190620004e7565b506000818152600c60209081526040808320674563918244f400009055600d82528083206105149055600f82529091206202a3009055620003529060179062002177620004da821b17901c565b620003696017620004e360201b620021801760201c565b604080518082018252600981526874686963206475636b60b81b60208083019182526000858152600e909152929092209051929350620003ac92909190620004e7565b506000818152600c60209081526040808320670b1a2bc2ec5000009055600d825280832060329055600f82529091206203f4809055620003f89060179062002177620004da821b17901c565b6200040f6017620004e360201b620021801760201c565b604080518082018252600481526374756e6160e01b60208083019182526000858152600e9091529290922090519293506200044d92909190620004e7565b506000908152600c60209081526040808320678ac7230489e800009055600d8252808320610a8c9055600f909152902062069780905550620005fa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80546001019055565b5490565b828054620004f590620005bd565b90600052602060002090601f01602090048101928262000519576000855562000564565b82601f106200053457805160ff191683800117855562000564565b8280016001018555821562000564579182015b828111156200056457825182559160200191906001019062000547565b506200057292915062000576565b5090565b5b8082111562000572576000815560010162000577565b6000602082840312156200059f578081fd5b81516001600160a01b0381168114620005b6578182fd5b9392505050565b600281046001821680620005d257607f821691505b60208210811415620005f457634e487b7160e01b600052602260045260246000fd5b50919050565b612a99806200060a6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c80638652e49c116101de578063c0d8012c1161010f578063d9ceab13116100ad578063f2fde38b1161007c578063f2fde38b146108fb578063f5b541a61461090e578063f7b30b6e14610917578063fc0c546a1461096957610383565b8063d9ceab13146108ba578063ddcbf794146108c2578063e6515077146108d5578063ee216e79146108e857610383565b8063cfaa9698116100e9578063cfaa969814610868578063d50509f51461088b578063d5936b7f14610894578063d822d96b146108a757610383565b8063c0d8012c14610818578063c88a7c2f1461082b578063c8cbdedc1461085f57610383565b8063aa00d18e1161017c578063b6ae33d811610156578063b6ae33d8146107c6578063b7a26767146107cf578063bb953261146107f2578063bc721e061461080557610383565b8063aa00d18e14610768578063adcb005c14610793578063b14b29fe146107b357610383565b80638da5cb5b116101b85780638da5cb5b146107285780639051cce91461073957806390c33c3f1461074c57806399cc726d1461075557610383565b80638652e49c146106e25780638838cefb146107025780638d37a4ac1461071557610383565b80635435f9d6116102b857806371701a4411610256578063773cf24311610230578063773cf2431461068957806377fe73e3146106a957806379c5cb1c146106bc57806382b4a084146106cf57610383565b806371701a44146106325780637310dc8a1461063b578063769ab6861461065b57610383565b806366829b161161029257806366829b161461056a57806369c3f3161461057d5780636d70f7ae146105f7578063715018a61461062a57610383565b80635435f9d614610500578063574dd8b91461053757806365d6913f1461055757610383565b806319660d21116103255780632ee8a4a9116102ff5780632ee8a4a9146104be57806345dd6f72146104c75780634f188a75146104da57806350f70af9146104ed57610383565b806319660d211461046b5780632030c4b01461048b5780632af0484d146104ab57610383565b806313c2dfc31161036157806313c2dfc3146103d6578063150b7a02146103f657806317bf7bee1461042d57806317c9dfe01461045857610383565b8063024759c61461038857806305c58df21461039d57806310cc610c146103c3575b600080fd5b61039b6103963660046125be565b61097c565b005b6103b06103ab366004612733565b6109da565b6040519081526020015b60405180910390f35b61039b6103d13660046127c8565b610a4c565b6103b06103e4366004612733565b60096020526000908152604090205481565b6104146104043660046124e5565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016103ba565b600454610440906001600160a01b031681565b6040516001600160a01b0390911681526020016103ba565b61039b6104663660046127c8565b610c27565b6103b0610479366004612733565b600f6020526000908152604090205481565b6103b0610499366004612733565b600d6020526000908152604090205481565b61039b6104b93660046125eb565b610c99565b6103b0601a5481565b61039b6104d5366004612733565b610fc2565b61039b6104e8366004612475565b610ff6565b61039b6104fb366004612733565b611047565b61044061050e366004612763565b60009182526010602090815260408084206001600160a01b039384168552909152909120541690565b6103b0610545366004612733565b60076020526000908152604090205481565b61039b610565366004612787565b611369565b61039b610578366004612475565b6114ea565b61059061058b366004612733565b61153b565b604080519c8d529a151560208d0152998b019890985260608a0196909652608089019490945260a088019290925260c087015260e08601526001600160a01b03908116610100860152166101208401526101408301521515610160820152610180016103ba565b61061a610605366004612475565b60136020526000908152604090205460ff1681565b60405190151581526020016103ba565b61039b611747565b6103b060145481565b61064e610649366004612733565b61177d565b6040516103ba9190612881565b61061a6106693660046125eb565b601160209081526000928352604080842090915290825290205460ff1681565b6103b0610697366004612733565b600b6020526000908152604090205481565b61039b6106b7366004612850565b611817565b61039b6106ca3660046126db565b61185a565b61039b6106dd366004612656565b6118ec565b6103b06106f0366004612733565b60086020526000908152604090205481565b61039b6107103660046124ad565b611966565b600154610440906001600160a01b031681565b6000546001600160a01b0316610440565b61039b610747366004612616565b6119be565b6103b060185481565b61039b6107633660046127e9565b611a0a565b6103b06107763660046125eb565b601260209081526000928352604080842090915290825290205481565b6103b06107a1366004612733565b600c6020526000908152604090205481565b61039b6107c13660046127c8565b611a83565b6103b0601b5481565b61061a6107dd366004612475565b60056020526000908152604090205460ff1681565b601c54610440906001600160a01b031681565b61039b6108133660046127c8565b611aec565b6103b0610826366004612733565b611cb6565b610440610839366004612763565b60106020908152600092835260408084209091529082529020546001600160a01b031681565b6103b060195481565b61061a610876366004612733565b600a6020526000908152604090205460ff1681565b6103b060155481565b61039b6108a23660046125be565b611d25565b61061a6108b5366004612733565b611d7f565b61039b611dbc565b61039b6108d03660046127c8565b61200a565b61039b6108e33660046127c8565b612073565b600254610440906001600160a01b031681565b61039b610909366004612475565b6120dc565b6103b0601d5481565b61094a610925366004612733565b600660205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103ba565b600354610440906001600160a01b031681565b6000546001600160a01b031633146109af5760405162461bcd60e51b81526004016109a690612921565b60405180910390fd5b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b60008181526009602052604081205481906109f79060649061296e565b905080610a08576001915050610a47565b6000610a2060185483610a1b919061298e565b612184565b6fffffffffffffffffffffffffffffffff16905060195481610a42919061298e565b925050505b919050565b6000828152600a602052604090205460ff1615610a955760405162461bcd60e51b8152602060048201526007602482015266191959081c195d60ca1b60448201526064016109a6565b6000818152600c602052604090205480610ae75760405162461bcd60e51b81526020600482015260136024820152721a5d195b48191bd95cc81b9bdd08195e1a5cdd606a1b60448201526064016109a6565b6000828152600f6020526040902054610b009042612956565b600084815260086020908152604080832093909355848252600d81528282205486835260099091529181208054909190610b3b908490612956565b909155505060035460405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b50505050600a81610bb1919061296e565b60156000828254610bc29190612956565b90915550506000828152600f6020908152604091829020548251868152918201859052818301849052606082015233608082015290517f85b7f043f9e667afc493e11c116100c6106826ee7ff6fbabb851dd14432289999181900360a00190a1505050565b3360009081526013602052604090205460ff16610c565760405162461bcd60e51b81526004016109a6906128d4565b6000828152600a602052604090205460ff1615610c7257600080fd5b60008281526008602052604081208054839290610c90908490612956565b90915550505050565b6040516331a9108f60e11b81526004810182905233906001600160a01b03841690636352211e9060240160206040518083038186803b158015610cdb57600080fd5b505afa158015610cef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d139190612491565b6001600160a01b031614610d525760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b60448201526064016109a6565b6001600160a01b038216600090815260116020908152604080832084845290915290205460ff1615610dda5760405162461bcd60e51b815260206004820152602b60248201527f74686973206e66742077617320616c726561647920726567697374657265642060448201526a31b0b713ba1030b3b0b4b760a91b60648201526084016109a6565b6001600160a01b03821660009081526005602052604090205460ff16610e2f5760405162461bcd60e51b815260206004820152600a60248201526910b337b93134b23232b760b11b60448201526064016109a6565b6004546001600160a01b03838116911614610ead5760035460145460405163079cc67960e41b815233600482015260248101919091526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610e9457600080fd5b505af1158015610ea8573d6000803e3d6000fd5b505050505b6000610eb860165490565b6040805180820182526001600160a01b038681168083526020808401888152600087815260068352868120955186546001600160a01b03191695169490941785555160019485015581835260128152848320888452815284832086905590825260118152838220878352905291909120805460ff191690911790559050610f42426203f480612956565b600082815260086020908152604080832093909355600b81529082902042905581516001600160a01b03861681529081018490529081018290523360608201527faad233c151314c66c48330bf875520dddd59a28b9f9e4a48ca74eeedade6e07b9060800160405180910390a1610fbd601680546001019055565b505050565b3360009081526013602052604090205460ff16610ff15760405162461bcd60e51b81526004016109a6906128d4565b601455565b3360009081526013602052604090205460ff166110255760405162461bcd60e51b81526004016109a6906128d4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526006602090815260408083208151808301835281546001600160a01b031680825260019092015493810184905291516331a9108f60e11b8152600481019390935284939192636352211e9060240160206040518083038186803b1580156110b257600080fd5b505afa1580156110c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ea9190612491565b90506001600160a01b038116331480611126575060008381526010602090815260408083206001600160a01b0385811685529252909120541633145b61115b5760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064016109a6565b61116484611d7f565b6111bc5760405162461bcd60e51b8152602060048201526024808201527f596f757220706574206973207374617276696e672c20796f752063616e2774206044820152636d696e6560e01b60648201526084016109a6565b6000848152600760205260409020546111d89062015180612956565b421015806111f25750600084815260076020526040902054155b6112645760405162461bcd60e51b815260206004820152603760248201527f43757272656e742074696d657374616d70206973206f76657220746865206c6960448201527f6d697420746f20636c61696d2074686520746f6b656e7300000000000000000060648201526084016109a6565b6112714262069780612956565b60008581526008602052604090205411156112a3576112934262015180612956565b6000858152600860205260409020555b60008481526007602052604081204290556112bd85611cb6565b6003546040516340c10f1960e01b8152336004820152602481018390529192506001600160a01b0316906340c10f1990604401600060405180830381600087803b15801561130a57600080fd5b505af115801561131e573d6000803e3d6000fd5b50506040805188815260208101859052338183015290517fb4d85c617a49c30379df4c6de49e4afae67822cfcee57ccc8e4de36eb9bd18c99350908190036060019150a15050505050565b60008381526006602090815260408083208151808301835281546001600160a01b031680825260019092015493810184905291516331a9108f60e11b8152600481019390935286939192636352211e9060240160206040518083038186803b1580156113d457600080fd5b505afa1580156113e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140c9190612491565b90506001600160a01b038116331480611448575060008381526010602090815260408083206001600160a01b0385811685529252909120541633145b61147d5760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064016109a6565b83156114af576000868152601060209081526040808320338452909152902080546001600160a01b03191690556114e2565b6000868152601060209081526040808320338452909152902080546001600160a01b0319166001600160a01b0387161790555b505050505050565b3360009081526013602052604090205460ff166115195760405162461bcd60e51b81526004016109a6906128d4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526006602090815260408083208151808301835281546001600160a01b03168152600190910154928101929092525163d822d96b60e01b815260048101849052839291829182918291829182918291829182918291829190309063d822d96b9060240160206040518083038186803b1580156115ba57600080fd5b505afa1580156115ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f291906126bf565b60008f81526009602052604090205490159c509a506116108e6109da565b995061161b8e611cb6565b60008f8152600860209081526040808320546007835281842054600b8452938290205486519387015192516331a9108f60e11b8152959e50909c50929a509198506001600160a01b031691636352211e9161167c9160040190815260200190565b60206040518083038186803b15801561169457600080fd5b505afa1580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190612491565b9450600660008f815260200190815260200160002060000160009054906101000a90046001600160a01b03169350600660008f8152602001908152602001600020600101549250600a60008f815260200190815260200160002060009054906101000a900460ff161591505091939597999b5091939597999b565b6000546001600160a01b031633146117715760405162461bcd60e51b81526004016109a690612921565b61177b6000612303565b565b600e6020526000908152604090208054611796906129c4565b80601f01602080910402602001604051908101604052809291908181526020018280546117c2906129c4565b801561180f5780601f106117e45761010080835404028352916020019161180f565b820191906000526020600020905b8154815290600101906020018083116117f257829003601f168201915b505050505081565b3360009081526013602052604090205460ff166118465760405162461bcd60e51b81526004016109a6906128d4565b601893909355601991909155601a55601b55565b3360009081526013602052604090205460ff166118895760405162461bcd60e51b81526004016109a6906128d4565b611897601780546001019055565b60006118a260175490565b6000818152600e602052604090209091506118be908787612353565b506000908152600c6020908152604080832095909555600d815284822093909355600f909252919020555050565b60005b8381101561195f5761194d85858381811061191a57634e487b7160e01b600052603260045260246000fd5b9050602002013584848481811061194157634e487b7160e01b600052603260045260246000fd5b90506020020135610a4c565b80611957816129f9565b9150506118ef565b5050505050565b6000546001600160a01b031633146119905760405162461bcd60e51b81526004016109a690612921565b600280546001600160a01b039384166001600160a01b03199182161790915560018054929093169116179055565b60005b81811015610fbd576119f88383838181106119ec57634e487b7160e01b600052603260045260246000fd5b90506020020135611047565b80611a02816129f9565b9150506119c1565b3360009081526013602052604090205460ff16611a395760405162461bcd60e51b81526004016109a6906128d4565b6000868152600c60209081526040808320889055600d8252808320879055600e9091529020611a69908484612353565b506000958652600f60205260409095209490945550505050565b3360009081526013602052604090205460ff16611ab25760405162461bcd60e51b81526004016109a6906128d4565b6000828152600a602052604090205460ff1615611ace57600080fd5b60008281526009602052604081208054839290610c909084906129ad565b611af582611d7f565b158015611b1157506000828152600a602052604090205460ff16155b611b735760405162461bcd60e51b815260206004820152602d60248201527f546865205045542068617320746f206265207374617276656420746f20636c6160448201526c696d2068697320706f696e747360981b60648201526084016109a6565b600082815260096020526040902054606490611b9090601461298e565b611b9a919061296e565b600082815260096020526040902054611bb39190612956565b600082815260096020908152604080832093909355848252828220829055600a9052908120805460ff1916600117905580611bed8461153b565b50600454919c509a506001600160a01b03808d16911614159850611c719750505050505050505760048054604051630852cd8d60e31b81529182018390526001600160a01b0316906342966c6890602401600060405180830381600087803b158015611c5857600080fd5b505af1158015611c6c573d6000803e3d6000fd5b505050505b6040805185815260208101859052338183015290517f6fa8b24f93c54e60a1ddc5f18631ca165606fa21fa2eb0ace62fa9b7f26ca3fc9181900360600190a150505050565b600080611cc2836109da565b90508060011415611cde57670853a0d2313c0000915050610a47565b601b54601a54611cf68367016345785d8a000061298e565b611d00919061298e565b611d0a919061296e565b9050611d1e816706f05b59d3b20000612956565b9392505050565b3360009081526013602052604090205460ff16611d545760405162461bcd60e51b81526004016109a6906128d4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000818152600860205260408120548015801590611d9d5750428110155b15611dac576001915050610a47565b6000915050610a47565b50919050565b6003546015546040516340c10f1960e01b815230600482015260248101919091526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015611e0c57600080fd5b505af1158015611e20573d6000803e3d6000fd5b5050600060158190556003546040516370a0823160e01b81523060048201529193506001600160a01b031691506370a082319060240160206040518083038186803b158015611e6e57600080fd5b505afa158015611e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea6919061274b565b6003546001549192506001600160a01b039081169163a9059cbb91166064611ecf85604661298e565b611ed9919061296e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611f1f57600080fd5b505af1158015611f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5791906126bf565b506003546002546001600160a01b039182169163a9059cbb91166064611f7e85601e61298e565b611f88919061296e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200691906126bf565b5050565b3360009081526013602052604090205460ff166120395760405162461bcd60e51b81526004016109a6906128d4565b6000828152600a602052604090205460ff161561205557600080fd5b60008281526009602052604081208054839290610c90908490612956565b3360009081526013602052604090205460ff166120a25760405162461bcd60e51b81526004016109a6906128d4565b6000828152600a602052604090205460ff16156120be57600080fd5b60008281526008602052604081208054839290610c909084906129ad565b6000546001600160a01b031633146121065760405162461bcd60e51b81526004016109a690612921565b6001600160a01b03811661216b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109a6565b61217481612303565b50565b80546001019055565b5490565b60008161219357506000610a47565b816001600160801b82106121ac5760809190911c9060401b5b6801000000000000000082106121c75760409190911c9060201b5b64010000000082106121de5760209190911c9060101b5b6201000082106121f35760109190911c9060081b5b61010082106122075760089190911c9060041b5b6010821061221a5760049190911c9060021b5b600882106122265760011b5b6001612232828661296e565b61223c9083612956565b901c9050600161224c828661296e565b6122569083612956565b901c90506001612266828661296e565b6122709083612956565b901c90506001612280828661296e565b61228a9083612956565b901c9050600161229a828661296e565b6122a49083612956565b901c905060016122b4828661296e565b6122be9083612956565b901c905060016122ce828661296e565b6122d89083612956565b901c905060006122e8828661296e565b90508082106122f757806122f9565b815b9350505050610a47565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82805461235f906129c4565b90600052602060002090601f01602090048101928261238157600085556123c7565b82601f1061239a5782800160ff198235161785556123c7565b828001600101855582156123c7579182015b828111156123c75782358255916020019190600101906123ac565b506123d39291506123d7565b5090565b5b808211156123d357600081556001016123d8565b60008083601f8401126123fd578081fd5b50813567ffffffffffffffff811115612414578182fd5b602083019150836020808302850101111561242e57600080fd5b9250929050565b60008083601f840112612446578182fd5b50813567ffffffffffffffff81111561245d578182fd5b60208301915083602082850101111561242e57600080fd5b600060208284031215612486578081fd5b8135611d1e81612a40565b6000602082840312156124a2578081fd5b8151611d1e81612a40565b600080604083850312156124bf578081fd5b82356124ca81612a40565b915060208301356124da81612a40565b809150509250929050565b600080600080608085870312156124fa578182fd5b843561250581612a40565b9350602085013561251581612a40565b925060408501359150606085013567ffffffffffffffff80821115612538578283fd5b818701915087601f83011261254b578283fd5b81358181111561255d5761255d612a2a565b604051601f8201601f19908116603f0116810190838211818310171561258557612585612a2a565b816040528281528a602084870101111561259d578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156125d0578182fd5b82356125db81612a40565b915060208301356124da81612a55565b600080604083850312156125fd578182fd5b823561260881612a40565b946020939093013593505050565b60008060208385031215612628578182fd5b823567ffffffffffffffff81111561263e578283fd5b61264a858286016123ec565b90969095509350505050565b6000806000806040858703121561266b578384fd5b843567ffffffffffffffff80821115612682578586fd5b61268e888389016123ec565b909650945060208701359150808211156126a6578384fd5b506126b3878288016123ec565b95989497509550505050565b6000602082840312156126d0578081fd5b8151611d1e81612a55565b6000806000806000608086880312156126f2578081fd5b853567ffffffffffffffff811115612708578182fd5b61271488828901612435565b9099909850602088013597604081013597506060013595509350505050565b600060208284031215612744578081fd5b5035919050565b60006020828403121561275c578081fd5b5051919050565b60008060408385031215612775578182fd5b8235915060208301356124da81612a40565b60008060006060848603121561279b578081fd5b8335925060208401356127ad81612a40565b915060408401356127bd81612a55565b809150509250925092565b600080604083850312156127da578182fd5b50508035926020909101359150565b60008060008060008060a08789031215612801578384fd5b863595506020870135945060408701359350606087013567ffffffffffffffff81111561282c578182fd5b61283889828a01612435565b979a9699509497949695608090950135949350505050565b60008060008060808587031215612865578182fd5b5050823594602084013594506040840135936060013592509050565b6000602080835283518082850152825b818110156128ad57858101830151858201604001528201612891565b818111156128be5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252602d908201527f526f6c65733a2063616c6c657220646f6573206e6f742068617665207468652060408201526c4f50455241544f5220726f6c6560981b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561296957612969612a14565b500190565b60008261298957634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156129a8576129a8612a14565b500290565b6000828210156129bf576129bf612a14565b500390565b6002810460018216806129d857607f821691505b60208210811415611db657634e487b7160e01b600052602260045260246000fd5b6000600019821415612a0d57612a0d612a14565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461217457600080fd5b801515811461217457600080fdfea26469706673582212203c88113777fec374c365c8d7116a186123b20f79fa3c8e7fb101b1e076f97d1664736f6c634300080200330000000000000000000000000f4676178b5c53ae0a655f1b19a96387e4b8b5f2

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

0000000000000000000000000f4676178b5c53ae0a655f1b19a96387e4b8b5f2

-----Decoded View---------------
Arg [0] : _token (address): 0x0f4676178b5c53ae0a655f1b19a96387e4b8b5f2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000f4676178b5c53ae0a655f1b19a96387e4b8b5f2


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.