contract ERC721 {

    // Required methods
    function totalSupply() public view returns (uint256 cards);
    function balanceOf(address player) public view returns (uint256 balance);
    function ownerOf(uint256 cardId) external view returns (address owner);
    function approve(address to, uint256 cardId) external;
    function transfer(address to, uint256 cardId) external;
    function transferFrom(address from, address to, uint256 cardId) external;

    // Events
    event Transfer(address from, address to, uint256 cardId);
    event Approval(address owner, address approved, uint256 cardId);

    // Name and symbol of the non fungible token, as defined in ERC721.
    string public constant name = "EtherGen";
    string public constant symbol = "ETG";

    // Optional methods
    function tokensOfOwner(address player) external view returns (uint64[] cardIds);
}
// Interface for contracts conforming to ERC-721: Non-Fungible Tokens
function totalSupply() public view returns (uint256 cards);

// Required methods