Contract 0x667b7a99d6912ec21c242f4410d86626c8b9416d

 

TxHash Block Age From To Value [TxFee]
0x1c9e0477f83e6cbced2b5f187f930bd69e54568560dccdd847fb322e19856923731194317 days 14 hrs ago0xb0b1c6988a0a179850e27d161e8046213d5d9c7c IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000022516
0x17e87a8a3797a468f7dee889e838ff71da407e138ea4cab85434968217227aa7721298738 days 13 hrs ago0x7306d50342f3c957673c06ae33e481285b7a9747 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000137703
0xb126b6111bccdafb4a1ca760d513c061f822ac9e1210d4647d693e62b616c6dc721106939 days 1 min ago0xa3193828556a7641bafa7ca0b2e6ac1fb123a631 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000562035
0x6d6b8160247f71f1ee176a39623255f73e7c16a72105eb16a7aae851db89d07e720894339 days 11 hrs ago0xbf46181e170113c2f6cde6f30b80e3c2f101972f IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000562035
0xb0d04e57cd6a0881532571534a179881cd3141d2966e3fed451a462fc703e7db717988345 days 16 hrs ago0xe5912a62ccf6aea1449c527b552d1d1aac850c72 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0x4654882f5a849261476646bc4d34a42064013dfd19971dab5f76ed1834b9fde5717987945 days 16 hrs ago0x14d16982a7c8764bcf921b6419148fd60f24194a IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000194814
0x87fbf17e7463014485f2343cebd152b106573d92bcd3b037c6c462d39d4c9f23717987545 days 16 hrs ago0x2799636dbab597b41b1c69218806c29173e90f0f IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000044558
0xbbd4d4a12f712bf037839f0f426b13f9ea4eef02a39d4d13a830747e695747a0717987345 days 16 hrs ago0x7fa21694934ab529ede1477a300eece190247016 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000194814
0x32a864bd36e3e5b64f448a60de7233dab86ed3b6aa515a615df0641a58e65172717986945 days 16 hrs ago0x71ad36d768b0d37fee0bd8f27bace4c0f970de39 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xdbf9b8f5dbfd045f9ba229c13f939440cf3d4cbd5071fc0f372c89ba170dd7eb717986545 days 16 hrs ago0x86e382eeed4600bbf898b48162ce1254786b0d2f IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.0002697768
0x1f818e3d7a63148216163265a93369b48434633dc8653f76c9cd10069a2bafe7717985345 days 16 hrs ago0x1fdb77f6929496511852c71426611c9554a37864 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000449628
0x42b9b20e87b9fcd128ee928e1946963a9af91c6bcd56301ff8c753a5b1660d37717984645 days 16 hrs ago0x2799636dbab597b41b1c69218806c29173e90f0f IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xce0b74c27500e2738de15df6cddded00bf2f19df3c3bcf541c9c10be7d95d9c1717961245 days 18 hrs ago0xe1950cb15faacaea071b5cfd2e47bd343d166348 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xf0c20d59b3be955c379bf4a768d161e9166d701b7e537218c81c9d3df268cfaa717820346 days 1 hr ago0x6bc9730f8e116fd2ce78a1767346c6913e5658cf IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xd81cb0e1d872a473eb312f274d722739d7d3ad8f4b19971de5c4ee73727ebe4c717793346 days 2 hrs ago0x6bf4317a81dd9f0a917d62b2f9e5113249ff1929 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000371364187
0x062528ebd40a6fc112e8b52aefc782773cba9380043cabdf76a208e0f3803961717791746 days 2 hrs ago0x746d694ebc31de36836988885068a970b310e30b IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000449628
0x37ca4a488885bd0d4f68040cd19000f7a134c0b62713cddfec771fd71fc0428d717789646 days 2 hrs ago0x50f6e299a2f30e2e7888fd99a3a2b9ef246002ad IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000449628
0xfb14d3c3c969570a5b3165bc4402c07f215e39e69ea71e3616ea96ac573d033d717783046 days 2 hrs ago0x5a5e8ea79a6e0d40fd9268c48fe9da31b3bfe1d5 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xf36c531b749f84a686f1ccae4a17b6d13c02abfd090359281e5a96b068859c32717776946 days 3 hrs ago0xe508c926060f12b983f3b4295cfa9afec583d2ff IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000389628
0x28d6d79ed2fff8d23e949d9bfb2ceaf99a5eb699452d8a44df5c18e03f3155ed717635846 days 9 hrs ago0x263b604509d6a825719859ee458b2d91fb7d330d IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000321307
0x9381d3be788f09dab62392d728d7fd28d2b2c76ba162c405c7caea56b560abe2714438252 days 22 hrs ago0xc3d95bafb0f2f9a0780363cfa2e2123e21b488f5 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0xece60f724dc8942528eb172bb4e54bc6ecfd2a257f575ed369e632c5b9613cd9714437552 days 22 hrs ago0xcff34892459e622eefd1e55b027f4cad9e3f4c15 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0x85f97af55f5207567bd3e8ed3584c7785ed1191deea80b27d0b37965b92ed795714437552 days 22 hrs ago0x05f08197b373609565eecc09beaabf95513a8ba0 IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0x9e5a1c455fb832989e613cb59a50c663bc3c4666ebe148ef3a564e69600ef303714436752 days 22 hrs ago0xc262cf03b931ed9e7587ad71835506d0083f314c IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000224814
0x4bcbd0fda5b8a9c02a23c42234cb08ac949caa0cb76ed337104d434ef04f10fe714436652 days 22 hrs ago0x322209edcd172cb32bc200376d1de22ec5ecc82d IN  0x667b7a99d6912ec21c242f4410d86626c8b9416d0 Ether0.000337221
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)

Contract Name:
MemeAwards2018

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No

Runs (Optimizer):
200

Contract Source Code

pragma solidity ^0.4.24;

/*
  __  __                                                    _       ___   ___  __  ___  
 |  \/  |                         /\                       | |     |__ \ / _ \/_ |/ _ \ 
 | \  / | ___ _ __ ___   ___     /  \__      ____ _ _ __ __| |___     ) | | | || | (_) |
 | |\/| |/ _ \ '_ ` _ \ / _ \   / /\ \ \ /\ / / _` | '__/ _` / __|   / /| | | || |> _ < 
 | |  | |  __/ | | | | |  __/  / ____ \ V  V / (_| | | | (_| \__ \  / /_| |_| || | (_) |
 |_|  |_|\___|_| |_| |_|\___| /_/    \_\_/\_/ \__,_|_|  \__,_|___/ |____|\___/ |_|\___/

*/


/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
contract IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) public;
}


/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes data) public returns (bytes4);
}


/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7;
    /**
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_InterfaceId_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Metadata {
    function name() external view returns (string);
    function symbol() external view returns (string);
    function tokenURI(uint256 tokenId) external view returns (string);
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Enumerable {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}


contract ERC20Token {
    function balanceOf(address owner) public view returns (uint256);
    function transfer(address to, uint256 value) public returns (bool);
}


/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {
    int256 constant private INT256_MIN = -2**255;

    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Multiplies two signed integers, reverts on overflow.
    */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below

        int256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
    * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
    */
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0); // Solidity only automatically asserts when dividing by 0
        require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow

        int256 c = a / b;

        return c;
    }

    /**
    * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Subtracts two signed integers, reverts on overflow.
    */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Adds two signed integers, reverts on overflow.
    */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}


/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solium-disable-next-line security/no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}


/**
 * @title ERC721 Non-Fungible Token Standard BrofistCoin custom implementation
 * @dev Please report any issues to [email protected] or @brofistcoin on Telegram 
 */
contract MemeAwards2018 is ERC165, IERC721, IERC721Metadata, IERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using Address for address;
    
    string private _name;
    string private _symbol;
    uint256 private releaseDate;
    bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f;
    bytes4 private constant _InterfaceId_ERC721Enumerable = 0x780e9d63;
    bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    
    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to number of owned tokens
    mapping (address => uint256) private _ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    
    // Mapping from airdrop receiver to boolean 
    mapping (address => bool) public hasClaimed;

    // Meme struct holds the templateId
    struct Meme {
        uint32 templateId;
    }
    
    // Template struct holds the uris for templateIds
    struct Template {
        string uri;
    }
    
    // All the tokens in existence 
    Meme[] private claimedMemes;
    
    // Admin editable templates for each meme 
    Template[] private memeTemplates;

    // Throws when msg.sender has already claimed the airdrop 
    modifier hasNotClaimed() {
        require(hasClaimed[msg.sender] == false);
        _;
    }
    
    // Throws when the 30 day airdrop period has passed 
    modifier canClaim() {
        require(releaseDate + 30 days >= now);
        _;
    }
    
    constructor(string name, string symbol) public {
        // Set name
        _name = name;
        // Set symbol 
        _symbol = symbol;
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(InterfaceId_ERC721Metadata);
        // register the supported interface to conform to ERC721 via ERC165
        _registerInterface(_InterfaceId_ERC721Enumerable);
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_InterfaceId_ERC721);
        // Set releaseDate
        releaseDate = now;
    }
    
    /* Returns a predictable and insecure pseudo random number between 0 - 9 
    which represent the 10 MemeAwards 2018 meme templates (templateId) */
    function _randomMeme() private view returns (uint8) {
        return uint8(uint256(keccak256(abi.encodePacked(now, msg.sender))) % 10);
    }
    
    // Function to claim the meme airdrop 
    function claimMeme() public hasNotClaimed canClaim {
        // Store the random number for reference 
        uint32 randomMemeId = _randomMeme();
        // Push new token to claimedMemes with randomMemeId as its templateId
        uint id = claimedMemes.push(Meme(randomMemeId)) -1;
        // Mint the token with the id from claimedMemes array 
        _mint(msg.sender, id);
        // Set boolean for hasClaimed
        hasClaimed[msg.sender] = true;
    }
    
    // Iterate through claimed memes and get the count based on its templateId
    // ie. how many of Bitch Lasagna exists 
    function getIndividualCount(uint32 _templateId) external view returns (uint) {
        uint counter = 0;
        for (uint i = 0; i < claimedMemes.length; i++) {
            if (claimedMemes[i].templateId == _templateId) {
                counter++;
            }
        }
        // Total supply of n meme
        return counter;
    }
    
    // Get all the memes by owner 
    function getMemesByOwner(address _owner) public view returns(uint[]) {
        uint[] memory result = new uint[](_ownedTokensCount[_owner]);
        uint counter = 0;
        for (uint i = 0; i < claimedMemes.length; i++) {
            if (_tokenOwner[i] == _owner) {
                result[counter] = i;
                counter++;
            }
        }
        // Array of ID's in claimedMemes that _owner owns 
        return result;
    }
    
    // Get end time
    function getEndTime() external view returns (uint) {
        return releaseDate + 30 days;
    }

    // Function to withdraw any ERC20 tokens that might be sent here for whatever reasons 
    function withdrawERC20Tokens(address _tokenContract) external onlyOwner returns (bool) {
        ERC20Token token = ERC20Token(_tokenContract);
        uint256 amount = token.balanceOf(address(this));
        return token.transfer(msg.sender, amount);
    }
    
    // And just in case for ETH too (shouldn't happen though)  
    function withdraw() external onlyOwner {
        uint256 etherBalance = address(this).balance;
        msg.sender.transfer(etherBalance);
    }
    
    // Admin function to set meme template uris
    function setMemeTemplate(string _uri) external onlyOwner {
        require(memeTemplates.length < 10);
        memeTemplates.push(Template(_uri));
    }
    
    // Admin function to edit meme template uris 
    // If we wanted to host elsewhere like IPFS for example 
    function editMemeTemplate(uint _templateId, string _newUri) external onlyOwner {
        memeTemplates[_templateId].uri = _newUri;
    }
    
    // Return the total supply
    function totalSupply() public view returns (uint256) {
        return claimedMemes.length;
    }
    
    // Return the templateId of _index token 
    function tokenByIndex(uint256 _index) public view returns (uint256) {
        require(_index < totalSupply());
        return claimedMemes[_index].templateId;
    }
    
    // Return The token templateId for the index'th token assigned to owner
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId) {
        require(index < balanceOf(owner));
        return getMemesByOwner(owner)[index];
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string) {
        return _symbol;
    }

    /**
     * @dev Returns an URI for a given token ID
     * Throws if the token ID does not exist. May return an empty string.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenURI(uint256 tokenId) external view returns (string) {
        require(_exists(tokenId));
        uint tokenTemplateId = claimedMemes[tokenId].templateId;
        return memeTemplates[tokenTemplateId].uri;
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     *
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        // solium-disable-next-line arg-overflow
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes _data) public {
        transferFrom(from, to, tokenId);
        // solium-disable-next-line arg-overflow
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     *    is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        // Disable solium check because of
        // https://github.com/duaraghav8/Solium/issues/175
        // solium-disable-next-line operator-whitespace
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes _data) internal returns (bool) {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_templateId","type":"uint32"}],"name":"getIndividualCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getEndTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"withdrawERC20Tokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"hasClaimed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_templateId","type":"uint256"},{"name":"_newUri","type":"string"}],"name":"editMemeTemplate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimMeme","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_uri","type":"string"}],"name":"setMemeTemplate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getMemesByOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

Contract Creation Code

60806040523480156200001157600080fd5b5060405162002ac738038062002ac783398101806040528101908080518201929190602001805182019291905050506200007d6301ffc9a77c01000000000000000000000000000000000000000000000000000000000262000233640100000000026401000000009004565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3816002908051906020019062000153929190620002f1565b5080600390805190602001906200016c929190620002f1565b50620001aa635b5e139f7c01000000000000000000000000000000000000000000000000000000000262000233640100000000026401000000009004565b620001e763780e9d637c01000000000000000000000000000000000000000000000000000000000262000233640100000000026401000000009004565b620002246380ac58cd7c01000000000000000000000000000000000000000000000000000000000262000233640100000000026401000000009004565b426004819055505050620003a0565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200028557600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200033457805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036457825182559160200191906001019062000347565b5b50905062000374919062000378565b5090565b6200039d91905b80821115620003995760008160009055506001016200037f565b5090565b90565b61271780620003b06000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461017a57806306fdde03146101de578063081812fc1461026e578063095ea7b3146102db578063142790861461032857806318160ddd1461036f57806323b872dd1461039a5780632f745c59146104075780633ccfd60b1461046857806342842e0e1461047f578063439f5ac2146104ec5780634f6ccce7146105175780634ff7ff32146105585780636352211e146105b357806370a0823114610620578063715018a61461067757806373b2e80e1461068e5780637bd97ca7146106e95780638da5cb5b1461072e5780638f32d59b1461078557806395d89b41146107b4578063a22cb46514610844578063b88d4fde14610893578063b8ad2fca14610946578063c87b56dd1461095d578063e058cc5914610a03578063e985e9c514610a3e578063ec3178f914610ab9578063f2fde38b14610b51575b600080fd5b34801561018657600080fd5b506101c460048036038101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b94565b604051808215151515815260200191505060405180910390f35b3480156101ea57600080fd5b506101f3610bfb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610233578082015181840152602081019050610218565b50505050905090810190601f1680156102605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027a57600080fd5b5061029960048036038101908080359060200190929190505050610c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e757600080fd5b50610326600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cee565b005b34801561033457600080fd5b50610359600480360381019080803563ffffffff169060200190929190505050610e33565b6040518082815260200191505060405180910390f35b34801561037b57600080fd5b50610384610ead565b6040518082815260200191505060405180910390f35b3480156103a657600080fd5b50610405600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eba565b005b34801561041357600080fd5b50610452600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610edf565b6040518082815260200191505060405180910390f35b34801561047457600080fd5b5061047d610f1f565b005b34801561048b57600080fd5b506104ea600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f98565b005b3480156104f857600080fd5b50610501610fb9565b6040518082815260200191505060405180910390f35b34801561052357600080fd5b5061054260048036038101908080359060200190929190505050610fc8565b6040518082815260200191505060405180910390f35b34801561056457600080fd5b50610599600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611019565b604051808215151515815260200191505060405180910390f35b3480156105bf57600080fd5b506105de600480360381019080803590602001909291905050506111f3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062c57600080fd5b50610661600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611271565b6040518082815260200191505060405180910390f35b34801561068357600080fd5b5061068c6112f5565b005b34801561069a57600080fd5b506106cf600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c9565b604051808215151515815260200191505060405180910390f35b3480156106f557600080fd5b5061072c600480360381019080803590602001909291908035906020019082018035906020019190919293919293905050506113e9565b005b34801561073a57600080fd5b5061074361142d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561079157600080fd5b5061079a611457565b604051808215151515815260200191505060405180910390f35b3480156107c057600080fd5b506107c96114af565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108095780820151818401526020810190506107ee565b50505050905090810190601f1680156108365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561085057600080fd5b50610891600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611551565b005b34801561089f57600080fd5b50610944600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919291929050505061168d565b005b34801561095257600080fd5b5061095b6116b5565b005b34801561096957600080fd5b506109886004803603810190808035906020019092919050505061180d565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109c85780820151818401526020810190506109ad565b50505050905090810190601f1680156109f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a0f57600080fd5b50610a3c600480360381019080803590602001908201803590602001919091929391929390505050611917565b005b348015610a4a57600080fd5b50610a9f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119cd565b604051808215151515815260200191505060405180910390f35b348015610ac557600080fd5b50610afa600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a61565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610b3d578082015181840152602081019050610b22565b505050509050019250505060405180910390f35b348015610b5d57600080fd5b50610b92600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b93565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b5050505050905090565b6000610ca882611bb2565b1515610cb357600080fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cf9826111f3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d3657600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d765750610d7581336119cd565b5b1515610d8157600080fd5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000806000809150600090505b600a80549050811015610ea3578363ffffffff16600a82815481101515610e6357fe5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff161415610e965781806001019250505b8080600101915050610e40565b8192505050919050565b6000600a80549050905090565b610ec43382611c24565b1515610ecf57600080fd5b610eda838383611cb9565b505050565b6000610eea83611271565b82101515610ef757600080fd5b610f0083611a61565b82815181101515610f0d57fe5b90602001906020020151905092915050565b6000610f29611457565b1515610f3457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff163190503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f94573d6000803e3d6000fd5b5050565b610fb4838383602060405190810160405280600081525061168d565b505050565b600062278d0060045401905090565b6000610fd2610ead565b82101515610fdf57600080fd5b600a82815481101515610fee57fe5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff169050919050565b6000806000611026611457565b151561103157600080fd5b8391508173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156110cf57600080fd5b505af11580156110e3573d6000803e3d6000fd5b505050506040513d60208110156110f957600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111af57600080fd5b505af11580156111c3573d6000803e3d6000fd5b505050506040513d60208110156111d957600080fd5b810190808051906020019092919050505092505050919050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561126857600080fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156112ae57600080fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112fd611457565b151561130857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60096020528060005260406000206000915054906101000a900460ff1681565b6113f1611457565b15156113fc57600080fd5b8181600b8581548110151561140d57fe5b9060005260206000200160000191906114279291906125c6565b50505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115475780601f1061151c57610100808354040283529160200191611547565b820191906000526020600020905b81548152906001019060200180831161152a57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561158c57600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611698848484610eba565b6116a484848484611f1e565b15156116af57600080fd5b50505050565b60008060001515600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561171757600080fd5b4262278d00600454011015151561172d57600080fd5b611735612140565b60ff1691506001600a6020604051908101604052808563ffffffff1681525090806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555050500390506117b1338261221c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6060600061181a83611bb2565b151561182557600080fd5b600a8381548110151561183457fe5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff169050600b8181548110151561186957fe5b906000526020600020016000018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561190a5780601f106118df5761010080835404028352916020019161190a565b820191906000526020600020905b8154815290600101906020018083116118ed57829003601f168201915b5050505050915050919050565b61191f611457565b151561192a57600080fd5b600a600b8054905010151561193e57600080fd5b600b60206040519081016040528084848080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505081525090806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000190805190602001906119c5929190612646565b505050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606080600080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051908082528060200260200182016040528015611ad55781602001602082028038833980820191505090505b50925060009150600090505b600a80549050811015611b88578473ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b7b57808383815181101515611b6457fe5b906020019060200201818152505081806001019250505b8080600101915050611ae1565b829350505050919050565b611b9b611457565b1515611ba657600080fd5b611baf816123b5565b50565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080611c30836111f3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c9f57508373ffffffffffffffffffffffffffffffffffffffff16611c8784610c9d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cb05750611caf81856119cd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cd9826111f3565b73ffffffffffffffffffffffffffffffffffffffff16141515611cfb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d3757600080fd5b611d40816124b1565b611d936001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461257190919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e296001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259290919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080611f408573ffffffffffffffffffffffffffffffffffffffff166125b3565b1515611f4f5760019150612137565b8473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612044578082015181840152602081019050612029565b50505050905090810190601f1680156120715780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561209357600080fd5b505af11580156120a7573d6000803e3d6000fd5b505050506040513d60208110156120bd57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505b50949350505050565b6000600a4233604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040526040518082805190602001908083835b6020831015156121dc57805182526020820191506020810190506020830392506121b7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390206001900481151561221657fe5b06905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561225857600080fd5b61226181611bb2565b15151561226d57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506123126001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461259290919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156123f157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561256e5760006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008083831115151561258357600080fd5b82840390508091505092915050565b60008082840190508381101515156125a957600080fd5b8091505092915050565b600080823b905060008111915050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061260757803560ff1916838001178555612635565b82800160010185558215612635579182015b82811115612634578235825591602001919060010190612619565b5b50905061264291906126c6565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061268757805160ff19168380011785556126b5565b828001600101855582156126b5579182015b828111156126b4578251825591602001919060010190612699565b5b5090506126c291906126c6565b5090565b6126e891905b808211156126e45760008160009055506001016126cc565b5090565b905600a165627a7a7230582033947f08dcd1d3322dc956778b488075a5bb27dd2e80e9418a94df4d35989a0e00290000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104d656d652041776172647320323031380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d41323031380000000000000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104d656d652041776172647320323031380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d41323031380000000000000000000000000000000000000000000000000000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 4d656d6520417761726473203230313800000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 4d41323031380000000000000000000000000000000000000000000000000000

Swarm Source

bzzr://33947f08dcd1d3322dc956778b488075a5bb27dd2e80e9418a94df4d35989a0e
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.